Deploy Your App
Deploy after the Supabase, email, and chosen billing provider checkpoints are complete. Use the linked Vercel project and its saved test configuration.
Check the Production configuration
bunx vercel env ls productionCheck the key names and targets against this inventory:
| Setup owner | Production keys |
|---|---|
| Vercel project | NEXT_PUBLIC_APP_URL |
| Supabase | NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, DATABASE_URL, SUPABASE_SECRET_KEY |
EMAIL_DELIVERY_MODE plus Resend values for real email or TEST_EMAIL_CAPTURE_TOKEN for capture. | |
| Stripe | Provider selector, NEXT_PUBLIC_STRIPE_MODE=test, catalog IDs, publishable key, API key, webhook secret. |
| Polar | PAYMENT_PROVIDER=polar, POLAR_ENVIRONMENT=sandbox, organization/product IDs, POLAR_ACCESS_TOKEN, POLAR_WEBHOOK_SECRET |
Use Hosted Environment Variables for the shared copyable block and each setting's requirements.
Use the Stripe or Polar row for your selected provider; retain both when your app still uses retained Stripe relationships alongside Polar billing. Names alone do not prove values match. Check the saved provider identities, app origin, and test offers privately.
Stripe automation uses EMAIL_DELIVERY_MODE=test_capture with its server
token, including subscription-only apps. The manual hosted Polar journey
uses EMAIL_DELIVERY_MODE=real with both Resend values. Keep Stripe in test
mode or Polar in sandbox; leave STRIPE_SECRET_KEY_LIVE unset during
Stripe testing.
For optional capabilities you enabled locally, configure their hosted values from the owning guide too—for example, OAuth providers. Do not upload local localhost settings as Production configuration.
Deploy the saved source
From the purchased template root:
bunx vercel deploy --prodWait for a successful deployment in the intended project. Vercel env changes apply to subsequent deployments; saving an env value alone does not update the running app.
Check the stable production domain
In the project's Deployments and Domains views, check that your recorded app domain serves this new Production deployment. Open that domain, not just the generated deployment URL printed by the CLI.
Vercel can show several URLs for one deployment. A different per-deployment URL is normal; do not rewrite Auth callbacks or billing webhook destinations to it.
If the canonical domain really differs, correct NEXT_PUBLIC_APP_URL,
Supabase's Site URL/exact redirects, and your billing destination URL before
continuing. If you create a replacement destination, save its own signing
secret too. Redeploy after changing runtime values.
Run bounded liveness
./coremvp prod e2e smoke https://Continue when the check succeeds on your intended HTTPS origin. Smoke checks the public/health surface, not sessions, payment, webhook persistence, or email. Continue to the hosted Auth checks and your provider's billing test.
What's next
Was this page helpful?