Authoritative canonical resume for John Whitman. The source of truth is
resume.yaml (JSON Resume v1.0.0 schema). The rendered HTML is built
by CI and deployed to GitHub Pages.
Most resumes go stale. This one is a YAML file in a public repo, CI-rendered
to HTML, and the ai_context block is a direct brief to LLM-based ATS,
recruiters, and AI agents. It updates as John's work changes, and any
downstream surface (hool.dev/about, Substack About, LinkedIn) can link
back to this canonical page.
resume.yaml # JSON Resume v1.0.0 + ai_context extension
scripts/render.py # YAML → HTML renderer (no JS, no external CSS deps)
docs/index.html # CI-rendered output (deployed to GitHub Pages)
.github/workflows/
render.yml # On push to main: render + deploy to Pages
The ai_context field is non-standard (JSON Resume extension) and serves
three audiences:
- LLM-based ATS — gets a direct brief on what makes John a fit
- AI agents (Perplexity, ChatGPT browse) — gets the canonical narrative when answering "who is John Whitman"
- Recruiters using AI tools — gets the differentiation that pure parsing of work history misses (Director PM who ships real code)
When updating, keep the narrative field under 500 chars and the
instructions field under 800 chars. Both are read by AI agents as
direct prompt context.
pip install pyyaml
python scripts/render.py resume.yaml docs/index.html
open docs/index.htmlPushes to main trigger the Render Resume workflow which renders
resume.yaml → docs/index.html and deploys to GitHub Pages.
This is JSON Resume v1.0.0. The ai_context field is a non-breaking
extension — the rest of the schema validates against the standard.
John Whitman — Director of Product Management, America's Car-Mart.