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

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).

Description
No description provided
Readme 426 KiB
Languages
Vue 57.6%
TypeScript 36.2%
JavaScript 3.7%
CSS 2.2%
Dockerfile 0.3%