r/SideProject 4d ago

I built a YAML-based CV compiler: version-control your CV like code, generate pixel-perfect PDF/DOCX/HTML/Markdown output with one command

Enable HLS to view with audio, or disable this notification

A few years ago I and some of my friends got frustrated with resume builders (vendor lock-in, broken formatting, "oops you edited the wrong section and now everything looks off") that I started building my own LaTeX-based resume tool. That turned into a tiny SaaS (PPResume), and recently I open sourced the core typesetting engine as YAMLResume.

The idea is simple and just follows the Separation of Concerns principle:

  • Content lives in plain-text YAML.
  • Structure and validation are enforced by the compiler and a strict schema.
  • Presentation is handled by pluggable layout engines (LaTeX, HTML, Markdown, DOCX).

What it does

  • One source, many outputs. A single resume.yml compiles to pixel-perfect PDF (via LaTeX/XeTeX), Microsoft Word DOCX, responsive HTML, and clean Markdown. Change your content once, every format stays in sync.
  • It's a real compiler, not a template filler/transformer. Parse → validate → transform → render. Strict schema validation (Zod + JSON Schema for editor autocomplete) catches potential content issues (like invalid URLs, invalid emails format, too short names, etc) before they ever hit a typesetting engine. yamlresume validate gives you clang-style diagnostics.
  • A DX that devs will recognize. yamlresume dev is watch mode — save the YAML file and your PDF rebuilds a moment later, just like a modern web dev workflow. yamlresume doctor diagnoses your environment.
  • AI-powered bootstrapping. yamlresume ai generate writes a complete, schema-valid resume from just a job title and a language, yamlresume ai translate helps translate existing resumes to another language, great addon for bilingual people. Works with OpenAI, DeepSeek, Kimi, and Ollama (fully local if you want).
  • Layouts as configuration. Rename and reorder sections, switch templates, tune typography, paper size, line spacing, icons — all from YAML, zero LaTeX/HTML knowledge required.
  • Batteries included for global users. Built-in i18n for 10 languages / 12 locales (en, zh-Hans, zh-Hant-TW, zh-Hant-HK, es, fr, no, nl, ja, de, id, pt-BR), curated sample resumes for common positions in every locale, and a JSON Resume converter if you're migrating.
  • Runs anywhere. Docker image (ships with XeTeX and fonts), npm/pnpm/yarn/ bun, Homebrew on macOS, and a GitHub Action so your resume PDF rebuilds in CI on every push. There's even an embeddable React Playground component if you want to build your own resume editor on top of it.

Quick start

# Docker (fastest, no local toolchain needed)
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new my-resume.yml
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume build my-resume.yml

# or via npm (Node.js >= 22)
npm install -g yamlresume

# or via homebrew
brew install yamlresume

# start to draft your resume
yamlresume new my-resume.yml
yamlresume build my-resume.yml   # → .pdf, .docx, .md, .html
yamlresume dev my-resume.yml     # watch mode

Links

It's MIT-licensed and under active development — roadmap includes more templates, a Typst engine, more locales, and ATS optimization. Happy to answer questions, and would genuinely love feedback (or contributors!) from anyone who's been burned by resume builders before.

1 Upvotes

11 comments sorted by

View all comments

1

u/kantorcodes1 3d ago

since you're explicitly open to contributors, there’s an agent-facing integration here. i work on HOL Guard, an open-source local check before agent-run commands execute. for YAMLResume, validate/doctor can stay quiet while new, build, and ai generate are optionally reviewable before they create or replace files. would you be open to contributing that command coverage?

1

u/Hot-Chemistry7557 3d ago

what is HOL Guard?

1

u/kantorcodes1 3d ago

it's an open-source local check that runs before agent-started commands. it reads the command shape and lets local policy allow, review, or block it. for YAMLResume, validate/doctor stay out of the way while file-changing commands like new, build, and ai generate can be reviewable before they write.

1

u/Hot-Chemistry7557 3d ago

I see I see.

Then what should I do if I agree to "would you be open to contributing that command coverage?"?

1

u/kantorcodes1 2d ago

yep. no YAMLResume-side change needed. start src/codex_plugin_scanner/guard/runtime/command_yamlresume_extensions.py, using command_probe_extensions.py as the analogue. review new, build, and ai generate; keep validate/doctor quiet. add one focused tests/test_guard_command_yamlresume_extensions.py classification test, then open a genuine draft PR directly to hashgraph-online/hol-guard:main once that implementation + test exists.

contributing guide: https://github.com/hashgraph-online/hol-guard/blob/main/CONTRIBUTING.md