Fork it. Push a .tex. Get versioned PDFs + a live viewer — automatically.
Fork it, edit and generate your resume from template/, push. GitHub Actions compiles it, cuts a release with the PDF attached, and updates a hosted page where you can browse every version you've pushed. See Demo.
Setup
- Fork and clone this repo
- Replace the
.texfile intemplate/with your own, and drop any logos intotemplate/icons/ - Edit
template/resume.yml:variant: general label: General author: "Your Name" template: "YourResume.tex" output: "YourName_Resume" # optional, defaults to the .tex filename
- Set your name inside the
.texfile itself — it's hardcoded in the header, soresume.yml'sauthorfield won't change it for you - Push to
main
NOTE: Turn on Pages once (Settings → Pages → Source: GitHub Actions) — this is a one-time manual step, per repo. Forks don't inherit this setting; each fork owner must enable it themselves.
What happens on push
One workflow handles all of it:
- Compiles
template/*.texwith XeLaTeX (needed for the bundled fonts — plain pdflatex won't render them) - Publishes the PDF as a release: a
latest-<variant>tag that always points at the newest build, plus a datedresume-<variant>-YYYY-MM-DDtag whenever the content actually changes - Rebuilds the GitHub Pages viewer, which reads the release list and lets you flip between every version you've published
See it in action: sadigaxund.github.io/git-resume — two-level profile/version selector, renders PDFs inline in your browser.
Nothing is committed back to the repo. The PDF and the site are build output, not history you have to manage by hand.
Different resumes for different applications
main is your default resume. If you want a different version for a specific application — say a data-engineering-flavored resume for one company — create a branch named resume/<something>, e.g. resume/facebook-de, with its own resume.yml:
variant: facebook-de label: Facebook — Data Engineer author: "Your Name" template: "Resume.tex" output: "YourName_Facebook_DE"
Push it, and it builds and releases on its own — separate tags, separate entry in the viewer's profile dropdown. Editing one variant never touches another.
Editing with AI
You don't have to write LaTeX by hand. Point a free coding agent like opencode at the repo and ask it to update your resume. Check skills/ first — it holds optional writing guidance (ATS-friendliness, tone, this template's macros) meant to be read before any content gets touched, by a human or an agent. Swap in your own style guide there if you want different rules.
Layout
template/
*.tex resume content, compiled with XeLaTeX
resume.yml variant, label, author, template, output filename
fonts/ font files, must stay next to the .tex
icons/ logos referenced from the .tex
index.html source for the Pages viewer
skills/ optional content-writing guidance, not read by CI
.github/workflows/build-resume.yml the whole pipeline
License
Fork it and use it for your own resume.
