diff --git a/public/images/report/cover.webp b/public/images/report/cover.webp new file mode 100644 index 0000000..b7f8d67 Binary files /dev/null and b/public/images/report/cover.webp differ diff --git a/public/images/report/day2-04.webp b/public/images/report/day2-04.webp index ffa2b69..e852d9d 100644 Binary files a/public/images/report/day2-04.webp and b/public/images/report/day2-04.webp differ diff --git a/public/images/report/extra-1.webp b/public/images/report/extra-1.webp new file mode 100644 index 0000000..377a7e3 Binary files /dev/null and b/public/images/report/extra-1.webp differ diff --git a/public/images/report/extra-2.webp b/public/images/report/extra-2.webp new file mode 100644 index 0000000..386f170 Binary files /dev/null and b/public/images/report/extra-2.webp differ diff --git a/public/images/report/extra-3.webp b/public/images/report/extra-3.webp new file mode 100644 index 0000000..c4cc9ae Binary files /dev/null and b/public/images/report/extra-3.webp differ diff --git a/public/images/report/gallery-01.webp b/public/images/report/gallery-01.webp new file mode 100644 index 0000000..abe481e Binary files /dev/null and b/public/images/report/gallery-01.webp differ diff --git a/public/images/report/gallery-02.webp b/public/images/report/gallery-02.webp new file mode 100644 index 0000000..5e0f765 Binary files /dev/null and b/public/images/report/gallery-02.webp differ diff --git a/public/images/report/gallery-03.webp b/public/images/report/gallery-03.webp new file mode 100644 index 0000000..b3e1fac Binary files /dev/null and b/public/images/report/gallery-03.webp differ diff --git a/public/images/report/gallery-04.webp b/public/images/report/gallery-04.webp new file mode 100644 index 0000000..d2d7736 Binary files /dev/null and b/public/images/report/gallery-04.webp differ diff --git a/public/images/report/gallery-05.webp b/public/images/report/gallery-05.webp new file mode 100644 index 0000000..21d3860 Binary files /dev/null and b/public/images/report/gallery-05.webp differ diff --git a/public/images/report/gallery-06.webp b/public/images/report/gallery-06.webp new file mode 100644 index 0000000..7e6815d Binary files /dev/null and b/public/images/report/gallery-06.webp differ diff --git a/public/images/report/gallery-07.webp b/public/images/report/gallery-07.webp new file mode 100644 index 0000000..3395b95 Binary files /dev/null and b/public/images/report/gallery-07.webp differ diff --git a/public/images/report/gallery-08.webp b/public/images/report/gallery-08.webp new file mode 100644 index 0000000..9929a93 Binary files /dev/null and b/public/images/report/gallery-08.webp differ diff --git a/public/images/report/gallery-09.webp b/public/images/report/gallery-09.webp new file mode 100644 index 0000000..8907766 Binary files /dev/null and b/public/images/report/gallery-09.webp differ diff --git a/public/images/report/gallery-10.webp b/public/images/report/gallery-10.webp new file mode 100644 index 0000000..3b1b0fb Binary files /dev/null and b/public/images/report/gallery-10.webp differ diff --git a/public/images/report/gallery-11.webp b/public/images/report/gallery-11.webp new file mode 100644 index 0000000..f5d2879 Binary files /dev/null and b/public/images/report/gallery-11.webp differ diff --git a/public/images/report/gallery-12.webp b/public/images/report/gallery-12.webp new file mode 100644 index 0000000..796c079 Binary files /dev/null and b/public/images/report/gallery-12.webp differ diff --git a/public/images/report/gallery-13.webp b/public/images/report/gallery-13.webp new file mode 100644 index 0000000..14b4126 Binary files /dev/null and b/public/images/report/gallery-13.webp differ diff --git a/public/images/report/gallery-14.webp b/public/images/report/gallery-14.webp new file mode 100644 index 0000000..597ea07 Binary files /dev/null and b/public/images/report/gallery-14.webp differ diff --git a/public/images/report/gallery-15.webp b/public/images/report/gallery-15.webp new file mode 100644 index 0000000..3843460 Binary files /dev/null and b/public/images/report/gallery-15.webp differ diff --git a/public/images/report/gallery-16.webp b/public/images/report/gallery-16.webp new file mode 100644 index 0000000..e8a571e Binary files /dev/null and b/public/images/report/gallery-16.webp differ diff --git a/public/images/report/gallery-17.webp b/public/images/report/gallery-17.webp new file mode 100644 index 0000000..282d2e8 Binary files /dev/null and b/public/images/report/gallery-17.webp differ diff --git a/public/images/report/gallery-18.webp b/public/images/report/gallery-18.webp new file mode 100644 index 0000000..7f5d41e Binary files /dev/null and b/public/images/report/gallery-18.webp differ diff --git a/public/images/report/gallery-19.webp b/public/images/report/gallery-19.webp new file mode 100644 index 0000000..0ccebdb Binary files /dev/null and b/public/images/report/gallery-19.webp differ diff --git a/public/images/report/gallery-20.webp b/public/images/report/gallery-20.webp new file mode 100644 index 0000000..507a111 Binary files /dev/null and b/public/images/report/gallery-20.webp differ diff --git a/public/images/report/gallery-21.webp b/public/images/report/gallery-21.webp new file mode 100644 index 0000000..fb44743 Binary files /dev/null and b/public/images/report/gallery-21.webp differ diff --git a/public/images/report/gallery-22.webp b/public/images/report/gallery-22.webp new file mode 100644 index 0000000..efdc548 Binary files /dev/null and b/public/images/report/gallery-22.webp differ diff --git a/public/images/report/gallery-23.webp b/public/images/report/gallery-23.webp new file mode 100644 index 0000000..20d339f Binary files /dev/null and b/public/images/report/gallery-23.webp differ diff --git a/public/images/report/gallery-24.webp b/public/images/report/gallery-24.webp new file mode 100644 index 0000000..77566b4 Binary files /dev/null and b/public/images/report/gallery-24.webp differ diff --git a/public/images/report/speaker.webp b/public/images/report/speaker.webp new file mode 100644 index 0000000..e823570 Binary files /dev/null and b/public/images/report/speaker.webp differ diff --git a/public/reports/pycon-cameroon-2026-report-en.pdf b/public/reports/pycon-cameroon-2026-report-en.pdf index 36663d0..dd6e077 100644 Binary files a/public/reports/pycon-cameroon-2026-report-en.pdf and b/public/reports/pycon-cameroon-2026-report-en.pdf differ diff --git a/public/reports/pycon-cameroon-2026-report-fr.pdf b/public/reports/pycon-cameroon-2026-report-fr.pdf index 1b3c823..481e222 100644 Binary files a/public/reports/pycon-cameroon-2026-report-fr.pdf and b/public/reports/pycon-cameroon-2026-report-fr.pdf differ diff --git a/scripts/build-report-pdf.mjs b/scripts/build-report-pdf.mjs index 874f446..e143f8f 100644 --- a/scripts/build-report-pdf.mjs +++ b/scripts/build-report-pdf.mjs @@ -26,12 +26,13 @@ const work = mkdtempSync(join(tmpdir(), 'pycon-report-')); const asset = (path) => pathToFileURL(join(publicDir, path)).href; const photo = (day, n) => pathToFileURL(join(work, `${day}-${String(n).padStart(2, '0')}.jpg`)).href; +const extraPhoto = (name) => pathToFileURL(join(work, `${name}.jpg`)).href; // ponytail: Chrome embeds WebP uncompressed in PDFs, so photos go in as JPEG via macOS `sips`; swap for another converter off macOS. const convertPhotos = () => { const dir = join(publicDir, 'images/report'); for (const file of readdirSync(dir).filter((f) => f.endsWith('.webp'))) { - execFileSync('sips', ['-Z', '1400', '-s', 'format', 'jpeg', '-s', 'formatOptions', '75', join(dir, file), '--out', join(work, file.replace(/\.webp$/, '.jpg'))], { stdio: 'ignore' }); + execFileSync('sips', ['-Z', file.startsWith('gallery-') ? '600' : '1200', '-s', 'format', 'jpeg', '-s', 'formatOptions', '70', join(dir, file), '--out', join(work, file.replace(/\.webp$/, '.jpg'))], { stdio: 'ignore' }); } }; @@ -71,12 +72,13 @@ const build = (lang) => { `${r.programTitle} ${r.programHighlight}`, `${r.daysTitle} ${r.daysHighlight}`, `${r.sponsorsTitle} ${r.sponsorsHighlight}`, + `${r.pdf.galleryTitle} ${r.pdf.galleryHighlight}`, `${r.aidTitle} ${r.aidHighlight}`, `${r.partnersTitle} ${r.partnersHighlight}`, ]; const cover = page(` -
+
@@ -96,7 +98,7 @@ const build = (lang) => {
${esc(r.summaryP3)}
${esc(r.aidSubtitle)}
${esc(v.text)}
${esc(r.partnersSubtitle)}
${esc(r.pdf.closingTitle)}
- `, { n: 9, cls: 'last' }); + `, { n: 10, cls: 'last' }); return ` @@ -248,6 +257,10 @@ h3 { font-size: 13pt; margin-bottom: 3mm; } .foreword-photo { width: 100%; height: 62mm; object-fit: cover; object-position: center top; border-radius: 2mm; } .strip { margin-top: auto; padding-top: 6mm; display: grid; grid-template-columns: repeat(3, 1fr); gap: 3mm; } .strip img { width: 100%; height: 48mm; object-fit: cover; object-position: center top; border-radius: 2mm; } +.gallery { flex: 1; min-height: 0; display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(6, 1fr); gap: 2mm; margin-top: 2mm; } +.gallery img { width: 100%; height: 100%; min-height: 0; object-fit: cover; object-position: center top; border-radius: 1.5mm; } +.strip.fill { flex: 1; min-height: 0; grid-template-rows: 1fr 1fr; } +.strip.fill img { height: 100%; } .strip.tall { flex: 1; min-height: 0; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; } .strip.tall img { height: 100%; } @@ -308,7 +321,7 @@ h3 { font-size: 13pt; margin-bottom: 3mm; } -${[cover, foreword, numbers, programme, ...days, sponsors, closing].join('\n')} +${[cover, foreword, numbers, programme, ...days, sponsors, gallery, closing].join('\n')}