Biome formatting, import style, strict TypeScript, naming (including React file names), or generated files.
When to use: Biome formatting, import style, strict TypeScript, naming (including React file names), or generated files. For where domain code lives, see architecture-boundaries.
Biome config (biome.json) is the source of truth:
dist/**, coverage/**, .turbo/**, node_modules/**, **/*.gen.ts, **/models.dev.jsonpnpm --filter @app/api formatimport type { ... } for type-only importsindex.ts re-exporting from the same directory); import from the specific module.ts/.tsx extensions in relative imports (not .js). The codebase uses TypeScript source extensions for module resolutionBase config: tsconfig.base.json
strict: true is enabled; keep code strict-cleanNodeNext + ESM ("type": "module" in packages/apps)src/entities/<entity>.ts as the canonical domain contract. Schemas and types elsewhere in the same domain or at app/platform boundaries should derive from or reuse those entity shapes whenever practical instead of restating identical fields.id, createdAt, and updatedAt as core entity fields. Do not split an entity into a business payload plus an appended "persistence" wrapper unless there is a truly distinct boundary/input DTO that needs that separation.as const objects, not TypeScript enums.readonly fields for immutable domain data shapesany; use unknown + narrowingas { ... }); prefer relying on inferred types from librariessrc/entities/<entity>.ts.src/constants.ts.src/errors.ts.src/helpers.ts.PascalCasecamelCaseUPPER_SNAKE_CASE only for true constants; otherwise camelCase + as constbaseXxxSchema / BaseXxx naming rather than xxxCommonSchema / XxxCommon.src/index.ts, src/server.ts, src/main.tsx)my-component.tsx or my-component/index.tsx — never PascalCase file names (e.g. MyComponent.tsx). This matches the @repo/ui convention (table-skeleton.tsx, form-field.tsx, etc.)@app/*, @domain/*, etc.)apps/web/src/routeTree.gen.ts is auto-generated by TanStack Router — do not manually edit