Ship to production like a real company
Your app works. Now make it the kind of thing you'd trust with your own card details: a proper domain, separate environments, secrets that stay secret, emails that land in the inbox, errors you hear about before customers do, numbers you actually watch, backups you've tested, and the legal pages UK customers expect.
- Email that reaches the inbox, with SPF, DKIM and DMARC set up properly
- Error alerts from Sentry, product analytics from PostHog, and the three numbers that matter
- Tested backups, uptime alerts, legal pages and a pre-launch checklist
- Your MVP from Build your MVP in a weekend, not a quarter with payments from Take your first payment with Stripe
- Access to your Vercel, Supabase, Stripe and Resend dashboards
- A domain name (or a few pounds to buy one)
- About an hour of focus. This is the unglamorous hour that saves you a terrible week.
Put it on your own domain
Nobody types their card into something-random-abc123.vercel.app. A real domain is the cheapest trust signal you'll ever buy.
Buy a domain from any mainstream registrar if you haven't already. Short, easy to spell out loud,
.comor.co.ukif you can get them. Don't burn a day on the name: you can change it, and your first customers won't care.In Vercel go to your project's Settings, Domains and add both
yourdomain.comandwww.yourdomain.com. Pick one as the main address and set the other to redirect to it. Vercel then shows you exactly which DNS records to add. Add those, at your registrar or DNS provider, exactly as shown. Don't copy records from an old blog post: Vercel's values can differ per project.DNS changes usually show up within minutes, occasionally hours. Check from your terminal:
Terminalnslookup yourdomain.com nslookup www.yourdomain.comVercel issues the HTTPS certificate automatically once the records resolve. Then update everything that knows your old address:
- Vercel env var
NEXT_PUBLIC_SITE_URLfor Production:https://yourdomain.com. Redeploy. - Supabase Authentication, URL Configuration: Site URL to
https://yourdomain.com, and addhttps://yourdomain.com/**to Redirect URLs. - Stripe live webhook endpoint:
https://yourdomain.com/api/stripe/webhook(the exact final address, no redirect in between). - Resend: the sending domain you verify in step 5.
TipIf your DNS is on Cloudflare, set the records Vercel gives you to DNS only (grey cloud) unless you know why you'd proxy them. Putting a proxy in front of Vercel is a classic cause of redirect loops and certificate errors. Vercel's domains docs ↗ cover the details.- Vercel env var
https://yourdomain.com loads your app with a padlock, www redirects to it (or the other way round), and a magic link sent from production lands you on the dashboard at your domain.If it breaksERR_TOO_MANY_REDIRECTS on the new domain + 2 more
ERR_TOO_MANY_REDIRECTS on the new domain
Vercel says 'Invalid Configuration' for hours
nslookup returns with what Vercel asks for. Look for an old A or AAAA record from a parking page that's still there, and delete it.Magic links still point at the vercel.app address
NEXT_PUBLIC_SITE_URL still has the old value. Update both, redeploy, and request a new link (old emails keep the old address).