Prod Twin — Cutover Checklist (slappcard/slappcard-staging)
When you're ready to stand up real production. Everything here is a dashboard action (no CLI for these). Dev + staging are done; prod is intentionally separate per policy (docs/CLERK_AUTH.md § Instance policy, ENV_CHECKLIST.md § Dev tier).
1. Clerk — own instance (do first, everything else references it)
- Create a new Clerk app (e.g. "slappcard-prod") in the dashboard
- Enable the Convex integration on that instance (adds
aud: "convex") - Note the instance issuer domain:
https://<verb-noun-00>.clerk.accounts.dev - Copy
pk_...+sk_...keys (Production keys, not test) - Save both in bws (
ops-01):CLERK_SECRET_KEY_PROD,NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY_PROD
2. Convex — prod deployment
-
npx convex deployment create admin-ce3b9:slappcard-staging:prod --type prod - Deploy functions:
CONVEX_DEPLOY_KEY=... npx convex deploy(create key vianpx convex deployment token create prod-ci --deployment admin-ce3b9:slappcard-staging:prod) - Env (mirror staging, prod values):
APP_ENV=production,APP_BASE_URL=https://slappcard.com,CLERK_JWT_ISSUER_DOMAIN=<prod issuer>,CLERK_FRONTEND_API_URL=<prod issuer>,CLERK_SECRET_KEY=<prod sk>,SENTRY_DSN(prod project),RESEND_API_KEY+RESEND_FROM_EMAIL(verified domain),STRIPE_SECRET_KEY+STRIPE_WEBHOOK_SECRET(live),R2_*(prod bucket),TURNSTILE_SECRET_KEY(prod site key),ADMIN_EMAILS - Save deploy key in bws + GH secrets (
CONVEX_DEPLOY_KEY_PROD) - Seed:
wixImport/seedFromWix/publishAllImportedReleases/seed:seedDemo(same as staging)
3. Vercel — prod project
- Create project
slappcard(root dirapps/web), link GitHub repo - Set production branch to
main(matches current repo model) - Env (Production):
NEXT_PUBLIC_CONVEX_URL=<prod convex>,NEXT_PUBLIC_APP_ENV=production,NEXT_PUBLIC_APP_URL=https://slappcard.com,NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=<prod pk>,CLERK_SECRET_KEY=<prod sk>,NEXT_PUBLIC_SENTRY_DSN+SENTRY_AUTH_TOKEN(prod project),NEXT_PUBLIC_POSTHOG_KEY(prod PostHog project — free plan = 1 project, so create on a paid plan OR reuse + URL-target flags; decide at cutover),NEXT_PUBLIC_TURNSTILE_SITE_KEY - Add
VERCEL_PROJECT_ID_PROD+ org id to GH secrets; extenddeploy-vercel.ymlmain branch to deploy to the prod project (or set git integration to auto-deploy main → prod project)
4. Domain & flags
- GoDaddy:
slappcard.com→ Vercel (or DNS provider of choice); add domain in Vercel prod project - Clerk dashboard: add
https://slappcard.comto production instance origins - PostHog: enable prod flags per environment (URL release conditions or separate project)
- Sentry: create
slappcard-prodproject; wire DSN + auth token
5. Cutover checks
-
main→ prod deploy green (CI + Deploy web to Vercel + Deploy Convex) - https://slappcard.com: home, card gate, shop, sign-in/up, Convex queries, Stripe test→live
- Emails send from verified domain (Resend), recordings + analytics in prod PostHog
- Remove/redirect
slappcard-staging.vercel.appif no longer needed (or keep as staging)