A Markdown-to-PDF resume system with AI-assisted tailoring for job applications.
Tailoring a resume for every application by hand is slow, error-prone, and produces drift across versions. LaTeX gives great output but is hostile to quick edits. This repo solves both problems: Markdown as the single editable source, Pandoc + a Lua filter to render it into a pixel-perfect PDF, and an AI agent that tailors the whole thing to a job description in one shot.
flowchart LR
JD[Job Description] --> Agent
Agent --> MD[tailored resume.md]
MD --> Pandoc
Pandoc --> |Lua filter| LaTeX[LaTeX AST]
LaTeX --> |pdflatex| PDF[Tushar-Pandey-resume.pdf]
PDF --> local[applications/role-NNN/]
The agent reorders bullets, rewrites the summary, and adjusts the skills section — without fabricating anything not already in the base resume. Company names never appear in the published output.
flowchart TD
src["src/resume.md\n(Markdown source)"]
tmpl["templates/resume-template.tex\n(LaTeX preamble + $body$)"]
lua["filters/resume.lua\n(Pandoc Lua filter)"]
pandoc["pandoc --pdf-engine=pdflatex"]
pdf["Tushar-Pandey-resume.pdf"]
src --> pandoc
tmpl --> pandoc
lua --> pandoc
pandoc --> pdf
src/resume.md — the only file you edit day-to-day. Plain Markdown with structural conventions the Lua filter understands.
filters/resume.lua — translates the Markdown AST into custom LaTeX resume commands:
| Markdown pattern | LaTeX output |
|---|---|
| H1 + contact paragraph | \begin{center} heading block |
| H2 | \section{} |
| H3 + italic subline | \resumeSubheading{company}{date}{role}{location} |
H3 **bold** | _italic_ |
\resumeProjectHeading{\textbf{…} $|$ \emph{…}}{} |
| Bullet list | \resumeItemListStart / \resumeItem{} / \resumeItemListEnd |
templates/resume-template.tex — full LaTeX preamble (packages, margins, custom commands). Body is $body$.
config/build.conf — pipeline configuration, including the output PDF filename:
OUTPUT_FILENAME="Tushar-Pandey-resume.pdf"# Full Name
phone | email | [linkedin](url) | [github](url)
## Experience
### Role Title | Company Name | Date Range
_Team description | City, Country_
- **Achievement**: what you built and why it mattered.
## Key Projects
### **Project Name** | _Tech Stack_
- What it does.
## Technical Skills
- **Category**: item, item, itemThe only non-obvious rule: the last | in an H3 line is the date separator, so company names containing | work without escaping.
# Prerequisites
brew install pandoc
# BasicTeX: https://tug.org/mactex/morepackages.html
# Build base resume
./scripts/build-resume.sh
# Build a tailored variant
./scripts/build-resume.sh \
applications/<role-type>/<company-slug>/resume.md \
applications/<role-type>/<company-slug>/Output filename is set in config/build.conf. Default: Tushar-Pandey-resume.pdf.
sequenceDiagram
participant You
participant Agent
participant Pipeline
You->>Agent: paste job description
Agent->>Agent: identify role-type, company slug
Agent->>Agent: tailor resume.md from src/resume.md
Agent->>Pipeline: build-resume.sh applications/…/resume.md
Pipeline-->>Agent: PDF (saved locally in applications/)
Agent->>Agent: update APPLICATIONS.md
Agent->>You: PDF ready locally, comms drafted
The agent:
- Rewrites the profile summary to speak to the role
- Reorders bullets within each job to front-load what the JD values
- Leads the skills section with the role's key technologies
- Pulls extra detail from
base/Tushar-Pandey-resume.mdwhen the basesrc/is lighter
Hard constraint: no fabrication. Every metric, technology, and bullet in the output must exist in the base resume.
Everything stays local. Nothing is pushed to a remote repository.
applications/— tailored resumes, compiled PDFs, per-application artifacts (company names, JDs, comms)APPLICATIONS.md— local index mapping IDs to companies and tracking status
Company names, job descriptions, and all application data exist only on your machine.
├── src/resume.md # Pandoc Markdown source (edit this)
├── base/ # Full content library + original LaTeX (do not modify)
├── templates/resume-template.tex # Pandoc LaTeX template
├── filters/resume.lua # Lua filter (AST → custom LaTeX commands)
├── config/build.conf # Pipeline config (output filename, etc.)
├── scripts/build-resume.sh # Build script
├── applications/ # Tailored sources, compiled PDFs, per-application artifacts
│ └── <role-type>/<company-slug>/
├── .raven/ # Agent workflow artifacts
└── compile.sh # Legacy pdflatex script (still functional)
- AGENTS.md — agent instructions: tailoring workflow, directory model, Markdown conventions
- CONTRIBUTING.md — human guide: editing, building, index format