plugins/tanstack-start-expert/skills/start-deployment/SKILL.md
Use when: building or deploying a TanStack Start app — Nitro/Vite build, official adapters (Cloudflare Workers, Netlify, Vercel, Node, Bun, Railway), static prerendering (tanstackStart prerender), production env vars, or a deploy checklist. Do NOT use for: app data/auth logic (see start-routing-data / start-auth) or generic Vite config unrelated to Start.
npx skillsauth add fusengine/agents start-deploymentInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before ANY implementation, spawn in parallel:
vite.config.ts, package.json scripts, existing adapter/wrangler config/websites/tanstack_start_framework_reacttanstackStart plugin + adapter options for the target hostAfter implementation, run fuse-ai-pilot:sniper.
| Target | Setup |
|--------|-------|
| Cloudflare Workers ⭐ | @cloudflare/vite-plugin (viteEnvironment: { name: 'ssr' }) + wrangler.jsonc |
| Netlify ⭐ | @netlify/vite-plugin-tanstack-start |
| Vercel / Node / Docker / Bun / Railway | Nitro layer (nitro/vite), .output/server/index.mjs |
| Static | tanstackStart({ prerender: { routes, crawlLinks } }) |
Start builds with Vite (or Rsbuild). Most hosts go through Nitro, an agnostic deploy layer; Cloudflare and Netlify have dedicated Vite plugins.
process.env.X inside handlers, NEVER at module scope; Cloudflare injects env at request time, so module reads are undefined on the edge.cloudflare({ viteEnvironment: { name: 'ssr' } }) before tanstackStart() in the plugins array.start to the build — Nitro output starts with node .output/server/index.mjs; Cloudflare uses wrangler deploy (no node start).react/react-dom to >= 19 when deploying on Bun.$id), layout routes (_), and component-less routes are skipped unless linked with crawlLinks.vite.config.ts # tanstackStart() + host adapter (cloudflare / netlify / nitro)
wrangler.jsonc # Cloudflare only — main: @tanstack/react-start/server-entry
package.json # scripts differ per target (deploy vs start)
.output/server/ # Nitro build output (Node/Vercel/Bun/Railway)
→ See vite-config-adapters.md for every adapter config
| Topic | Reference | Load when | |-------|-----------|-----------| | Build & adapters | build-and-adapters.md | Choosing/configuring a host (Nitro, Vercel, Node, Bun, Railway, Netlify) | | Cloudflare | cloudflare.md | Deploying to Cloudflare Workers | | Prerendering | prerendering.md | Generating static HTML at build time | | Env & checklist | env-and-checklist.md | Production env vars + pre-deploy checklist |
| Template | When to Use |
|----------|-------------|
| vite-config-adapters.md | Full vite.config.ts per target + prerender |
| cloudflare-deploy.md | Complete Cloudflare Workers setup |
process.env at import time (edge = undefined; bundle leak)node start script with a Cloudflare build$param routes to prerender without crawlLinkstesting
Copy self-audit and ban-lists — filler verbs/hype adjectives, slop placeholder names, fake-precise numbers, Title Case headlines, humor in error copy ('Oops!'), em-dash crutch, one copy register per page.
development
Logged-in web apps — dashboards, auth flows, settings, onboarding, data tables, command palettes, modals, toasts. Register `product`: density and glance-speed over marketing polish, no hero/CTA-tricks, every data surface covers empty/loading/error explicitly, tables and dataviz follow preattentive-processing rules.
development
Marketing sites, landing pages, campaign pages — register `brand` (design IS the product). Structure comes from the register's POV + a macrostructure pick, never from copying an inspiration site's section flow. Hero discipline, deviated section order, asymmetric grids, and a silhouette lookalike-test gate before ship.
development
Token-strategy core — OKLCH color rules, neutral tinting, accent-commitment levels, type scale, 8pt spacing grid, touch targets, and the canonical output format of design-system.md (the file the harness gates on). This is routing step 1 of design-method/SKILL.md — read it before design-web/design-webapp/design-ios/design-android, before picking or auditing a single color/type/spacing value.