- Next.js 16 with App Router, React 19, Turbopack, React Compiler (see
next.config.ts)- Node.js 24, pnpm 10 (exact versions in package.json)
- TypeScript with strict type checking
- Tailwind CSS v4 with @tailwindcss/postcss, M3 Design Tokens (see
.claude/rules/design-tokens.md) - TanStack Query with queryOptions helper
- React Hook Form + Zod v4 with @hookform/resolvers
- UI: @radix-ui primitives, tailwind-variants, tailwind-merge
- Utilities: custom debounce (
src/utils/debounce) - nuqs for URL state management (NuqsAdapter in RootProvider)
- OxC (Oxlint + Oxfmt) for linting and formatting
- jsPlugins: @tanstack/eslint-plugin-query, eslint-plugin-react-hooks
- Suppress comments:
// oxlint-disable-next-line <rule>
- Vitest with 80% coverage requirement
- Storybook 10 with Vitest integration, a11y testing, MSW
- State management: TanStack Query (server state), React Hook Form + Zod (form state), no global client state
| Purpose | MCP Tool |
|---|---|
| Next.js official docs | next-devtools (nextjs_docs, nextjs_index, nextjs_call) |
| Other libraries (React, TanStack Query, Zod, Tailwind, etc.) | context7 (resolve-library-id → query-docs) |
| Vitest docs | WebFetch → https://vitest.dev/llms-full.txt |
| Storybook UI dev (stories, component docs) | storybook-mcp (see .claude/rules/storybook.md for full tool list) |