Skip to main content

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 via npx 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 dir apps/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; extend deploy-vercel.yml main 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.com to production instance origins
  • PostHog: enable prod flags per environment (URL release conditions or separate project)
  • Sentry: create slappcard-prod project; 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.app if no longer needed (or keep as staging)