Templated resume built with LaTeX, generated from YAML data via Jinja2, compiled and deployed automatically through GitHub Actions to GitHub Pages.
Live: cv.cosmdandy.dev
cv/
├── template/
│ ├── cv.tex.j2 Jinja2 template (bilingual)
│ └── developercv.cls LaTeX document class
├── scripts/
│ └── build.py YAML + Jinja2 → LaTeX generator
├── pages/
│ ├── fonts/ Self-hosted Inter font
│ └── index.html Landing page
├── .github/workflows/
│ ├── build-deploy.yml Build PDF, convert to WebP, deploy to Pages
│ └── docker-image.yml Build custom TeX Live Docker image
├── cv-data.example.yaml Example CV data
├── cv-data.yaml Your data (gitignored, injected via secret)
├── Dockerfile Custom TeX Live image for fast CI builds
└── Makefile Local build commands
-
Fork this repository
-
Fill in your data — copy the example and edit:
cp cv-data.example.yaml cv-data.yaml
-
Add the
CV_DATAsecret to your GitHub repo (Settings → Secrets → Actions):# macOS base64 < cv-data.yaml | pbcopy # Linux base64 -w 0 < cv-data.yaml
Paste the output as the value of
CV_DATA. -
Update
CNAMEwith your domain, or delete it to useusername.github.io/cv -
Enable GitHub Pages: Settings → Pages → Source: GitHub Actions
-
Push — the pipeline builds the PDF, converts it to WebP, and deploys
Requirements: Python 3.9+, LaTeX with XeTeX
pip install -r requirements.txt
# Generate .tex and compile to PDF
make build
# Build using example data (no real data needed)
make build-example
# Generate .tex only (no LaTeX required)
make render