apps/learn has native TanStack Start + Vite+ + Void source beside its Next build,
generated by the start-bridge codemod. The Next
build, vercel.json and vercel-production-learn.yaml are untouched, so the current
Vercel deployment keeps serving until the route is flipped.
Worker
apps/learn/void.config.tsnames the staging candidate (workers_devon,TUTURUUU_NOINDEX=1). A production Worker (tuturuuu-learn,workers_devandpreview_urlsoff,TUTURUUU_NOINDEX=0) is created by the cutover PR; nothing here attaches a route.- Entry:
apps/learn/cloudflare/worker.ts; Wrangler config is emitted byvoidintodist. - Root host:
learn.tuturuuu.com(compiled instart-bridge.config.tsor the generated default). - Mount:
tuturuuu.com/learn(base path/learn), served by the same Worker. - Binding:
ASSETS(static output,run_worker_first). - Variables (names):
TUTURUUU_NOINDEX, optionalINTERNAL_WEB_API_ORIGIN(defaulthttps://tuturuuu.com). - Secrets (names, set in the Worker, never in the repo):
NEXT_PUBLIC_SUPABASE_URL,NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY,SUPABASE_SECRET_KEY,TUTURUUU_APP_COORDINATION_SECRET. Compare with the Vercel project environment list before the flip.
Build and qualification
learn-cloudflare.yaml runs the same steps in CI. test:runtime starts the emitted Worker in
workerd with synthetic secrets and no network egress; the gate is native-built-worker.runtime.mjs (8 checks, including the signed-out redirect fixture).
Smoke checks after the route is attached
GET https://learn.tuturuuu.com/ answers 200. No smoke request may return 5xx.
Rollback
- Before the flip, record the current production Vercel deployment id (the repo does
not store it) and the DNS records and TTLs for
learn.tuturuuu.comin the release record. - Roll back by detaching the Worker route or restoring the captured DNS records to the
recorded Vercel deployment.
vercel-production-learn.yamlstill deploys the Next app. - Rerun the smoke checks against the Vercel origin.