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
Two ways, depending on how much you've already written down:
- Walk-me-through-it. If you're starting from a blank page, install the guided skill at easy-skill.md and just say “help me make a resume”. Claude asks one question at a time and hands you the PDF link at the end.
- I-have-the-info-already. Copy the prompt below into Claude Code, append your details, and run it. Claude builds the YAML, base64-encodes it, and prints a single URL you click to download. The full technical skill is 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.