Limited offer: $250 off for the first 200 customers!Claim discount

Deployment

From local dev to live in production — pick any Next.js-compatible host.

1. Commit and push your code

git add .
git commit -m "Ready to ship"
git push origin main

2. Create a new project on your hosting provider

Import your GitHub repository on whichever platform you prefer. Yousship runs on any host that supports Next.js:

  • Vercel — the simplest option. Zero config, automatic preview deployments.
  • Netlify — good alternative with similar DX.
  • Render — useful if you are already running other services there.
  • Railway — great for full-stack projects.

Leave the framework preset as Next.js. The build command (npm run build) and output directory are detected automatically on all of the above platforms.

3. Add environment variables

Your .env.localis never committed to git. Add every key to your host's environment variable settings before the first deploy:

NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
SUPABASE_SERVICE_ROLE_KEY
STRIPE_SECRET_KEY
STRIPE_WEBHOOK_SECRET
RESEND_API_KEY
TipUse your host's environment scopes — set test/sandbox keys for preview/staging deployments and live keys only for production. This prevents test charges from going through a real Stripe account during PR previews.

4. Update webhook endpoints

After your first deploy, update the webhook URLs in each service dashboard to point to your production domain:

  • Stripe — Dashboard → Developers → Webhooks → edit the endpoint from localhost:3000 to yourdomain.com.
  • Lemon Squeezy — Settings → Webhooks → update the URL.

5. Update Supabase redirect URLs

In Supabase → Authentication → URL Configuration, add your production domain so OAuth and magic link redirects work:

https://yourdomain.com/**

6. Production checklists

7. Custom domain (optional)

Add your custom domain in your hosting provider's project settings and point your DNS records as instructed. SSL is provisioned automatically on all major platforms.

TipRun npm run build locally before pushing. It catches TypeScript errors and sitemap generation issues before they fail your CI build.