Launch Checklist
| # | Check | Expected |
|---|---|---|
| 1 | Homepage | 200, styles and i18n OK |
| 2 | Google sign-in | OAuth callback succeeds |
| 3 | Magic link | Resend delivers mail — see Resend integration |
| 4 | Stripe Checkout | Test card 4242... succeeds |
| 5 | Stripe Webhook | Dashboard shows 2xx |
| 6 | R2 upload | Admin can upload and access files |
| 7 | Short links | go. domain redirects correctly |
| 8 | PostHog / GA4 | Live / Realtime events appear |
| 9 | Queues | Email campaign jobs consume successfully |
Optional automation:
pnpm posthog:verify:remote
Common Issues
Works locally, 500 in production
- Check
pnpm wrangler secret listfor missing secrets - Cloudflare Dashboard → Workers → Logs for stack traces
Google redirect_uri_mismatch
GOOGLE_REDIRECT_URI must exactly match the URI in Google Console (scheme, host, path).
Stripe webhook signature failure
STRIPE_WEBHOOK_SECRET must come from the same environment (test/live) as the endpoint signing secret.
R2 credentials not configured
Production needs R2_ACCESS_KEY_ID and R2_SECRET_ACCESS_KEY secrets. Worker binding ≠ S3 API token.
Analytics missing in production
VITE_* is build-time → redeploy with pnpm run deploy after changes.
GA4 admin shows no properties
Run pnpm ga4:grant <PROPERTY_ID>, see docs/ga4-admin-spec.md.
Security Notes
- Do not commit
.dev.varsor third-party keys to Git - Rotate
BETTER_AUTH_SECRETimmediately if leaked - R2 API tokens: least privilege, target bucket only