YAML LaTeX CV Generator
Bilingual CV and cover letter generator
Generates CVs and cover letters in English and Hungarian from one YAML content source, using Jinja2 templates and a LaTeX class, with per-application overrides and reproducible PDF builds.
- languages
- 2
- CV variants
- 2
- sample PDFs
- 8
- pytest tests
- 32
- Goal
- Keep CVs and cover letters in two languages and several variants from a single source, so the versions never drift apart and errors such as missing translations or overlong pages show up during the build.
- Solution
- All text lives in YAML with language pairs and variant-dependent values. A Python build resolves language and variant, renders Jinja2 templates into LaTeX with automatic escaping and compiles the PDFs with latexmk. Per-application files may override only whitelisted keys, so facts stay unchanged.
- Result
- A public, documented generator with fictional sample data, two CV variants, fallback cover letters in both languages and committed sample PDFs. Repeated builds produce byte-identical files.
- A missing or malformed translation stops the build and names its location
- Per-application overrides are limited to a whitelist; employers and dates cannot be changed
- Reproducible PDFs through a fixed SOURCE_DATE_EPOCH
- Build checks for page count and cover letter word count
- ATS-friendly single-column layout without icon fonts
How it works
YAML content, variant and application files are resolved into one plain context per language and variant. Jinja2 renders it into LaTeX with delimiters that do not clash with LaTeX braces, and latexmk compiles the PDF. Page and word counts are checked after each build.
Testing
The pytest suite covers language and variant resolution, LaTeX escaping, context building from the sample content, application overrides and early errors for missing image files. It runs without a LaTeX installation.
Limitations and future work
Languages and variants are fixed in the build script, and the PDF build needs a local TeX Live installation. An automated PDF build in CI is a possible next step.