Documentation site for the ktbhealth org — Fumadocs on TanStack Start, deployed to Cloudflare Workers via Alchemy.
Content lives in content/docs/ as MDX, organized by
Diátaxis: tutorials/, how-to/, reference/,
explanation/.
bun install
bun run dev # dev server on :3000
bun run types:check # tsc --noEmit
bun run build # production build (vercel preset)
bun run build:cf # Cloudflare build → .output/
bun run deploy # build:cf + alchemy deploy (needs Cloudflare creds)
bun run deploy:wrangler # build:cf + wrangler deploy fallback- Nitro preset is env-conditional. The
cloudflare_modulepreset breaksvite dev(dual-React bug in nitro3.0.261103-rc). Dev/preview use thevercelpreset; onlybuild:cf(CLOUDFLARE_DEPLOY=1) orNITRO_PRESET=cloudflare_moduleselects Cloudflare. Seevite.config.ts. bunfig.tomlsetslinker = "hoisted". Bun's isolated linker breaks the nitro dev server. Don't remove it; ifbun run devfails with module resolution errors, check this first.fumadocs-uiis an alias fornpm:@fumadocs/base-ui— intentional, do not "fix" it.- OG images are not included. The spike's takumi-js OG route (~5.8 MB
wasm) was dropped to keep the Worker lean;
og:imagemeta is omitted. - Generated files (
src/routeTree.gen.ts,.source/,.output/) are never hand-edited.
bun run deploy requires Cloudflare credentials configured for Alchemy (same
vault/setup as product's infra:deploy). Without creds, scaffold only —
bun run deploy:wrangler is the wrangler fallback once .output exists.