Stack: Next.js 15 (App Router) · React 19 · TypeScript strict · Prisma · Zustand · Vitest · SonarCloud
| Task | Skill |
|---|---|
| Writing/reviewing TypeScript or React | typescript-craftsmanship |
| Refactoring, DRY, code smells | clean-code |
| Where does this code live? Layers | clean-architecture |
| Test-first / TDD | tdd |
| Auditing a file or PR | code-audit + security-review |
| Perf / Core Web Vitals | web-performance |
Skills own the coding standards — no any/as/!, exhaustive never guards, discriminated unions, readonly by default, single-pass algorithms, Map/Set for lookups, memoization, fine-grained Zustand selectors, serialized async, error boundaries, file-size limits, naming conventions, JSDoc on exports, etc. Do not duplicate those rules in this file. If a rule is missing from a skill, add it to the skill, not here.
Feature branches MUST NOT modify docs/project/changelog.md, docs/project/progress.md, or docs/product/roadmap.md. These are updated in a dedicated chore/docs PR after each merge batch to avoid rebase conflicts.
npx tsc --noEmit— zero errorspnpm lint— zero warningspnpm test— all passingpnpm sonar— runs successfully (or rely on CI if it hangs locally)- SonarCloud open issues = 0:
For the full pattern catalog with before/after examples and the audit of existing issues, read docs/references/typescript-patterns.md.