# CLAUDE.md — projet Next.js (App Router, TypeScript)

<!-- Fichier lu par Claude Code au démarrage de chaque session.
     Gardez-le court : ce qui est ici occupe du contexte à chaque échange. -->

## Aperçu

Application Next.js (App Router) écrite en TypeScript strict.
Composants serveur par défaut, rendu côté client uniquement si nécessaire.

## Commandes

- `npm run dev` : serveur de développement (http://localhost:3000)
- `npm run build` : build de production
- `npm run lint` : ESLint
- `npm run typecheck` : `tsc --noEmit`
- `npm test` : tests unitaires ; `npm test -- chemin/du/fichier` pour un seul fichier

Avant de déclarer une tâche terminée : lint + typecheck + tests du périmètre modifié.

## Arborescence

- `app/` : routes, layouts, `page.tsx`, `route.ts`
- `components/` : composants réutilisables (`components/ui/` = primitives)
- `lib/` : logique métier et utilitaires sans React
- `hooks/` : hooks clients partagés

## Conventions

- Composants serveur par défaut ; ajouter `"use client"` seulement pour
  l'interactivité (état, effets, événements navigateur).
- Données récupérées dans les composants serveur, pas dans des `useEffect`.
- Pas de `any` : préférer `unknown` puis un rétrécissement de type.
- Imports absolus via l'alias `@/`.
- Un composant par fichier, nommé en PascalCase.

Conventions de style détaillées (importées au démarrage) :
@docs/conventions.md

## À ne pas faire

- Ne pas modifier `next.config.*`, les workflows CI ni les fichiers de
  verrouillage (`package-lock.json`) sans le demander.
- Ne pas ajouter de dépendance sans justifier le besoin.
- Ne jamais committer de secrets : les variables sont dans `.env.local`
  (non versionné) ; seules les variables `NEXT_PUBLIC_*` vont au navigateur.
- Ne pas désactiver une règle ESLint pour faire passer le lint.

## Git

- Branches : `feat/…`, `fix/…`, `chore/…`
- Messages de commit courts, à l'impératif.
