Skip to content

Commit 012300e

Browse files
committed
Add field for company name in contact form in API
1 parent 3c06a1e commit 012300e

8 files changed

Lines changed: 303 additions & 37 deletions

File tree

Contact_Form_ Kevin.eml

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,209 @@
1+
Delivered-To: kevin@webstackbuilders.com
2+
Received: by 2002:a05:6214:202b:b0:89c:a2ad:339b with SMTP id 11csp1897635qvf;
3+
Tue, 14 Apr 2026 06:02:40 -0700 (PDT)
4+
X-Forwarded-Encrypted: i=4; AFNElJ9jv1UNPyFH5FkVhIQYgnZTKXkI4Hq6noplnCzp0jGWl1tzX7nAReYN/nO4QUIadkFgQ7c//g==@webstackbuilders.com
5+
X-Received: by 2002:a05:6a20:3d06:b0:398:7357:bb91 with SMTP id adf61e73a8af0-39fe3f56b62mr18273907637.33.1776171760114;
6+
Tue, 14 Apr 2026 06:02:40 -0700 (PDT)
7+
ARC-Seal: i=3; a=rsa-sha256; t=1776171760; cv=pass;
8+
d=google.com; s=arc-20240605;
9+
b=BgnNFfYJf8pgsPesEafUlU4vMLXh4iPeVawtomjHsEaxioOz2fjR3dNcQ186kRUvBQ
10+
93dti4XdiDXFTEifojeyxJXJDCl4uPAucw+W+UeTMnytVE52boAFt79j7knG1OZjDXOO
11+
dasp+ImaSODE7Wjj/GJrvMtIYalv7LRL9vz5+7ZxIsQW/N1xiICX3Qpy25nY9DM6uhen
12+
yjtMrVbJMLATj1qKtHzEgrHLjFKWKDONqMr5gq83xq2PipM0J4pQFSc0LLqOkEERPsRt
13+
wq9X/1qbw8eYrV9kvtCOkP7GzcX/vKUi1bsUth9GvyN4vuk5jrAMzq3FcUWUOQgWo4Vr
14+
MG1w==
15+
ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605;
16+
h=feedback-id:mime-version:date:message-id:subject:reply-to:to:from
17+
:dkim-signature:dkim-signature;
18+
bh=yY9J2qv0+S/XZaMLoOwAlBmuLMoTRiOKnbqckzEXWEM=;
19+
fh=1JSicWTQQWuLqSXgXTAkx/vPNtvEF3QcOK7XU+tlkE4=;
20+
b=NqAROpbLdgoiC9FgUBHC2gPXNBI0I9b4JeTR30705BZe397pIKO13cDqokiEzdxX/C
21+
IodrwVq2xLwL7nyQmHfvg6rvBExcMm+n1BTyQKY8/s4o8ahUA/hkJHpcHHqv+FnJlkQR
22+
9+4NP4ZZ5EQI1W1MWVxDAk8Cn3Ma4LpsbiNeCa1GfuLQy09ofQum7LRZ03XjXsgElJEw
23+
IHbhkp13pXd9RnoQRWbTIO7XAFqzTvCW0llfHJKyi7lx6vkujmgttC4GB4XSS9on77Op
24+
Nosua8UOfolQ7ur3HVQVLmYXuWpgzkTUTmYorZLA4vQk75ehOstneQs1QLcUFLAExbR6
25+
Y9lQ==;
26+
dara=google.com
27+
ARC-Authentication-Results: i=3; mx.google.com;
28+
dkim=pass header.i=@contact.webstackbuilders.com header.s=resend header.b="SLf/vVm8";
29+
dkim=pass header.i=@amazonses.com header.s=224i4yxa5dv7c2xz3womw6peuasteono header.b=Xd6QAq9u;
30+
arc=pass (i=2 spf=pass spfdomain=send.contact.webstackbuilders.com dkim=pass dkdomain=contact.webstackbuilders.com dkim=pass dkdomain=amazonses.com dmarc=pass fromdomain=webstackbuilders.com);
31+
spf=softfail (google.com: domain of transitioning 0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com does not designate 209.85.220.69 as permitted sender) smtp.mailfrom=0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com;
32+
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=webstackbuilders.com;
33+
dara=pass header.i=@webstackbuilders.com
34+
Return-Path: <0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com>
35+
Received: from mail-sor-f69.google.com (mail-sor-f69.google.com. [209.85.220.69])
36+
by mx.google.com with SMTPS id 41be03b00d2f7-c7921925100sor3373155a12.3.2026.04.14.06.02.39
37+
for <kevin@webstackbuilders.com>
38+
(Google Transport Security);
39+
Tue, 14 Apr 2026 06:02:39 -0700 (PDT)
40+
Received-SPF: softfail (google.com: domain of transitioning 0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com does not designate 209.85.220.69 as permitted sender) client-ip=209.85.220.69;
41+
Authentication-Results: mx.google.com;
42+
dkim=pass header.i=@contact.webstackbuilders.com header.s=resend header.b="SLf/vVm8";
43+
dkim=pass header.i=@amazonses.com header.s=224i4yxa5dv7c2xz3womw6peuasteono header.b=Xd6QAq9u;
44+
arc=pass (i=2 spf=pass spfdomain=send.contact.webstackbuilders.com dkim=pass dkdomain=contact.webstackbuilders.com dkim=pass dkdomain=amazonses.com dmarc=pass fromdomain=webstackbuilders.com);
45+
spf=softfail (google.com: domain of transitioning 0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com does not designate 209.85.220.69 as permitted sender) smtp.mailfrom=0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com;
46+
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=webstackbuilders.com;
47+
dara=pass header.i=@webstackbuilders.com
48+
ARC-Seal: i=2; a=rsa-sha256; t=1776171759; cv=pass;
49+
d=google.com; s=arc-20240605;
50+
b=AEtBXJXXGwvAa9A2emJvEa9v1KKrFaFCrz77zy0pKIggwY3jb1Vi6uW7I5mbnwM3PD
51+
dwuJYGB8ciozhhV+dEPQ03Jmt1+HoCdkEDekHtrxZBl5P5jlgpR2fGD8UAq/m/GAv5ef
52+
xAzk7Kf1zn11NVamTswivhHbhrT4cu29rHBnkia66gYgQDuQB2EFPHMxrTiXiLoVfWYE
53+
l583DtLfSDuUWr7tNH6uF7oNq1xBCbPddRytjtd7YhNe7sqGE9Acvr0lZxbClipCJala
54+
OYM1FzhyLniUhTrhXfFxihBA0M1s6IXXEz231pleluL6Hj3HJA0irj/7eO1sxjm92Lf8
55+
OZng==
56+
ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605;
57+
h=feedback-id:mime-version:date:message-id:subject:reply-to:to:from
58+
:dkim-signature:dkim-signature;
59+
bh=yY9J2qv0+S/XZaMLoOwAlBmuLMoTRiOKnbqckzEXWEM=;
60+
fh=1JSicWTQQWuLqSXgXTAkx/vPNtvEF3QcOK7XU+tlkE4=;
61+
b=D+PLnWv7YNaJTSr3I4ZQgDBcNO5kx2sJAJrP8uFcE5l/gF/Z1WCUdi0FG4fRBVIkmC
62+
wu75h739oRIoOf34eLq416QEpuhD4XnWK5MD1vGRKPr8T6eFOYnQbHALzbJ+B8yuViJr
63+
ipKh1vJiw8VKlILxf7cD7SlohMIZUiHV4eNihlmq12y3H3c5wlx5ripnQa03kV7iVb7c
64+
sExXGQj53kJAZSOAMCFjwu1GHDhLgswNCjqgPV8jg5uQaCtoXhNbpVkaXo96TTxq5maF
65+
m1EXbj6aRwX+T8pTZ736L+8PHzUXoz0Uqavge8GtaJeHbq01xRWzwvuxDiDF8Qktfoih
66+
BIog==;
67+
dara=google.com
68+
ARC-Authentication-Results: i=2; mx.google.com;
69+
dkim=pass header.i=@contact.webstackbuilders.com header.s=resend header.b="SLf/vVm8";
70+
dkim=pass header.i=@amazonses.com header.s=224i4yxa5dv7c2xz3womw6peuasteono header.b=Xd6QAq9u;
71+
spf=pass (google.com: domain of 0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com designates 54.240.9.37 as permitted sender) smtp.mailfrom=0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com;
72+
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=webstackbuilders.com
73+
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
74+
d=1e100.net; s=20251104; t=1776171759; x=1776776559;
75+
h=feedback-id:mime-version:date:message-id:subject:reply-to:to:from
76+
:dkim-signature:dkim-signature:x-gm-gg:x-gm-message-state:from:to:cc
77+
:subject:date:message-id:reply-to;
78+
bh=yY9J2qv0+S/XZaMLoOwAlBmuLMoTRiOKnbqckzEXWEM=;
79+
b=dQtjNUFd/aUlfBQpbNIG9E9YBQi9ORFKcWEobGGAMrpQMsD5XWjevCadgquYboudoY
80+
SarYw5cRYopSxBWc5XnJvBaSfsS99Rn1hz92IjI+byMEIfFkQV3wRpSaEcr/EJnNCA+e
81+
ZvU2sQX3NdFFt9oKM7/gp7gNa/eFNu/D807NuBC0n20OeNUKCCWqst6sREXWqKnPiJUD
82+
tE5IDhMQzZdnthDgNxM8gzVwUM4cKkXJrcRS+WXZ5GUmUIW/V8+c4ldUtxuIIn5pySdb
83+
SPLdLWbsqUUo9WU+K+sum3pUCR8t2saa4zGZlX1lBVk7RvODuMpd6GEitSb3BDs+4zEY
84+
7GpQ==
85+
X-Forwarded-Encrypted: i=2; AFNElJ//7yeF/w4+V/SzyVGjHLDb+xDTH/ZsQuNpw/AGXJEhKNcrao3PWsBjOrjIbbU1k3OR9+qZSw==@webstackbuilders.com
86+
X-Gm-Message-State: AOJu0Yyzk8xa0XsdpZo7Ip1O0TIBAy6SZEkutZqNLszX6SgHJVRrHC6+
87+
I2ii0OwfAmMp54aZhomqViq4xzV5mTH4rkJ7Uks6pIxIL9LqFMGJ2ggiIb4FzR1TB/4UlohibPc
88+
NCACC99tzVCeHJ2Y/VPSCzzbQf37goxFbu/KVjoyOG1octlKYhHLhLAqdDqYI8IbUc8h73JHjcl
89+
sQyrTDMzcMs/vwSzYWAi/VtKg6XDSz5vgPk6A=
90+
X-Gm-Gg: AeBDietUfwWzlJatL8aixdg+1+7Q2Q/6peoP9P54WO4ZT/DMSacCGbpA08oUoduktUE
91+
7VyiSvWhFXOdyKHJtbbeE2Dec9HWyS0bT766zizNRjLqPNUHvh5HnAxXaNiv1NwgZJ3R2F3LOx+
92+
UXseeEZ+eOt8Esql5U1IAawKyT4u7CSGSyzqvPX6f2F72PpSbg+5MCz+KWx7A4GKS2UPIlseHpY
93+
m2whzthWnU8ywJaMEkh/tv68FhCYL9AC0yEFxKGSxcDfd0xlHSKUdicEVxU72VZx63HGuWmLBQn
94+
OG0Qv9ll1FZnjwNnuh/uBB434HgKpQ398tJCYmr2QOwlpy4Ydnw/rWUzvoFLzYmtXUONE/IXQKz
95+
bG3mEN5EFNVrqA/SMs2MYk4+f5xVuYcF3kdQEZEMsNYmo823dB7Z++jsiwBxfmWakvB/szq7It+
96+
0zg/8HJ4QtvqTz6UuNBHV0PVK/PxqxtxnRq6mqDK2ZdzdNm3pQTE3hwYyCxr8jJdVzPFv0MzqUm
97+
2EI3lydllkkmDtzx5M9fteq76Orgw4Lew6dBpo=
98+
X-Received: by 2002:a05:6a21:33a0:b0:398:6461:688c with SMTP id adf61e73a8af0-39fe3c64c9bmr19199868637.2.1776171759485;
99+
Tue, 14 Apr 2026 06:02:39 -0700 (PDT)
100+
X-Received: by 2002:a05:6a21:33a0:b0:398:6461:688c with SMTP id adf61e73a8af0-39fe3c64c9bmr19199492637.2.1776171756218;
101+
Tue, 14 Apr 2026 06:02:36 -0700 (PDT)
102+
ARC-Seal: i=1; a=rsa-sha256; t=1776171756; cv=none;
103+
d=google.com; s=arc-20240605;
104+
b=K/d1y4xOjKfaNZntZGLfvONXSyKUnAnKr70EFelmyQxSlyNKEA//9vyG3vclws195M
105+
KD8CxqSV1jjPj2ROw6Vm0/TuqZ9Rjo+CheBjZ1bTH2YPGJ/b03nXd1NwWygKQEO47IaQ
106+
2+pMI1XM0OvGuok168whfSHbGX5FLKyykhp/CeyfvxParMJcISOvMyGoRb8MLVQYWyxD
107+
GSJCJvfnwSjpXfxZBGL2qQov4BMxwaKhg1YYek8Nnrs1JrkoSMh/ETOe9RtsgQRNwHvG
108+
mZlRsUjAl1fx8WpzcQZuxe1CpadDkJrQ27XnCVaFSGEuSYz4hcsmNR5wydFN0qc8FsfS
109+
L4nQ==
110+
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605;
111+
h=feedback-id:mime-version:date:message-id:subject:reply-to:to:from
112+
:dkim-signature:dkim-signature;
113+
bh=yY9J2qv0+S/XZaMLoOwAlBmuLMoTRiOKnbqckzEXWEM=;
114+
fh=2j6Ij1yT7WpJgRfQ4bc2ZUqeHCAyE7Qp6PudKqFG51o=;
115+
b=cig3n6kqHySTGc+Cdxoo18qIPZ5MDcVIzh/Vy+sHPkbjf68hCkOM5IP3FkEOwSKn5M
116+
16HDCaE54vAoSvXzk72PuSerle6kXR8nrzJokPb+M1Syl6KY6nq4pxGSHlutR/XjLbNR
117+
6KiN96SyUQg2AXmqPVuQQNndM7RsYWLWZoE5cJINENmFfF17sdfFPiI8ukSbOiAMN620
118+
fcYtWIRDDx0vhBDJGS4rKeJDQs+FFBqqllzimhgBAqLLuPHZHk5q12KxcBd4a5r2wwXd
119+
2GV6YuacGrMjN21Rw78RyP5P5RRTkAwH8rCEgz84OWp/jBGfHbbb7bQUFhMm+XEc1zOI
120+
5JhA==;
121+
dara=google.com
122+
ARC-Authentication-Results: i=1; mx.google.com;
123+
dkim=pass header.i=@contact.webstackbuilders.com header.s=resend header.b="SLf/vVm8";
124+
dkim=pass header.i=@amazonses.com header.s=224i4yxa5dv7c2xz3womw6peuasteono header.b=Xd6QAq9u;
125+
spf=pass (google.com: domain of 0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com designates 54.240.9.37 as permitted sender) smtp.mailfrom=0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com;
126+
dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=webstackbuilders.com
127+
Return-Path: <0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com>
128+
Received: from a9-37.smtp-out.amazonses.com (a9-37.smtp-out.amazonses.com. [54.240.9.37])
129+
by mx.google.com with ESMTPS id 6a1803df08f44-8ae65e459b1si2066626d6.63.2026.04.14.06.02.35
130+
for <info@webstackbuilders.com>
131+
(version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
132+
Tue, 14 Apr 2026 06:02:36 -0700 (PDT)
133+
Received-SPF: pass (google.com: domain of 0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@send.contact.webstackbuilders.com designates 54.240.9.37 as permitted sender) client-ip=54.240.9.37;
134+
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple; s=resend;
135+
d=contact.webstackbuilders.com; t=1776171755;
136+
h=From:To:Reply-To:Subject:Message-ID:Date:MIME-Version:Content-Type;
137+
bh=yY9J2qv0+S/XZaMLoOwAlBmuLMoTRiOKnbqckzEXWEM=;
138+
b=SLf/vVm8VHCD77TrsGuVxvq8xoBM8ITrarG0cQt15lL/NrEYdv/hVcQ8k4gO1uEu
139+
KSpWxLcoGS13D0jv+bOS3vmGlBot0HIoTYi5cBwHg8/Bk4C8PET7xusecBE5jBb6aQA
140+
6fbdqzvCZlFQ2S1iplGlpMNvEaRZO97Wd237UOiM=
141+
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/simple;
142+
s=224i4yxa5dv7c2xz3womw6peuasteono; d=amazonses.com; t=1776171755;
143+
h=From:To:Reply-To:Subject:Message-ID:Date:MIME-Version:Content-Type:Feedback-ID;
144+
bh=yY9J2qv0+S/XZaMLoOwAlBmuLMoTRiOKnbqckzEXWEM=;
145+
b=Xd6QAq9umA7vL0HUxyVX8gmRg+WXkvMe+amJ1BAzWDbtEfsEq4ME0EMVXY3c0MRY
146+
Kskll9kXDpi6JfoxYbceREP7t6U/1RIJyBhHtBzY32kt1xUAa4tIAmDFq/y6wHVgTZi
147+
ke8sA2RvLebF8iq4fkWniaizFYwnv3koUpwN4ujA=
148+
From: contact@contact.webstackbuilders.com
149+
To: info@webstackbuilders.com
150+
Reply-To: brown70@list.ru
151+
Subject: Contact Form: Kevin
152+
Message-ID: <0100019d8c162845-acabf689-f24c-47a9-875e-0e3a6dfb689b-000000@email.amazonses.com>
153+
Date: Tue, 14 Apr 2026 13:02:35 +0000
154+
MIME-Version: 1.0
155+
Content-Type: multipart/alternative;
156+
boundary="--_NmP-982771661416cd13-Part_1"
157+
Feedback-ID: :1.us-east-1.a5rFcilfMSFqVfdvJu5pTpbHpeMaXQkIMu8kn2hilO/H+DXmLRmigkE4zG959YVdwf23cwdOKa138JCdCrrJCCo5ZKSIsZc9O59T15uGePpRhLuI0jIotYOx2i7hT04AdkLHLzUe0POp9UdM4Cuoq/N83INTXDPUZ9VFlrQDJ4o=:1.us-east-1.pAEstvQcjyhQNKGKcgSlzI7SVR8ZSG5wSmKwiz/A8Dg=:AmazonSES
158+
X-SES-Outgoing: 2026.04.14-54.240.9.37
159+
160+
----_NmP-982771661416cd13-Part_1
161+
Content-Type: text/plain; charset=utf-8
162+
Content-Transfer-Encoding: 7bit
163+
164+
NEW CONTACT FORM SUBMISSION
165+
166+
Name: Kevin
167+
168+
Email: brown70@list.ru
169+
170+
Phone: +7 (921) 761-80-01
171+
172+
Service: full-workstream
173+
174+
Timeline: asap
175+
176+
Message:
177+
178+
Another test email
179+
180+
Consent Given: Yes
181+
----_NmP-982771661416cd13-Part_1
182+
Content-Type: text/html; charset=utf-8
183+
Content-Transfer-Encoding: quoted-printable
184+
185+
<!DOCTYPE html>
186+
<html>
187+
<head>
188+
<meta charset=3D"utf-8">
189+
<style>
190+
body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; }
191+
h1 { color: #2c3e50; border-bottom: 2px solid #3498db; padding-bottom: =
192+
10px; }
193+
p { margin: 10px 0; }
194+
</style>
195+
</head>
196+
<body>
197+
<h1>New Contact Form Submission</h1>
198+
<p><strong>Name:</strong> Kevin</p>
199+
<p><strong>Email:</strong> brown70@list.ru</p>
200+
<p><strong>Phone:</strong> =
201+
+7 (921) 761-80-01</p>
202+
<p><strong>Service:</strong> full-workstream</p>
203+
<p><strong>Timeline:</strong> asap</p>
204+
<p><strong>Message:</strong></p>
205+
<p>Another test email</p>
206+
<p><strong>Consent Given:</strong> Yes</p>
207+
</body>
208+
</html>
209+
----_NmP-982771661416cd13-Part_1--

_TODO.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,7 @@ https://aws.plainenglish.io/how-to-build-a-chatbot-using-aws-lex-and-lambda-in-2
3434
## Content Issues
3535

3636
- Need an article on OpenStack
37+
38+
## Contact Form
39+
40+
- `0/2000` characters should show number of characters left instead

src/actions/contact/@types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
export type ContactFormData = {
22
name: string
33
email: string
4+
company?: string
45
phone?: string
56
message: string
67
consent?: boolean

src/actions/contact/__tests__/responder.spec.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describe('contact responder', () => {
1414
{
1515
name: 'Jane Doe',
1616
email: 'jane@example.com',
17+
company: 'Acme Co',
1718
service: 'Website redesign',
1819
timeline: '2-3-months',
1920
budget: '$5k-$10k',
@@ -42,6 +43,7 @@ describe('contact responder', () => {
4243

4344
// Key fields should appear somewhere in the rendered content.
4445
expect(document.body.textContent ?? '').toContain('jane@example.com')
46+
expect(document.body.textContent ?? '').toContain('Acme Co')
4547
expect(document.body.textContent ?? '').toContain('Website redesign')
4648
expect(document.body.textContent ?? '').toContain('$5k-$10k')
4749
})
@@ -77,6 +79,7 @@ describe('contact responder', () => {
7779
name: ' Jane ',
7880
email: 'jane@example.com',
7981
message: ' Hello ',
82+
company: 'Acme Co',
8083
service: 'Web development',
8184
timeline: '2-3-months',
8285
budget: '$5k-$10k',
@@ -90,6 +93,7 @@ describe('contact responder', () => {
9093
expect(formData.name).toBe(' Jane ')
9194
expect(formData.email).toBe('jane@example.com')
9295
expect(formData.message).toBe(' Hello ')
96+
expect(formData.company).toBe('Acme Co')
9397
expect(formData.service).toBe('Web development')
9498
expect(formData.timeline).toBe('2-3-months')
9599
expect(formData.budget).toBe('$5k-$10k')
@@ -124,6 +128,18 @@ describe('contact responder', () => {
124128
expect(firstAttachment.content).toBeInstanceOf(Buffer)
125129
})
126130

131+
it('accepts browser-recorded audio with codec parameters', async () => {
132+
const file = new File(['audio'], 'recording.webm', { type: 'audio/webm;codecs=opus' })
133+
134+
const attachments = await parseAttachmentsFromInput({
135+
file1: file,
136+
})
137+
138+
expect(attachments).toHaveLength(1)
139+
expect(attachments[0]?.contentType).toBe('audio/webm')
140+
expect(attachments[0]?.filename).toBe('recording.webm')
141+
})
142+
127143
it('rejects disallowed mime types', async () => {
128144
const file = new File(['x'], 'x.exe', { type: 'application/x-msdownload' })
129145

src/actions/contact/action.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,11 @@ async function sendEmail(emailData: EmailData, files: FileAttachment[]): Promise
2626
}
2727

2828
const resend = new Resend(getResendApiKey())
29-
const attachments = files.map(file => ({ filename: file.filename, content: file.content }))
29+
const attachments = files.map(file => ({
30+
filename: file.filename,
31+
content: file.content,
32+
contentType: file.contentType,
33+
}))
3034

3135
try {
3236
const result = await resend.emails.send({

0 commit comments

Comments
 (0)