# 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 ```bash 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.ts` and is stored server-side on insert, so the saved `consent_text` always matches what was displayed. Bump `CONSENT_VERSION` if 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 in `components/ContactForm.tsx` and the copy in `app/page.tsx`; the consent text in `lib/consent.ts` is intentionally left as supplied.