apps/external) runs on TanStack Start, Vite+ and Void behind
@tuturuuu/start-bridge. The Next.js build
(build) and the Vercel project stay in place until the cutover has been
stable, so the canonical host keeps a one-step route back.
Worker
The Worker answers with the bridge error response unless it runs in production
mode, has the
ASSETS binding, and all four of NEXT_PUBLIC_SUPABASE_URL,
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY and
TUTURUUU_APP_COORDINATION_SECRET are present (names only recorded here).
/api/storage/* is closed to anonymous ingress and answers 403. Other /api/*
paths forward to INTERNAL_WEB_API_ORIGIN (default https://tuturuuu.com).
Build and artifact
external-cloudflare.yaml builds the Worker, checks bridge routes and native
types, records the emitted configuration receipt, runs
node --test cloudflare/anonymous.runtime.mjs against the emitted Worker, and
uploads external-cutover-<source SHA> containing external-worker.tgz, the
receipt and SOURCE_SHA (7 days). It never deploys. Do not run
build:cloudflare on a shared development machine.
Cutover packet
Switch
- Record the source SHA, artifact name and Vercel deployment ID.
- Extract
dist, provision the four secrets ontuturuuu-external, deploy, and run the smoke below against the Worker’s own address. - Attach
external.tuturuuu.com(a proxied route in front of the still-valid Vercel origin where possible).
Smoke
200, the accepted commit, 403, 404. The app has no login page of its
own; sign-in belongs to the central app.
Rollback
- Triggers: 5xx above 1% for 5 minutes, any cross-host response, or an anonymous storage request that is not refused.
- Action: remove the Worker route (or repoint the mapping) so the host resolves to the recorded Vercel deployment. Never rebuild on the rollback path.
- Data: a route rollback changes no stored project data.
- Stability: keep the Vercel project and domain for 14 consecutive stable days before decommissioning, which is a separate approval.