Skip to main content
Teach (apps/teach) runs as a native TanStack Start app on Vite+ and Void through @tuturuuu/start-bridge, produced by the conversion codemod. All 44 App Router pages render unchanged through the generic RSC adapter and every route handler is served by the bridge API registry. next build (package build) remains the Vercel path; production publication stays held in tuturuuu.ci.ts until a cutover PR.

Cutover packet

Unlike Track and Tasks, start-bridge.config.ts does not set unknownHost: 'reject', so the Worker is not restricted to its two declared hosts. The cutover artifact keeps workers_dev off and declares no routes; attach only the Teach route during the production cutover.

Rollback

Remove only the teach.tuturuuu.com/* Worker route, or restore the captured DNS record, so the hostname returns to the captured immutable Vercel deployment. Do not rebuild and do not promote the Vercel project. The Worker holds no state; Teach data stays in Supabase and Storage, which the rollback does not touch.

Smoke

Every response carries the Teach SEO robots header and the private cache policy. The rollback smoke is the same command with --expect legacy.

Qualification

teach-cloudflare.yaml builds the native output, rejects route-tree drift, type-checks (type-check:cloudflare), seals the emitted Worker with scripts/ci/teach-native-artifact.py and runs the emitted-Worker suite in workerd (bun run --cwd apps/teach test:runtime, 7 tests, egress denied). The 404 probe uses /login/__native-smoke-missing__ because every non-public path redirects signed-out users to login. /api/build-info is public to GET and HEAD through proxy.ts, with ambient cookies and authorization removed, as in Track and Tasks. Heavy builds run on a remote host, not the local hub.