feat(website-intake): dual-write endpoint + migration chain repair
Adds website_submissions table + shared-secret POST endpoint so the marketing site can dual-write inquiries alongside its NocoDB write. Race-safe via INSERT ... ON CONFLICT, idempotent on submission_id, refuses every request when WEBSITE_INTAKE_SECRET is unset. Also repairs pre-existing 0020/0021/0022 prevId collision (renumbered + journal re-sorted) so db:generate works again. 11 unit tests. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -50,6 +50,13 @@ const envSchema = z.object({
|
||||
GOOGLE_CLIENT_ID: z.string().optional(),
|
||||
GOOGLE_CLIENT_SECRET: z.string().optional(),
|
||||
|
||||
// Shared secret used by the marketing website's server-side dual-write
|
||||
// helper (POST to /api/public/website-inquiries). Set the SAME value on
|
||||
// the website's CRM_INTAKE_SECRET env. Leave unset in dev/staging until
|
||||
// the website's CRM_INTAKE_URL is also set — without this, the public
|
||||
// intake endpoint refuses every request.
|
||||
WEBSITE_INTAKE_SECRET: z.string().min(16).optional(),
|
||||
|
||||
// OpenAI (optional)
|
||||
OPENAI_API_KEY: z.string().optional(),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user