The routes/ tree is the pathname space; the table and the type wiring are generated from it.
[param], (group), and _-prefixed privates. Anything outside the grammar fails the build.'use client'. The build fails the moment a server-only module reaches the client, so secrets cannot cross however many imports sit in between.site and the build writes sitemap.xml too.error.tsx renders inside the layout and the frame survives; a page that throws during the build stops it. A directory that moved keeps a one-line redirect.ts.page.tsx or layout.tsx that exports paramsSchema makes a refused value a pathname the pattern does not answer, so it falls through to not-found. Links take what the page receives, typed by the schema.The guide ships inside the npm package. An AI coding assistant reads the exact installed version out of node_modules/@k8ordo/static/docs/.
// src/routes/page.tsx → /
// src/routes/products/page.tsx → /products
// src/routes/products/[id]/page.tsx → /products/:id(paramsSchema が id を検証)
// src/routes/error.tsx → 配下が throw したら layout の内側に
// src/routes/old/redirect.ts → /old は別の場所へ
// vite.config.ts — 値を持たない区間だけ、ビルドに渡す
export default defineConfig({
plugins: [
framework({
paths: async () => {
const products = await readCatalog();
return products.map((product) => `/products/${product.id}`);
},
}),
],
});