- Framework: Next.js 15 (App Router)
- Language: TypeScript
- State Management: Zustand, Tanstack Query v5
- Styling: Tailwind CSS
- Architecture: Feature-Sliced Design (FSD)
- Lint/Formatter: Biome
- Utils: Husky
pnpm install
pnpm dev
Each layer can only import from layers below it:
app → pages → widgets → features → entities → shared
Export by segments individually:
// ✅ Recommended
import { Button, Modal } from '@/shared/ui'
import { formatDate, debounce } from '@/shared/lib'
import { httpClient } from '@/shared/api'
// ❌ Avoid
import { Button, formatDate, httpClient } from '@/shared'
Public API pattern:
// features/auth/index.ts
export { LoginForm, SignupForm } from './ui'
export { useAuthStore } from './model'
export { authApi } from './api'
- Authentication state
- App settings (theme, language)
- Global UI state (modal, toast)
- Page-specific form state
- Filter and search state
- Feature-specific temporary data
- Server data cache
- Domain object state