* fix(contact): add dedicated enterprise contact endpoint with storage and email notifications
The enterprise contact form was posting to /api/register-interest which
only stored email for the waitlist. Name, organization, and message fields
were silently dropped and no notification was sent.
- Add api/contact.js endpoint with Turnstile, rate limiting, honeypot
- Add Convex contactMessages table and submit mutation
- Send notification email to sales@worldmonitor.app via Resend
- Sanitize email subject (strip newlines, truncate length)
- Fix cf-connecting-ip priority in register-interest.js IP detection
* chore: add contact.js to legacy endpoint allowlist
* fix(contact): harden Turnstile enforcement, surface email status, add tests
- Turnstile rejects in production when TURNSTILE_SECRET_KEY is unset
(only allows skip in development)
- sendNotificationEmail returns boolean, response includes emailSent field
- Log error (not warn) when RESEND_API_KEY is missing in production
- Add 15 endpoint tests covering validation, Turnstile, notifications, Convex