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>
1.8 KiB
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 :
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).