Choosing an adapter
The template ships with @sveltejs/adapter-auto, which detects the deployment
platform at build time. For explicit control, swap it:
npm i -D @sveltejs/adapter-vercel # or adapter-netlify, adapter-node Then in svelte.config.js:
import adapter from '@sveltejs/adapter-vercel';
const config = {
kit: {
adapter: adapter()
}
}; Environment variables
Set every variable from Installation in your hosting
dashboard. The service-role key and webhook secret are server-side only —
never prefix them with PUBLIC_.
Stripe webhook reachability
Your deployment must expose
POST /api/stripe/webhook over
public HTTPS. Local testing uses the Stripe CLI instead (see Webhooks).Production checklist
- Supabase — set Site URL and redirect URLs to your production domain; run the subscriptions migration against the production database.
- Stripe — switch to live keys; create live Products/Prices and fill
STRIPE_PRICE_PRO/STRIPE_PRICE_ENTERPRISE; add a production webhook endpoint; activate the Customer Portal link. - Resend — verify your sending domain and update
CONTACT_FROM_EMAIL. - OAuth — add the production callback URL (
https://yourdomain.com/auth/callback) to the allowlist in Supabase Auth settings. - Verify — sign up, subscribe with a real card, confirm the webhook flips your subscription status on the billing page.
Continuous integration
npm run lint, npm run check, npm run build, and npm run test:e2e compose a complete CI pipeline. The e2e suite starts its own dev server, so it
needs no running services — every external dependency degrades gracefully.