Deploy to Vercel
Steps#
- Import the repository in Vercel.
- Set every environment variable in Project Settings → Environment Variables before the first deploy.
- Set
APP_URLto your production domain. - Run
npm run db:migrate:deployagainst your production database before the first request hits it. - Point your Stripe webhook at
<APP_URL>/api/webhooks/stripe.
Other targets#
The app is a standard Next.js 15 App Router project, so Railway and Fly.io work the same way. The only Vercel-specific consideration is Edge Runtime: middleware.ts verifies tokens with the public key only, so the private key never reaches the edge. See security decisions.
After deploying#
Verify the webhook is receiving events before you take real money. A webhook handler that returns the same status for an invalid signature and a transient database error means Stripe stops retrying and billing events vanish silently. That case is handled in the boilerplate, but confirm it end to end in your own environment.
Next: Reporting usage from your live MCP server.