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>
This commit is contained in:
2026-07-05 18:37:09 +02:00
commit 59dfbe4155
79 changed files with 18587 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
// Capture chaque page d'un portfolio dans le composeur (auto-contrôle dev).
// Usage : node scripts/dev-pages-shots.mjs <portfolioId>
import { chromium } from 'playwright'
const [, , id] = process.argv
const base = process.env.BASE_URL ?? 'http://localhost:3000'
const browser = await chromium.launch()
const page = await browser.newPage({ viewportSize: { width: 1600, height: 900 } })
await page.request.post(`${base}/api/auth/login`, {
data: { password: process.env.NUXT_PORTFOLIO_PASSWORD ?? 'figureslibres' },
})
await page.goto(`${base}/portfolios/${id}`, { waitUntil: 'networkidle' })
const items = page.locator('aside .group')
const count = await items.count()
for (let i = 0; i < count; i++) {
await items.nth(i).click()
await page.waitForTimeout(1200)
await page.screenshot({ path: `/app/data/cache/page-${i + 1}.png` })
console.log(`page ${i + 1}/${count}`)
}
await browser.close()