CoreMVP

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 production

Check the key names and targets against this inventory:

Setup ownerProduction keys
Vercel projectNEXT_PUBLIC_APP_URL
SupabaseNEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, DATABASE_URL, SUPABASE_SECRET_KEY
EmailEMAIL_DELIVERY_MODE plus Resend values for real email or TEST_EMAIL_CAPTURE_TOKEN for capture.
StripeProvider selector, NEXT_PUBLIC_STRIPE_MODE=test, catalog IDs, publishable key, API key, webhook secret.
PolarPAYMENT_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 --prod

Wait 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://app-domain

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?

On this page