Deploy to Vercel
npm run deploy preflight, then the production switches to flip by hand.
Preflight first
npm run deploy does not push anything. It runs the audit, the e2e tests and doctor --deep, checks that production keys are live-mode and the app URL is real, then prints the switches you still have to make by hand: host environment variables, the Supabase redirect URL, the production Stripe webhook.
npm run deploy # preflight + checklist
npm run deploy -- --json # machine-readableDeploy
1. Push the repository to GitHub
2. Import it at vercel.com
3. Add every key from .env.local to the project's environment variables, live-mode values for production
4. Deploy
After the first deploy
- Supabase → Authentication → URL Configuration: add the production URL
- Stripe → Webhooks: add https://yourapp.com/api/webhook/stripe with its own signing secret
- Set UPSTASH_REDIS_REST_URL and token so rate limits hold across instances
- Supabase → Authentication → Rate Limits: keep sign-in emails per hour low, and turn on CAPTCHA (Cloudflare Turnstile) under Attack Protection if fake signups appear. Sign-in is requested from Supabase directly, so these are the limits that apply
- Add your domain under Vercel → Domains; the certificate is automatic