- Next API routes: /api/register + /api/checkout (Stripe session) + /api/stripe-webhook
(signature-verified; fulfils through be-crm), ported from the landing's serverless
functions. Shared founder lead validation in src/lib/founder/lead.ts.
- /api/founder/lookup + /api/founder/session proxy be-crm's public endpoints.
- /thanks polls session_id → founder token → redirects to /portal/register?ft=<token>;
falls back to the emailed link if the webhook is briefly delayed.
- register-flow: reads ?ft=, validates + prefills (email locked, name, phone) from the
paid founder record, passes founderToken to crm.account.register (claims token +
provisions owner). Open registration is now blocked — only a paid founder (ft) or a
team invitee may register; everyone else sees a 'Founder access required' gate.
Copies the goutam-pages landing (React marketing home + /page/1..19 + assets)
into /public and adds beforeFiles rewrites so '/' serves the marketing home and
'/1'..'/19' + '/thanks' serve the static pages — reproducing the landing's
vercel.json clean URLs. /portal/* (login/register) is untouched.