# CLAUDE.md — stack Figures Libres (orchestration) Dépôt d'**orchestration** de l'environnement du générateur de portfolios. Il ne contient **pas** de code applicatif : il câble ensemble trois checkouts posés côte à côte, via Docker Compose. ``` portfolio-maker/ ← CE dépôt (stack) ├── docker-compose.yml # grav-reference (8089) + generator (8091) ├── docker-compose.prod.yml # surcouche déploiement (build Nitro + rsync prod) ├── docker/grav/Dockerfile # image PHP+Apache servant grav-reference/ ├── generator/ ← dépôt À PART (l'app) — cloné ici, git-ignoré └── grav-reference/ ← dépôt À PART (CMS d'exemple) — cloné ici, git-ignoré ``` ## Règle absolue : tout tourne dans Docker Node, build Nuxt, Playwright/Chromium, Ghostscript, ffmpeg, rsync — **rien sur l'hôte**. Exception connue : vérifier le rendu d'un PDF (`pdftoppm`) peut se faire sur l'hôte, les templates print étant piégeux (voir `generator/CLAUDE.md`). ```bash docker compose up -d # grav-reference + generator ``` - Générateur : http://localhost:8091 — mot de passe dev `figureslibres`. - Grav de référence : http://localhost:8089 (CMS d'exemple, **pas** l'app à développer). ## Les trois composants - **`generator/`** — l'app Nuxt = le livrable. Dépôt autonome (Dockerfile inclus), poussé sur le gitea figureslibres.io. Toute la doc app est dans `generator/CLAUDE.md`. - **`grav-reference/`** — le vrai site Grav, **son propre dépôt** (~4,8 Go), monté `:ro`. Source de contenu en lecture seule, jamais modifié. - **Ce dépôt** — compose, image Grav, doc de câblage. Ne versionne ni `generator/` ni `grav-reference/` (ils ont chacun leur dépôt). ## Déploiement (mode prod) Contenu tiré de la prod par rsync/SSH en lecture seule vers `generator/data/content-cache/`, déclenché par le bouton « Rafraîchir ». Voir les variables `.env` (non versionné) documentées dans `docker-compose.prod.yml`. ```bash docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d generator ```