# Installer l’environnement de développement

Repérer les projets, démarrer localement et exécuter les contrôles.

## Organisation du dépôt

| Dossier | Rôle |
|---|---|
| app/ | Application Next.js, services, API, MCP et PostgreSQL |
| mobile/ | Client mobile Expo |
| packages/shared/ | OpenAPI versionnée et types de client générés |
| site/ | Site public et documentation publiable |
| docs/ | Architecture et documentation interne de maintenance |
| deploy/ | Configuration et ressources de déploiement |

`app/` est un projet npm autonome avec son propre lockfile. Ne l'ajoutez pas aux workspaces racine. Le mobile, les packages partagés et le site utilisent les workspaces de la racine.

## Préparer le poste

Utilisez les versions de Node et npm prescrites par les fichiers du dépôt et la CI de la branche. PostgreSQL 16 est le serveur de référence du compose local. Préparez des données de développement et les variables d'environnement à partir de l'exemple livré, sans réutiliser des secrets de production.

```sh
cd app
cp .env.example .env
npm ci
```

Relisez ensuite les variables et adaptez notamment la connexion PostgreSQL et les hôtes au mode choisi.

## Démarrer avec Docker

```sh
cd app
docker compose up -d db
npm run db:migrate
npm run db:seed
npm run dev
```

Cette variante lance PostgreSQL dans Docker et le serveur web sur le poste. `DATABASE_URL` doit correspondre au port hôte et aux identifiants du service local. Le seed est réservé à la base de développement. `docker compose up` permet aussi de lancer le service applicatif conteneurisé décrit dans le compose.

## Vérifier une modification

```sh
cd app
npm run lint
npm run typecheck
npm run test
```

Le script `npm run gates` regroupe les contrôles requis par le dépôt. Certaines suites exigent une base de test correctement configurée. Lancez la campagne E2E correspondant au parcours modifié et un build lorsque la modification le nécessite.

## Modifier un contrat

```sh
# Depuis la racine du dépôt, après les changements de schémas API.
npm run generate:client
npm run check:contract
```

Versionnez ensemble les schémas, le contrat partagé et les types générés. Pour les mises à jour de cette documentation, utilisez [le guide de contribution](/documentation/contribuer/).
