summaryrefslogtreecommitdiffhomepage
path: root/packages/console
diff options
context:
space:
mode:
authorRyan Vogel <[email protected]>2026-03-17 22:43:43 -0400
committerGitHub <[email protected]>2026-03-17 22:43:43 -0400
commita849a17e9329f0b4b0dbb85abf1366b51f935f8c (patch)
tree2f2958b68a99962f193ea0410bec27d70d0d25ad /packages/console
parent0292f1b5596db954e3811f91a9fafcfad650ead1 (diff)
downloadopencode-a849a17e9329f0b4b0dbb85abf1366b51f935f8c.tar.gz
opencode-a849a17e9329f0b4b0dbb85abf1366b51f935f8c.zip
feat(enterprise): contact form now pushes to salesforce 🙄 (#17964)
Co-authored-by: slickstef11 <[email protected]> Co-authored-by: Frank <[email protected]>
Diffstat (limited to 'packages/console')
-rw-r--r--packages/console/app/src/i18n/ar.ts4
-rw-r--r--packages/console/app/src/i18n/br.ts4
-rw-r--r--packages/console/app/src/i18n/da.ts4
-rw-r--r--packages/console/app/src/i18n/de.ts4
-rw-r--r--packages/console/app/src/i18n/en.ts4
-rw-r--r--packages/console/app/src/i18n/es.ts4
-rw-r--r--packages/console/app/src/i18n/fr.ts4
-rw-r--r--packages/console/app/src/i18n/it.ts4
-rw-r--r--packages/console/app/src/i18n/ja.ts4
-rw-r--r--packages/console/app/src/i18n/ko.ts4
-rw-r--r--packages/console/app/src/i18n/no.ts4
-rw-r--r--packages/console/app/src/i18n/pl.ts4
-rw-r--r--packages/console/app/src/i18n/ru.ts4
-rw-r--r--packages/console/app/src/i18n/th.ts4
-rw-r--r--packages/console/app/src/i18n/tr.ts4
-rw-r--r--packages/console/app/src/i18n/zh.ts4
-rw-r--r--packages/console/app/src/i18n/zht.ts4
-rw-r--r--packages/console/app/src/lib/salesforce.ts81
-rw-r--r--packages/console/app/src/routes/api/enterprise.ts51
-rw-r--r--packages/console/app/src/routes/enterprise/index.css9
-rw-r--r--packages/console/app/src/routes/enterprise/index.tsx50
21 files changed, 247 insertions, 12 deletions
diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts
index b59315aef..9c6ba326d 100644
--- a/packages/console/app/src/i18n/ar.ts
+++ b/packages/console/app/src/i18n/ar.ts
@@ -688,8 +688,12 @@ export const dict = {
"enterprise.form.name.placeholder": "جيف بيزوس",
"enterprise.form.role.label": "المنصب",
"enterprise.form.role.placeholder": "رئيس مجلس الإدارة التنفيذي",
+ "enterprise.form.company.label": "الشركة",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "البريد الإلكتروني للشركة",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "رقم الهاتف",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "ما المشكلة التي تحاول حلها؟",
"enterprise.form.message.placeholder": "نحتاج مساعدة في...",
"enterprise.form.send": "إرسال",
diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts
index a18f3e401..e654bdade 100644
--- a/packages/console/app/src/i18n/br.ts
+++ b/packages/console/app/src/i18n/br.ts
@@ -700,8 +700,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Cargo",
"enterprise.form.role.placeholder": "Presidente Executivo",
+ "enterprise.form.company.label": "Empresa",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "E-mail corporativo",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Telefone",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Qual problema você está tentando resolver?",
"enterprise.form.message.placeholder": "Precisamos de ajuda com...",
"enterprise.form.send": "Enviar",
diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts
index ca3231648..99bc7ec14 100644
--- a/packages/console/app/src/i18n/da.ts
+++ b/packages/console/app/src/i18n/da.ts
@@ -694,8 +694,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Rolle",
"enterprise.form.role.placeholder": "Bestyrelsesformand",
+ "enterprise.form.company.label": "Virksomhed",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Firma-e-mail",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Telefonnummer",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Hvilket problem prøver du at løse?",
"enterprise.form.message.placeholder": "Vi har brug for hjælp med...",
"enterprise.form.send": "Send",
diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts
index d7ed88e36..c366411c3 100644
--- a/packages/console/app/src/i18n/de.ts
+++ b/packages/console/app/src/i18n/de.ts
@@ -699,8 +699,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Rolle",
"enterprise.form.role.placeholder": "Executive Chairman",
+ "enterprise.form.company.label": "Unternehmen",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Firmen-E-Mail",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Telefonnummer",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Welches Problem versuchen Sie zu lösen?",
"enterprise.form.message.placeholder": "Wir brauchen Hilfe bei...",
"enterprise.form.send": "Senden",
diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts
index 8b410bb61..fec02f15c 100644
--- a/packages/console/app/src/i18n/en.ts
+++ b/packages/console/app/src/i18n/en.ts
@@ -689,8 +689,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Role",
"enterprise.form.role.placeholder": "Executive Chairman",
+ "enterprise.form.company.label": "Company",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Company email",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Phone number",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "What problem are you trying to solve?",
"enterprise.form.message.placeholder": "We need help with...",
"enterprise.form.send": "Send",
diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts
index bb466568e..2c811a2d3 100644
--- a/packages/console/app/src/i18n/es.ts
+++ b/packages/console/app/src/i18n/es.ts
@@ -699,8 +699,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Rol",
"enterprise.form.role.placeholder": "Presidente Ejecutivo",
+ "enterprise.form.company.label": "Empresa",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Correo de empresa",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Teléfono",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "¿Qué problema estás intentando resolver?",
"enterprise.form.message.placeholder": "Necesitamos ayuda con...",
"enterprise.form.send": "Enviar",
diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts
index 8ac20c47c..49a418caf 100644
--- a/packages/console/app/src/i18n/fr.ts
+++ b/packages/console/app/src/i18n/fr.ts
@@ -706,8 +706,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Poste",
"enterprise.form.role.placeholder": "Président exécutif",
+ "enterprise.form.company.label": "Entreprise",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "E-mail professionnel",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Téléphone",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Quel problème essayez-vous de résoudre ?",
"enterprise.form.message.placeholder": "Nous avons besoin d'aide pour...",
"enterprise.form.send": "Envoyer",
diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts
index bd8e17a5f..7f6a109e4 100644
--- a/packages/console/app/src/i18n/it.ts
+++ b/packages/console/app/src/i18n/it.ts
@@ -696,8 +696,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Ruolo",
"enterprise.form.role.placeholder": "Presidente Esecutivo",
+ "enterprise.form.company.label": "Azienda",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Email aziendale",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Numero di telefono",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Quale problema stai cercando di risolvere?",
"enterprise.form.message.placeholder": "Abbiamo bisogno di aiuto con...",
"enterprise.form.send": "Invia",
diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts
index e1979041c..d54af67bf 100644
--- a/packages/console/app/src/i18n/ja.ts
+++ b/packages/console/app/src/i18n/ja.ts
@@ -697,8 +697,12 @@ export const dict = {
"enterprise.form.name.placeholder": "ジェフ・ベゾス",
"enterprise.form.role.label": "役職",
"enterprise.form.role.placeholder": "会長",
+ "enterprise.form.company.label": "会社名",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "会社メールアドレス",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "電話番号",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "どのような課題を解決したいですか?",
"enterprise.form.message.placeholder": "これについて支援が必要です...",
"enterprise.form.send": "送信",
diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts
index bf90e9c4e..9434150d5 100644
--- a/packages/console/app/src/i18n/ko.ts
+++ b/packages/console/app/src/i18n/ko.ts
@@ -688,8 +688,12 @@ export const dict = {
"enterprise.form.name.placeholder": "홍길동",
"enterprise.form.role.label": "직책",
"enterprise.form.role.placeholder": "CTO / 개발 팀장",
+ "enterprise.form.company.label": "회사",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "회사 이메일",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "전화번호",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "어떤 문제를 해결하고 싶으신가요?",
"enterprise.form.message.placeholder": "도움이 필요한 부분은...",
"enterprise.form.send": "전송",
diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts
index 0aef49f0d..d31ec1aee 100644
--- a/packages/console/app/src/i18n/no.ts
+++ b/packages/console/app/src/i18n/no.ts
@@ -695,8 +695,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Rolle",
"enterprise.form.role.placeholder": "Styreleder",
+ "enterprise.form.company.label": "Selskap",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Bedrifts-e-post",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Telefonnummer",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Hvilket problem prøver dere å løse?",
"enterprise.form.message.placeholder": "Vi trenger hjelp med...",
"enterprise.form.send": "Send",
diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts
index 19aa503df..5c7005459 100644
--- a/packages/console/app/src/i18n/pl.ts
+++ b/packages/console/app/src/i18n/pl.ts
@@ -698,8 +698,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Rola",
"enterprise.form.role.placeholder": "Prezes Zarządu",
+ "enterprise.form.company.label": "Firma",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "E-mail firmowy",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Numer telefonu",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Jaki problem próbujesz rozwiązać?",
"enterprise.form.message.placeholder": "Potrzebujemy pomocy z...",
"enterprise.form.send": "Wyślij",
diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts
index e5dee8303..779b4c9ac 100644
--- a/packages/console/app/src/i18n/ru.ts
+++ b/packages/console/app/src/i18n/ru.ts
@@ -703,8 +703,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Джефф Безос",
"enterprise.form.role.label": "Роль",
"enterprise.form.role.placeholder": "Исполнительный председатель",
+ "enterprise.form.company.label": "Компания",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Корпоративная почта",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Номер телефона",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Какую проблему вы пытаетесь решить?",
"enterprise.form.message.placeholder": "Нам нужна помощь с...",
"enterprise.form.send": "Отправить",
diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts
index c765a1813..7b69e5736 100644
--- a/packages/console/app/src/i18n/th.ts
+++ b/packages/console/app/src/i18n/th.ts
@@ -691,8 +691,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "ตำแหน่ง",
"enterprise.form.role.placeholder": "ประธานกรรมการบริหาร",
+ "enterprise.form.company.label": "บริษัท",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "อีเมลบริษัท",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "หมายเลขโทรศัพท์",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "คุณกำลังพยายามแก้ปัญหาอะไร?",
"enterprise.form.message.placeholder": "เราต้องการความช่วยเหลือเรื่อง...",
"enterprise.form.send": "ส่ง",
diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts
index 561153755..f700d90dd 100644
--- a/packages/console/app/src/i18n/tr.ts
+++ b/packages/console/app/src/i18n/tr.ts
@@ -700,8 +700,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "Rol",
"enterprise.form.role.placeholder": "Yönetim Kurulu Başkanı",
+ "enterprise.form.company.label": "Şirket",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "Şirket e-postası",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "Telefon numarası",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "Hangi problemi çözmeye çalışıyorsunuz?",
"enterprise.form.message.placeholder": "Şu konuda yardıma ihtiyacımız var...",
"enterprise.form.send": "Gönder",
diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts
index 1a5fb0ff2..27fd28480 100644
--- a/packages/console/app/src/i18n/zh.ts
+++ b/packages/console/app/src/i18n/zh.ts
@@ -669,8 +669,12 @@ export const dict = {
"enterprise.form.name.placeholder": "Jeff Bezos",
"enterprise.form.role.label": "角色",
"enterprise.form.role.placeholder": "执行主席",
+ "enterprise.form.company.label": "公司",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "公司邮箱",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "电话号码",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "您想解决什么问题?",
"enterprise.form.message.placeholder": "我们需要帮助...",
"enterprise.form.send": "发送",
diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts
index 44f3ebee0..55895747f 100644
--- a/packages/console/app/src/i18n/zht.ts
+++ b/packages/console/app/src/i18n/zht.ts
@@ -668,8 +668,12 @@ export const dict = {
"enterprise.form.name.placeholder": "傑夫·貝佐斯",
"enterprise.form.role.label": "職稱",
"enterprise.form.role.placeholder": "執行董事長",
+ "enterprise.form.company.label": "公司",
+ "enterprise.form.company.placeholder": "Acme Inc",
"enterprise.form.email.label": "公司 Email",
"enterprise.form.email.placeholder": "[email protected]",
+ "enterprise.form.phone.label": "電話號碼",
+ "enterprise.form.phone.placeholder": "+1 234 567 8900",
"enterprise.form.message.label": "你想解決什麼問題?",
"enterprise.form.message.placeholder": "我們需要幫助來...",
"enterprise.form.send": "傳送",
diff --git a/packages/console/app/src/lib/salesforce.ts b/packages/console/app/src/lib/salesforce.ts
new file mode 100644
index 000000000..48e0caee7
--- /dev/null
+++ b/packages/console/app/src/lib/salesforce.ts
@@ -0,0 +1,81 @@
+import { Resource } from "@opencode-ai/console-resource"
+
+async function login() {
+ const url = Resource.SALESFORCE_INSTANCE_URL.value.replace(/\/$/, "")
+ const clientId = Resource.SALESFORCE_CLIENT_ID.value
+ const clientSecret = Resource.SALESFORCE_CLIENT_SECRET.value
+
+ const params = new URLSearchParams({
+ grant_type: "client_credentials",
+ client_id: clientId,
+ client_secret: clientSecret,
+ })
+
+ const res = await fetch(`${url}/services/oauth2/token`, {
+ method: "POST",
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
+ body: params.toString(),
+ }).catch((err) => {
+ console.error("Failed to fetch Salesforce access token:", err)
+ })
+
+ if (!res) return
+
+ if (!res.ok) {
+ console.error("Failed to fetch Salesforce access token:", res.status, await res.text())
+ return
+ }
+
+ const data = (await res.json()) as { access_token?: string; instance_url?: string }
+ if (!data.access_token) {
+ console.error("Salesforce auth response did not include an access token")
+ return
+ }
+
+ return {
+ token: data.access_token,
+ url: data.instance_url ?? url,
+ }
+}
+
+export interface SalesforceLeadInput {
+ name: string
+ role: string
+ company?: string
+ email: string
+ phone?: string
+ message: string
+}
+
+export async function createLead(input: SalesforceLeadInput): Promise<boolean> {
+ const auth = await login()
+ if (!auth) return false
+
+ const res = await fetch(`${auth.url}/services/data/v59.0/sobjects/Lead`, {
+ method: "POST",
+ headers: {
+ Authorization: `Bearer ${auth.token}`,
+ "Content-Type": "application/json",
+ },
+ body: JSON.stringify({
+ LastName: input.name,
+ Company: input.company?.trim() || "Website",
+ Email: input.email,
+ Phone: input.phone ?? null,
+ Title: input.role,
+ Description: input.message,
+ LeadSource: "Website",
+ }),
+ }).catch((err) => {
+ console.error("Failed to create Salesforce lead:", err)
+ })
+
+ if (!res) return false
+
+ if (!res.ok) {
+ console.error("Failed to create Salesforce lead:", res.status, await res.text())
+ return false
+ }
+
+ return true
+}
diff --git a/packages/console/app/src/routes/api/enterprise.ts b/packages/console/app/src/routes/api/enterprise.ts
index 27e2dc493..1bc4d0eb2 100644
--- a/packages/console/app/src/routes/api/enterprise.ts
+++ b/packages/console/app/src/routes/api/enterprise.ts
@@ -2,11 +2,15 @@ import type { APIEvent } from "@solidjs/start/server"
import { AWS } from "@opencode-ai/console-core/aws.js"
import { i18n } from "~/i18n"
import { localeFromRequest } from "~/lib/language"
+import { createLead } from "~/lib/salesforce"
interface EnterpriseFormData {
name: string
role: string
+ company?: string
email: string
+ phone?: string
+ alias?: string
message: string
}
@@ -14,33 +18,56 @@ export async function POST(event: APIEvent) {
const dict = i18n(localeFromRequest(event.request))
try {
const body = (await event.request.json()) as EnterpriseFormData
+ const trap = typeof body.alias === "string" ? body.alias.trim() : ""
+
+ if (trap) {
+ return Response.json({ success: true, message: dict["enterprise.form.success.submitted"] }, { status: 200 })
+ }
- // Validate required fields
if (!body.name || !body.role || !body.email || !body.message) {
return Response.json({ error: dict["enterprise.form.error.allFieldsRequired"] }, { status: 400 })
}
- // Validate email format
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
if (!emailRegex.test(body.email)) {
return Response.json({ error: dict["enterprise.form.error.invalidEmailFormat"] }, { status: 400 })
}
- // Create email content
const emailContent = `
${body.message}<br><br>
--<br>
${body.name}<br>
${body.role}<br>
-${body.email}`.trim()
-
- // Send email using AWS SES
- await AWS.sendEmail({
- subject: `Enterprise Inquiry from ${body.name}`,
- body: emailContent,
- replyTo: body.email,
- })
+${body.company ? `${body.company}<br>` : ""}${body.email}<br>
+${body.phone ? `${body.phone}<br>` : ""}`.trim()
+
+ const [lead, mail] = await Promise.all([
+ createLead({
+ name: body.name,
+ role: body.role,
+ company: body.company,
+ email: body.email,
+ phone: body.phone,
+ message: body.message,
+ }),
+ AWS.sendEmail({
+ subject: `Enterprise Inquiry from ${body.name}`,
+ body: emailContent,
+ replyTo: body.email,
+ }).then(
+ () => true,
+ (err) => {
+ console.error("Failed to send enterprise email:", err)
+ return false
+ },
+ ),
+ ])
+
+ if (!lead && !mail) {
+ console.error("Enterprise inquiry delivery failed", { email: body.email })
+ return Response.json({ error: dict["enterprise.form.error.internalServer"] }, { status: 500 })
+ }
return Response.json({ success: true, message: dict["enterprise.form.success.submitted"] }, { status: 200 })
} catch (error) {
diff --git a/packages/console/app/src/routes/enterprise/index.css b/packages/console/app/src/routes/enterprise/index.css
index 584c94fa5..5c594bb51 100644
--- a/packages/console/app/src/routes/enterprise/index.css
+++ b/packages/console/app/src/routes/enterprise/index.css
@@ -23,6 +23,7 @@
--color-text-strong: hsl(0, 5%, 12%);
--color-text-inverted: hsl(0, 20%, 99%);
--color-text-success: hsl(119, 100%, 35%);
+ --color-text-error: hsl(4, 72%, 45%);
--color-border: hsl(30, 2%, 81%);
--color-border-weak: hsl(0, 1%, 85%);
@@ -50,6 +51,7 @@
--color-text-strong: hsl(0, 15%, 94%);
--color-text-inverted: hsl(0, 9%, 7%);
--color-text-success: hsl(119, 60%, 72%);
+ --color-text-error: hsl(4, 76%, 72%);
--color-border: hsl(0, 3%, 28%);
--color-border-weak: hsl(0, 4%, 23%);
@@ -454,6 +456,13 @@
color: var(--color-text-success);
text-align: left;
}
+
+ [data-component="error-message"] {
+ margin-top: 1rem;
+ padding: 1rem 0;
+ color: var(--color-text-error);
+ text-align: left;
+ }
}
}
diff --git a/packages/console/app/src/routes/enterprise/index.tsx b/packages/console/app/src/routes/enterprise/index.tsx
index ee323ff82..9e3d03473 100644
--- a/packages/console/app/src/routes/enterprise/index.tsx
+++ b/packages/console/app/src/routes/enterprise/index.tsx
@@ -13,11 +13,15 @@ export default function Enterprise() {
const [formData, setFormData] = createSignal({
name: "",
role: "",
+ company: "",
email: "",
+ phone: "",
+ alias: "",
message: "",
})
const [isSubmitting, setIsSubmitting] = createSignal(false)
const [showSuccess, setShowSuccess] = createSignal(false)
+ const [error, setError] = createSignal("")
const handleInputChange = (field: string) => (e: Event) => {
const target = e.target as HTMLInputElement | HTMLTextAreaElement
@@ -26,6 +30,8 @@ export default function Enterprise() {
const handleSubmit = async (e: Event) => {
e.preventDefault()
+ setError("")
+ setShowSuccess(false)
setIsSubmitting(true)
try {
@@ -42,13 +48,21 @@ export default function Enterprise() {
setFormData({
name: "",
role: "",
+ company: "",
email: "",
+ phone: "",
+ alias: "",
message: "",
})
setTimeout(() => setShowSuccess(false), 5000)
+ return
}
+
+ const data = (await response.json().catch(() => null)) as { error?: string } | null
+ setError(data?.error ?? i18n.t("enterprise.form.error.internalServer"))
} catch (error) {
console.error("Failed to submit form:", error)
+ setError(i18n.t("enterprise.form.error.internalServer"))
} finally {
setIsSubmitting(false)
}
@@ -147,6 +161,19 @@ export default function Enterprise() {
<div data-component="enterprise-column-2">
<div data-component="enterprise-form">
<form onSubmit={handleSubmit}>
+ <div class="sr-only" aria-hidden="true">
+ <input
+ type="text"
+ name="alias"
+ tabIndex={-1}
+ autocomplete="new-password"
+ inputmode="none"
+ spellcheck={false}
+ value={formData().alias}
+ onInput={handleInputChange("alias")}
+ />
+ </div>
+
<div data-component="form-group">
<label for="name">{i18n.t("enterprise.form.name.label")}</label>
<input
@@ -172,6 +199,17 @@ export default function Enterprise() {
</div>
<div data-component="form-group">
+ <label for="company">{i18n.t("enterprise.form.company.label")}</label>
+ <input
+ id="company"
+ type="text"
+ value={formData().company}
+ onInput={handleInputChange("company")}
+ placeholder={i18n.t("enterprise.form.company.placeholder")}
+ />
+ </div>
+
+ <div data-component="form-group">
<label for="email">{i18n.t("enterprise.form.email.label")}</label>
<input
id="email"
@@ -184,6 +222,17 @@ export default function Enterprise() {
</div>
<div data-component="form-group">
+ <label for="phone">{i18n.t("enterprise.form.phone.label")}</label>
+ <input
+ id="phone"
+ type="tel"
+ value={formData().phone}
+ onInput={handleInputChange("phone")}
+ placeholder={i18n.t("enterprise.form.phone.placeholder")}
+ />
+ </div>
+
+ <div data-component="form-group">
<label for="message">{i18n.t("enterprise.form.message.label")}</label>
<textarea
id="message"
@@ -201,6 +250,7 @@ export default function Enterprise() {
</form>
{showSuccess() && <div data-component="success-message">{i18n.t("enterprise.form.success")}</div>}
+ {error() && <div data-component="error-message">{error()}</div>}
</div>
</div>
</div>