Operator
Go live in one sitting
decide.bacenik.com already serves this app. This page does not flip keys and does not stamp 10/10. Point NEXT_PUBLIC_APP_URL at that host, take one live charge, and leave a paid seat. Ads stay off until then.
Commercial live 10/10
Checking fail-closed gates…
Live Stripe cutover
Checking remaining operator steps…
After env is green
- 01Point a custom domain
decide.bacenik.com already serves production. Set NEXT_PUBLIC_APP_URL=https://decide.bacenik.com so Stripe redirects and mail match the live host. *.vercel.app cannot score live.
Done when: health/ready reports the first-party https gate pass.
- 02Flip live Stripe
Replace sk_test_ with sk_live_, set live STRIPE_PRICE_STARTER_MONTHLY / STRIPE_PRICE_PRO_MONTHLY, register the live webhook.
Done when: health/ready reports stripe_live ok.
- 03Wire on-call
Set SENTRY_DSN, OPS_ERROR_WEBHOOK_URL, or OPS_ALERT_EMAIL (+ Resend). Vercel hosting is not on-call.
Done when: error_monitoring is ok on /status.
- 04Sign exports
Set AUDIT_BUNDLE_SIGNING_SECRET to a 32+ character HMAC secret.
Done when: Signed audit bundle download succeeds.
- 05Take one real paid charge
Upgrade a founder seat on live Individual ($39) or Founding Pilot ($149). Do not use a test card on sk_live_.
Done when: Stripe shows a live Payment and commercial.liveRevenueReady is true.
- 06Confirm portal cancel
Open the customer portal from /account/billing and confirm cancel is reachable.
Done when: Portal loads for that live customer.
- 07Refund the rehearsal charge
Refund the rehearsal charge from the Stripe dashboard so the drill does not become silent revenue.
Done when: The Payment shows refunded.
- 08Leave one paid seat
After the refund rehearsal, keep a founder or customer seat on Individual or Founding Pilot. A refunded drill is not a paid customer.
Done when: health/ready reports tenReady true and paidUserCount >= 1.
