yamlresume
YAML or JSON in, PDF out. JSON Resume-compatible. Generated entirely in your browser — no account, no server.
How it works
This site is hosted on GitHub Pages, so there is no backend to receive a real
POST. Instead, the payload is delivered to the page
in one of two equivalent ways — both stay entirely on your machine:
- Form mode. Paste YAML or JSON below and click Generate PDF.
-
URL mode (the “POST”). Append the payload to the URL as a base64-encoded fragment:
#data=<BASE64_OF_YAML_OR_JSON>. Opening that URL auto-renders and downloads the PDF. URL fragments are never sent to the server, so your data stays private.
The schema is JSON Resume-compatible,
so an existing resume.json works as-is — and YAML resumes
are accepted because YAML 1.2 is a strict superset of JSON.
Driving this with Claude Code
Both flows are copy-paste prompts — nothing to install. Pick the one that matches what you've got:
-
Walk-me-through-it. Claude interviews you
section by section and saves
resume.pdf(andresume.htmlas a fallback) directly in your working directory — no third-party site involved. Has a “fill in the rest” escape hatch that auto-completes empty sections with clearly-marked placeholder content layered under your real answers. - I-have-the-info-already. Paste this prompt + your resume info into Claude Code. It builds the YAML and prints a URL into this site that auto-downloads the PDF in your browser.
Option 1: Install as a Claude Code skill (recommended)
Drop the file into your Claude Code skills directory and Claude treats it as your trusted config — the prompt-injection alarm doesn't fire because you placed it there:
mkdir -p ~/.claude/skills/yamlresume-walkthrough curl -fsSL https://yamlresume.org/easy-skill.md \ -o ~/.claude/skills/yamlresume-walkthrough/SKILL.md
Then in any Claude Code session, run
/yamlresume-walkthrough or just say
“help me make a resume” — Claude auto-matches
the skill description. No restart needed.
Option 2: Paste the prompt directly
How to use this: click Copy below and paste the text into Claude Code as a regular message. Don't tell Claude to fetch this URL or follow the skill at yamlresume.org — pointing Claude at a URL of instructions looks like prompt injection and gets refused. Pasting the text yourself is the trusted path.
I'd like help making a PDF resume. Could you walk me through it section by section — name, contact, a short summary, work history, education, skills, and any extras — asking one quick question at a time and showing a small example with each? Echo back what I tell you in one short line so I can correct fast, and don't fabricate dates, employers, or metrics for jobs I name (leave anything I didn't say blank). If at any point I say "fill in the rest," stop asking and assemble the rest of the resume with clearly-bracketed placeholder text I can edit later ([Company name — replace], [Replace — what did you ship?], etc.) — keep my real answers untouched, but use square brackets so the placeholders are obvious in the rendered PDF and can't be shipped by accident. Don't sample-fill my actual name; ask me for that if I haven't given it. When we're done, save a self-contained resume.html in my current working directory with print-friendly CSS (clean serif, A4-ish margins, sane page breaks). If chromium --headless, wkhtmltopdf, weasyprint, or pandoc is installed, also produce resume.pdf from it; otherwise just tell me to open the HTML and Print → Save as PDF.
Standalone copy: easy-skill.md.
One-shot prompt (for when you already have your details)
Paste this into Claude Code along with your resume info. Full skill: SKILL.md.
You are helping me generate a PDF resume using yamlresume.org. The site is
fully static, so do NOT attempt a real HTTP POST. Instead:
1. Read the JSON Schema at https://yamlresume.org/schema.json (or the inline
schema in index.html, id="resume-schema") to learn the exact payload
shape. The schema is JSON Resume-compatible.
2. Build a YAML payload conforming to the schema using my details below.
Required: basics.name. Recommended: basics.{label,email,summary,location,
profiles}, work[], education[], skills[], projects[]. Use ISO-ish dates
("2022-01" or "Jan 2022"); use "Present" for current roles. Quote dates
that are bare years ("2018") so YAML doesn't read them as integers.
3. UTF-8 encode the YAML, then base64-encode it. URL-safe base64 (+→-, /→_,
drop = padding) is fine — the page accepts both.
4. Print exactly one line: https://yamlresume.org/#data=<BASE64> — nothing
else.
5. Tell me to click that URL; my browser will render and download the PDF.
If the resulting URL is longer than ~6000 characters, instead print the YAML
in a fenced ```yaml``` code block and tell me to paste it into the textarea
on https://yamlresume.org/.
JSON works too if I give you JSON — the page accepts either.
My details:
<PASTE YOUR RESUME INFO HERE>
Payload schema (JSON Resume subset)
Top-level keys:
basics(required:name) —label,email,phone,url,summary,location.{city,region,countryCode,…},profiles[]work[]—name(company),position,startDate,endDate,summary,highlights[],location,urleducation[]—institution,studyType,area,startDate,endDate,score,courses[]skills[]—name(category),level,keywords[]projects[]—name,description,url,highlights[],keywords[]awards[],languages[](rendered if provided)
Full schema: schema.json. Samples: sample.yaml · sample.json.
Generate now
Paste YAML or JSON below and click Generate PDF.
FAQ
Where does my data go?
Nowhere. Everything runs in your browser tab — the textarea, URL fragment, and PDF rendering. No network requests carry your resume content.
Why YAML?
Multi-line summaries and bullet lists read better in YAML than JSON, and you don't have to escape quotes. JSON still works — paste a JSON Resume file directly.
What does the PDF look like?
A clean single-column serif resume — name, contact line, then Summary, Experience, Projects, Education, Skills (and Awards / Languages if you provide them). One template only; fork the repo to add others.
Why not a real POST?
GitHub Pages serves static files only. The URL-fragment trick gives the same single-step ergonomics without needing a server.