neireva-contact/README.md

34 lines
1.3 KiB
Markdown

# 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.