A template for managing your resume like a codebase, designed to be maintained by an AI coding agent (Claude Code, or any agent that can edit files and run a shell script).
The idea: content lives in small Markdown partials, each resume variant is a plain-text recipe that orders those partials, and one script renders every variant to Markdown, HTML, PDF, and DOCX. Edit a partial once and every variant updates. Retarget your resume for a job posting by writing three small files, not by forking a document.
Full write-up: Resume as Code: How I Manage My Resume with Claude Code.
- Use this repo as a template (or clone it).
- Replace the John Doe content in
src/partials/with your own. Keep the file-per-section, file-per-role structure. - Rewrite
src/headline/andsrc/summary/for each variant you want. - Set
NAMEandTITLEat the top ofbuild.sh. - Build:
./build.sh # build all variants
./build.sh general # build one variant
CHROME=/path/to/chrome ./build.sh # non-default Chrome locationEach variant generates (into dist/<variant>/, gitignored):
<NAME>.md— the assembled single-document Markdown (handy for pasting into web forms)<NAME>.pdf— via pandoc → HTML → headless Google Chrome<NAME>.docx— via pandoc (native)
Requires pandoc and Google Chrome. No LaTeX, no templating engine, no dependencies
to install beyond tools you likely already have.
After building, the script prints each PDF's page count, warns if a PDF exceeds
MAX_PAGES (default 2, override with MAX_PAGES=3 ./build.sh), and warns about
orphaned source files that no recipe references.
See examples/ for committed sample output from the three included variants.
A variant recipe is just an ordered list of partials:
# Portfolio variant: Writing & Open Source elevated near the top.
partials/header.md
headline/portfolio.md
summary/portfolio.md
partials/writing.md # elevated for portfolio
partials/skills.md
partials/role-acme-head.md
partials/role-acme-body.md
...
Reordering lines reorders sections. Deleting a line drops a section. The same role can
carry two "head" files with different framing (role-acme-head.md vs
role-acme-head-manager.md) that share one body, so accomplishments never drift apart.
Layout is data, not code.
| Path | What |
|---|---|
src/partials/ |
Shared content blocks (header, skills, each role, writing, education) |
src/headline/<variant>.md |
Per-variant title + tagline |
src/summary/<variant>.md |
Per-variant professional summary |
src/variants/<variant>.txt |
Recipe: ordered list of partials (relative to src/); # comments allowed |
style.css |
Print styling for the PDF |
build.sh |
Build script |
applications.md |
Log of where each resume was sent (variant + commit SHA) |
postings/ |
Job postings / audience notes that drove each variant |
examples/ |
Committed sample output (PDFs) from the included variants |
dist/ |
Generated output (gitignored) |
CLAUDE.md |
Instructions your AI agent reads every session |
| Variant | Use it for |
|---|---|
general |
Balanced, ATS-safe, reverse-chronological. The workhorse for online applications. |
engineering-manager |
Leadership framing of the most recent role; demonstrates the head/body split. |
portfolio |
Writing & Open Source near the top. For direct outreach and your network. |
- Add
src/headline/<name>.mdandsrc/summary/<name>.md. - Add
src/variants/<name>.txtlisting the partials in the order you want. - Save the job posting or audience notes that motivated it to
postings/<name>.md. ./build.sh <name>.
Or, with an AI agent: paste the job posting and ask for a variant targeting it. The agent writes the three files, saves the posting, builds, and you review a small diff.
- Build the variant and send/upload the PDF or DOCX from
dist/<variant>/. - Add a row to
applications.mdwith the variant and current commit SHA. - For significant applications, tag the commit:
git tag applied/<employer>-<yyyy-mm>.
To reproduce exactly what you sent: git checkout <commit> && ./build.sh <variant>.
CLAUDE.md is read by Claude Code at the start of every session. It documents the
build, the workflow conventions above, and content style rules. The habit that makes
this system compound: every time you correct the agent, codify the correction in
CLAUDE.md so every future session starts already knowing it.
MIT. See LICENSE.