Skip to content

Deploy & secrets (operator)

Apps

AppWhatDeploy
apps/apiCloudflare Worker (Hono)cd apps/api && npx wrangler deploy (staging) / --env production
apps/webReact dashboard (Pages)npx wrangler pages deploy dist --project-name=kordox-web-staging --branch main
apps/landingMarketing site (Pages)--project-name=kordox-landing-staging
apps/docsThis docs site (Pages)--project-name=kordox-docs

Build before deploying Pages: pnpm build --filter=<app>.

Environments

  • Staging: worker kordox-api-staging (api-sta.kordox.com), apps at app-sta / *-sta.
  • Production: worker kordox-api (api.kordox.com), set via wrangler [env.production]; deploy with --env production.
  • Cloudflare account is pinned in apps/api/wrangler.toml (account_id).

Secrets (per environment, via wrangler secret put)

SecretFor
DATABASE_URL, JWT_SECRET, RESEND_API_KEYCore
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle login
GMAIL_CLIENT_ID / GMAIL_CLIENT_SECRETGmail connector — see Email OAuth
OUTLOOK_CLIENT_ID / OUTLOOK_CLIENT_SECRETOutlook connector
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRETBilling
STRIPE_PRICE_{PRO,BUSINESS}_{MONTHLY,ANNUAL}Per-seat price IDs
TURNSTILE_SECRET_KEYBot protection (optional)

Set per environment: run once for staging, then again with --env production.

Gate / verify before shipping

pnpm build (typecheck) → pnpm test (unit) → cd apps/web && pnpm test:e2e → deploy to staging.

Every project, one cockpit.