routes/ の木がそのまま pathname 空間になり、表と型の配線は生成されます。
[param]・(group)・_ の私物だけを認め、規約から外れたものはビルドを落とします。'use client' で宣言します。server-only を import したモジュールがクライアントに届いた時点でビルドが落ちるので、秘密は間に何段挟まっても渡りません。site を渡せば sitemap.xml も書きます。error.tsx が layout の内側に描かれ、枠は残ります。ビルド中に落ちたページはビルドを止めます。移転したディレクトリには redirect.ts を 1 行置くだけです。page.tsx や layout.tsx が paramsSchema を export すると、合わない値はそのパターンが答えず、not-found に落ちます。リンクはスキーマの出力型で書けます。設計ガイドは npm パッケージに同梱されています。AIコーディングエージェントは 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}`);
},
}),
],
});