Print-ready editable voter-information booklet for the City of Chamblee 2026 Democratic primary.
  • TeX 49.9%
  • Python 48.8%
  • Makefile 1.3%
Find a file
Clawlter Agent 5058059fe0
All checks were successful
Booklet CI / Validate and build booklet PDFs (pull_request) Successful in 6m28s
Booklet CI / Validate and build booklet PDFs (push) Successful in 7m47s
ci(booklet): add build validation workflow
2026-04-24 02:41:34 +00:00
.forgejo/workflows ci(booklet): add build validation workflow 2026-04-24 02:41:34 +00:00
assets fix: improve booklet headshot crops 2026-04-17 14:39:31 +00:00
data ci(booklet): add build validation workflow 2026-04-24 02:41:34 +00:00
deliverables fix: correct deandre mathis qr code 2026-04-17 16:26:28 +00:00
qa-previews fix: simplify footer callout layout 2026-04-13 18:33:42 +00:00
scripts ci(booklet): add build validation workflow 2026-04-24 02:41:34 +00:00
src feat: add state representative platform highlights 2026-04-17 14:14:02 +00:00
.gitattributes chore: keep deliverable pdfs out of git lfs 2026-04-13 20:10:47 +00:00
.gitignore feat: add initial chamblee 2026 voter booklet draft 2026-04-13 17:39:13 +00:00
Makefile ci(booklet): add build validation workflow 2026-04-24 02:41:34 +00:00
README.md ci(booklet): add build validation workflow 2026-04-24 02:41:34 +00:00

Chamblee 2026 voter booklet

Editable-source + PDF project for the Chamblee 2026 Democratic primary voter booklet.

Active generation pipeline

  • Generator script: scripts/generate_booklet.py
  • Validation script: scripts/validate_booklet.py
  • Editable booklet pages: src/booklet-pages.tex
  • Editable imposed print layout: src/booklet-print.tex
  • Rendered booklet pages PDF: build/booklet-pages.pdf
  • Rendered imposed print PDF: build/booklet-print.pdf

Prerequisites

  • Python 3
  • ffmpeg / ffprobe for headshot preparation
  • LuaLaTeX and latexmk for PDF builds
  • Git LFS enabled before building from a fresh clone, so committed image assets are real images rather than pointer files

The included Makefile defaults to the Hermes TeX Live path when available (/opt/hermes-runtime/tools/texlive/2026/bin/x86_64-linux) and otherwise uses latexmk from PATH. Override with LATEXMK=/path/to/latexmk if needed.

Build and validation

git lfs pull              # needed after a fresh clone
make generate             # refresh data/render_data.json and src/*.tex
make validate             # check generated data, assets, and imposition order
make build                # build build/booklet-pages.pdf and build/booklet-print.pdf

Equivalent manual build commands:

python3 scripts/generate_booklet.py
python3 scripts/validate_booklet.py
export PATH=/opt/hermes-runtime/tools/texlive/2026/bin/x86_64-linux:$PATH
latexmk -lualatex -interaction=nonstopmode -halt-on-error -jobname=booklet-pages -output-directory=build src/booklet-pages.tex
latexmk -lualatex -interaction=nonstopmode -halt-on-error -jobname=booklet-print -output-directory=build src/booklet-print.tex

Sources and structure

  • Authoritative candidate list: data/sheet_raw.json
  • Cleaned/render-ready data: data/render_data.json
  • Candidate QR codes: assets/qr/candidates/
  • Candidate headshots: assets/headshots/square/
  • Review images: qa-previews/
  • Project repository root: this directory

Binary file handling

This repo uses Git LFS for committed image formats listed in .gitattributes. Clone with Git LFS enabled to fetch preview images and static assets normally.

Current PDF deliverables in deliverables/ are committed as regular files; generated PDFs under build/ are ignored.

Imposition order

The print PDF follows the required 8-page booklet order:

  • Sheet A front: page 8 | page 1
  • Sheet A back: page 2 | page 7
  • Sheet B front: page 6 | page 3
  • Sheet B back: page 4 | page 5