From ddab32d3efc31e0f937326f479a6c9697d71ac76 Mon Sep 17 00:00:00 2001 From: Javaxman Date: Fri, 24 Apr 2026 21:32:15 +0200 Subject: [PATCH] Riduce il routing del contact form pubblico a info, privacy e careers. Allinea backend, configurazione env e documentazione al nuovo modello vetrina con destinatari meno granulari. Made-with: Cursor --- .env.example | 7 ++----- README.md | 20 +++++++++++++++----- src/data/home/cta.ts | 12 ++++-------- src/pages/api/contact.ts | 9 +++------ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.env.example b/.env.example index aef0b21..e3ce163 100644 --- a/.env.example +++ b/.env.example @@ -7,10 +7,7 @@ CONTACT_FORM_MODE=dev CONTACT_FORM_RESEND_API_KEY= CONTACT_FORM_FROM_EMAIL=no-reply@nexstudio.com CONTACT_FORM_TO_EMAIL=info@nexstudio.com -CONTACT_FORM_TO_EMAIL_SUPPORT=support@nexstudio.com +CONTACT_FORM_TO_EMAIL_INFO=info@nexstudio.com CONTACT_FORM_TO_EMAIL_PRIVACY= -CONTACT_FORM_TO_EMAIL_SECURITY= -CONTACT_FORM_TO_EMAIL_ETHICS= -CONTACT_FORM_TO_EMAIL_LEGAL= -CONTACT_FORM_TO_EMAIL_HR= +CONTACT_FORM_TO_EMAIL_CAREERS= CONTACT_TURNSTILE_SECRET_KEY= diff --git a/README.md b/README.md index c256778..3a175f8 100644 --- a/README.md +++ b/README.md @@ -66,12 +66,9 @@ Variabili server (Cloudflare/local): - `CONTACT_FORM_RESEND_API_KEY` - `CONTACT_FORM_FROM_EMAIL` (consigliato: `no-reply@nexstudio.ai`) - `CONTACT_FORM_TO_EMAIL` (default destinatario, es. `info@nexstudio.ai`) -- `CONTACT_FORM_TO_EMAIL_SUPPORT` +- `CONTACT_FORM_TO_EMAIL_INFO` (opzionale, override esplicito per area "info") - `CONTACT_FORM_TO_EMAIL_PRIVACY` -- `CONTACT_FORM_TO_EMAIL_SECURITY` -- `CONTACT_FORM_TO_EMAIL_ETHICS` -- `CONTACT_FORM_TO_EMAIL_LEGAL` -- `CONTACT_FORM_TO_EMAIL_HR` +- `CONTACT_FORM_TO_EMAIL_CAREERS` - `CONTACT_TURNSTILE_SECRET_KEY` Comportamento: @@ -79,6 +76,19 @@ Comportamento: - `dev`: accetta submit e scrive payload nei log (senza invio reale) - `live`: valida Turnstile e invia email via Resend +Routing pubblico consigliato (portale vetrina): + +- `info`: informazioni generali/commerciali +- `privacy`: richieste privacy e diritti interessato +- `careers`: candidature e collaborazioni + +Indirizzi consigliati portale: + +- `info@nexstudio.ai` +- `privacy@nexstudio.ai` +- `careers@nexstudio.ai` +- `no-reply@nexstudio.ai` (solo invio comunicazioni/newsletter, non destinazione inbound) + ## Deploy Cloudflare Impostazioni consigliate: diff --git a/src/data/home/cta.ts b/src/data/home/cta.ts index 746f3a1..1ead7e6 100644 --- a/src/data/home/cta.ts +++ b/src/data/home/cta.ts @@ -30,7 +30,7 @@ export const cta = { nameLabel: 'Nome', companyLabel: 'Azienda (opzionale)', countryLabel: 'Paese', - departmentLabel: 'Reparto', + departmentLabel: 'Area', emailLabel: 'Email', messageLabel: 'Scrivi qui il tuo messaggio', submitLabel: 'Invia messaggio', @@ -54,13 +54,9 @@ export const cta = { fieldEmail: 'email', fieldMessage: 'message', departmentOptions: [ - { value: 'general', label: 'Generale' }, - { value: 'support', label: 'Support' }, - { value: 'privacy', label: 'Privacy / DPO' }, - { value: 'security', label: 'Security / Incident Response' }, - { value: 'ethics', label: 'Segnalazioni confidenziali (Ethics)' }, - { value: 'legal', label: 'Legal' }, - { value: 'hr', label: 'HR' }, + { value: 'info', label: 'Informazioni generali e commerciali' }, + { value: 'privacy', label: 'Privacy' }, + { value: 'careers', label: 'Careers / Collaborazioni' }, ], }, } as const; diff --git a/src/pages/api/contact.ts b/src/pages/api/contact.ts index f69dd38..2d86cf7 100644 --- a/src/pages/api/contact.ts +++ b/src/pages/api/contact.ts @@ -82,12 +82,9 @@ async function sendWithResend(apiKey: string, fromEmail: string, toEmail: string function resolveDepartmentRecipient(runtimeEnv: RuntimeEnv, defaultRecipient: string, department: string): string { const normalized = department.trim().toLowerCase(); const map: Record = { - support: readEnv('CONTACT_FORM_TO_EMAIL_SUPPORT', runtimeEnv), + info: readEnv('CONTACT_FORM_TO_EMAIL_INFO', runtimeEnv) || defaultRecipient, privacy: readEnv('CONTACT_FORM_TO_EMAIL_PRIVACY', runtimeEnv), - security: readEnv('CONTACT_FORM_TO_EMAIL_SECURITY', runtimeEnv), - ethics: readEnv('CONTACT_FORM_TO_EMAIL_ETHICS', runtimeEnv), - legal: readEnv('CONTACT_FORM_TO_EMAIL_LEGAL', runtimeEnv), - hr: readEnv('CONTACT_FORM_TO_EMAIL_HR', runtimeEnv), + careers: readEnv('CONTACT_FORM_TO_EMAIL_CAREERS', runtimeEnv), }; return map[normalized] || defaultRecipient; } @@ -111,7 +108,7 @@ export const POST: APIRoute = async ({ request, locals, url }) => { const company = required(form.get('company')); const email = required(form.get('email')); const country = required(form.get('country')); - const department = required(form.get('department')) || 'general'; + const department = required(form.get('department')) || 'info'; const message = required(form.get('message')); if (!name || !email || !country || !message) {