Files
portfolio-generator-app/README.md
Valentin Le Moign 59dfbe4155 Générateur de portfolios PDF Figures Libres (app Nuxt autonome)
App Nuxt 3 + Nuxt UI qui lit les projets du CMS Grav et compose des portfolios
A3 paysage exportés en PDF (gabarit book_v3) : composeur WYSIWYG, templates
cover/toc/projet/grille/page libre, pipeline Playwright + Ghostscript, gel du
contenu à la génération, partage public opt-in.

Dépôt autonome : Dockerfile (base Playwright + Ghostscript + ffmpeg + rsync) inclus.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 18:37:09 +02:00

40 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Générateur de portfolios — Figures Libres
App **Nuxt 3** (+ Nuxt UI v3) qui lit les projets du CMS Grav de Figures Libres et
compose des **portfolios A3 paysage** exportés en PDF, fidèles au gabarit `book_v3`.
Dépôt **autonome et déployable seul** : son `Dockerfile` (base Playwright +
Ghostscript + ffmpeg + rsync) est inclus. En dev, il se lance via le dépôt
d'orchestration `portfolio-stack`, qui le clone en `./generator` et le monte en
volume sur le port **8091** (mot de passe partagé : `figureslibres`).
## Lancer
Tout tourne dans Docker (rien sur l'hôte). Depuis le dépôt stack :
```bash
docker compose up -d # dev (port 8091)
docker compose run --rm --no-deps generator npm install # dépendances
docker compose exec generator npm run build # build de prod (.output)
```
## Repères
- `server/lib/``content-source` (dev FS Grav `:ro` / prod cache rsync),
`grav-reader` (parse Grav → `Project`), `pdf-pipeline` (Playwright → PDF A3,
images 2× via sharp, post-traitement Ghostscript), `portfolio-store` (gel/dégel).
- `server/api/` — auth, projects, portfolios, media, sync, exports, public.
- `components/``templates/` (cover, toc, projet, grille, page libre),
`preview/` (rendu + aperçu), `composer/` (UI de composition).
- `pages/print/[id].vue` — rendu print utilisé pour la génération PDF.
- `types/index.ts` — modèle de données (source de vérité du schéma).
Voir `CLAUDE.md` pour l'architecture détaillée, les contraintes fermes et les
pièges Chromium print.
## Données
Sur disque dans `data/` (git-ignoré) : `portfolios/*.json`, `exports/*.pdf`,
`frozen/<id>/` (snapshots figés à la génération), `cache/` (régénérable),
`content-cache/` (rsync prod).