Going to production
Use this checklist before you point real users at a Hype Stack deploy. The fastest path is
hype-stack deploy on Fly or Railway; the checks below still apply if you host the pieces yourself.
Production checklist
| Area | What to verify |
|---|---|
| Database | DATABASE_URL points at the intended Postgres (not local Docker) |
| Cache | VALKEY_URL (and password if required) match the deployed Valkey / Redis |
| Storage | RUSTFS_* / bucket credentials match the environment; see Storage |
| Frontend env | VITE_API_BASE_URL is the public API origin |
| Backend origins | FRONTEND_URL (and admin URL if present) match deployed sites for CORS and email links |
| Auth (WorkOS) | Redirect URIs and cookie settings match production domains |
| Auth (Better Auth) | BETTER_AUTH_URL matches the public API origin; Google callback URIs updated |
| Admin | SUPER_ADMIN_EMAIL includes your operator accounts |
| Billing | Stripe live keys, webhook URL → /checkout/webhook, price IDs for live mode |
RESEND_API_KEY and verified RESEND_FROM_DOMAIN | |
| Monitoring | Optional SENTRY_DSN / VITE_SENTRY_DSN for the production projects |
| Migrations | Schema applied with migrate deploy (or via hype-stack deploy) |
| Domains | Custom url values in stack.json match DNS; auth callbacks updated |
Safety pitfalls
Wrong FRONTEND_URL or API origin
Auth callbacks, CORS, and email links all depend on these lining up. A staging frontend talking to a production API (or the reverse) fails in confusing ways.
Better Auth URL drift
BETTER_AUTH_URL must be the public API origin Better Auth is served from. If it still says http://localhost:3000 in
production, sign-in and OAuth callbacks break.
WorkOS / Google redirect mismatch
Provider consoles must list the production callback URLs. Localhost entries alone are not enough. See the WorkOS and Better Auth pack pages.
Stripe webhook still on localhost
Live mode needs a public webhook endpoint and a live STRIPE_WEBHOOK_SECRET. The Stripe CLI secret only works for
forwarded local events.
Migrations skipped or pointed at the wrong database
Deploying app code against an old schema fails at runtime. Prefer the release / pre-deploy migration step from
deploy. Never run migrate dev against a shared production database.
Final preflight
- Run typecheck and tests locally against the branch you will ship
- Confirm env vars on every app and service
- Deploy with
npx @hype-stack/cli deploy(or your own pipeline) - Hit
/pingon the API and sign in once on frontend and admin - Trigger a test Stripe webhook (or a sandbox checkout) if billing is installed
- Confirm Observability is receiving events if Sentry is configured
Related
Every purchase and sponsorship funds my 8+ years of work on open source given freely to the community. It keeps the lights on, funds new packs, and keeps the ecosystem alive. Even a small tier means a lot. Thank you!
