1.3 KiB
1.3 KiB
neireva-contact
Temporary conference lead-capture form for contact.neireva.com.
Writes to the marketing_leads table in the Neireva dev Supabase project.
Decommission after the conference; keep the table + data.
Run locally
npm install
cp .env.example .env.local # fill in SUPABASE_SERVICE_ROLE_KEY
npm run dev # http://localhost:3000
Submit a test entry, then confirm a row appears:
select * from marketing_leads order by created_at desc limit 1;
Environment variables (set in Coolify, never committed)
| Var | Notes |
|---|---|
SUPABASE_URL |
https://jgyibweqcygoirfwofyp.supabase.co (dev) |
SUPABASE_SERVICE_ROLE_KEY |
Server-side only. Do not prefix NEXT_PUBLIC_. |
Notes
- Consent wording lives in
lib/consent.tsand is stored server-side on insert, so the savedconsent_textalways matches what was displayed. BumpCONSENT_VERSIONif you change the wording. - Honeypot + in-memory rate limit (5/IP/hour). The limiter is per-instance — fine for a single Coolify container; would need Redis if scaled out.
- The page is set to
noindex(temporary). To switch the UI to French, translate the labels incomponents/ContactForm.tsxand the copy inapp/page.tsx; the consent text inlib/consent.tsis intentionally left as supplied.