- Page « équipe » : roster statique du collectif (composables/useTeam), portraits servis depuis public/portraits, grille ≤ 3 colonnes équilibrée (portrait/nom/rôle/présentation), sélection + surcharges par membre (repliables, réordonnables, réinitialisables) dans le composeur - Page « conclusion » : « Merci ! » centré + rappel des contacts - Page libre : 1 à 3 colonnes texte (markdown) ou images avec sous-titres, réordonnables ; migration des champs body/media legacy vers columns - Couverture : texte libre sous l'intro, adresse en bas à gauche (3 lignes), case « afficher les années » au niveau du document - Sommaire : items centrés (self-center), filet en points dégradés stable - Retrait de la dépendance morte pagedjs - Docs à jour (CLAUDE.md, README) ; spec marquée comme archive réalisée
1.9 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, équipe, conclusion),preview/(rendu + aperçu),composer/(UI de composition).composables/useTeam.ts— roster statique du collectif ; portraits servis en statique depuispublic/portraits/.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).