A small Python-program to generate my CVs from a Markdown file.
Find a file
renovate-bot 6a74685166
All checks were successful
Continuous Integration / Build Package (push) Successful in 25s
Continuous Integration / Lint, Check & Test (push) Successful in 32s
Merge pull request 'chore(deps): update python docker tag to v3.14' (#2) from renovate/python-3.x into main
2026-03-07 01:01:59 +01:00
.forgejo/workflows build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00
example docs: update example CV images from new PDF 2026-03-06 06:57:02 +01:00
src/cv_generator fix: add error handling for missing input files 2026-03-06 07:02:10 +01:00
.envrc build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00
.gitignore build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00
.python-version chore(deps): update python docker tag to v3.14 2026-03-07 00:01:22 +00:00
CLAUDE.md docs: add CLAUDE.md for Claude Code guidance 2026-03-06 07:01:15 +01:00
flake.lock build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00
flake.nix build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00
LICENSE.md docs: add MIT license 2026-03-05 21:07:23 +01:00
main.py fix: add error handling for missing input files 2026-03-06 07:02:10 +01:00
pyproject.toml build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00
README.md docs: update example CV images from new PDF 2026-03-06 06:57:02 +01:00
renovate.json Add renovate.json 2026-03-06 00:01:04 +00:00
uv.lock build: switch from devenv to nix flakes with uv2nix 2026-03-05 21:25:55 +01:00

CV Generator

Generate a polished PDF CV from a Markdown file with YAML frontmatter.

The CV data (work experience, education, skills, etc.) is defined as structured YAML frontmatter, while the cover letter is written as regular Markdown below it. The tool renders everything into a styled PDF using Jinja2 templates and WeasyPrint.

Example

The example/ directory contains a sample CV for Albert Einstein, applying to the Swiss Patent Office in 1902.

Cover Letter CV
Cover Letter CV

Usage

uv run cv path/to/your_cv.md

To specify a custom output path:

uv run cv path/to/your_cv.md -o output.pdf

Markdown File Format

The input file uses YAML frontmatter for structured data and Markdown for the cover letter body. See example/alberteinstein.md for a complete example.

Photo and signature paths are resolved relative to the Markdown file's location.

Third-Party Assets

The following bundled assets are licensed separately from this project:

  • Fira Sans Condensed (src/cv_generator/fonts/) Designed by Carrois Corporate GbR & Edenspiekermann AG for the Mozilla Foundation. Licensed under the SIL Open Font License, Version 1.1. Source: github.com/mozilla/Fira

  • Bootstrap Icons (src/cv_generator/icons/) Copyright 2019-2024 The Bootstrap Authors. Licensed under the MIT License. Source: icons.getbootstrap.com

  • Einstein's Application Photography (src/example/) Generated by BlackForestLabs Flux 2 Pro

License

This project is licensed under the MIT License.