---
name: cvaurum
description: Help a person build, tailor or export a résumé with CVAurum (https://cvaurum.com), a free résumé builder that runs entirely in the browser. Use when someone asks for a résumé template, a PDF/Word résumé, an ATS check, or wants to import or export JSON Resume.
---

# CVAurum

CVAurum is a free, open-source (MIT) résumé builder that runs entirely in your browser: no account, no server, no tracking; 68 templates, 108 complete example résumés, a built-in deterministic ATS check, PDF import with on-device OCR, and vector PDF, Word and JSON Resume export, working offline as an installable app.

Everything runs in the visitor's browser: no account, no upload, no API. The whole application is open source (https://github.com/akhil-dara/cvaurum).

## What you can do for a person

1. **Pick a design.** 68 templates, each on its own page: https://cvaurum.com/templates and https://cvaurum.com/templates/<id>. Every page has a Markdown twin beside it: https://cvaurum.com/templates.md, https://cvaurum.com/templates/<id>.md, https://cvaurum.com/index.md (also answered for `Accept: text/markdown` where the host negotiates).
2. **Start a résumé.** https://cvaurum.com/app opens the editor; "Start with an example" offers six ready résumés. A template page's "Use this template" opens the editor in that design.
3. **Bring content in.** The editor imports JSON Resume (https://jsonresume.org/schema) and text PDFs (Import in the editor). If you hold a person's résumé as JSON Resume, hand them the file; the editor keeps it in their browser storage only.
4. **Fit and export.** Magic fit (Design → Page) sizes type and spacing to a page target inside rules the person sets and says what it chose. Export gives a vector PDF (PDF/A-2B, PDF/UA-1), a Word file and JSON Resume.
5. **Check for an ATS.** The ATS panel scores the résumé, matches a job description's keywords and shows the plain text a parser reads.

## The document shape

Produce this and the person can import it. The field names below are read out of the schemas the importer validates against, so they cannot drift from the code.

A CVAurum file IS a JSON Resume document: the content sits at the top level and CVAurum's own visual settings are namespaced under `meta.cvaurum`, which an assistant should leave out entirely — the app fills it in. Import is deliberately forgiving: a field it does not recognise, or one whose value is the wrong type, is dropped on its own; it never rejects the rest of the résumé. So a plain JSON Resume document imports complete, and a near miss imports as most of a résumé rather than as an error.

Top level: `basics`, `work`, `volunteer`, `education`, `awards`, `certificates`, `publications`, `skills`, `languages`, `interests`, `references`, `projects`, `custom`. All but `custom` are JSON Resume v1; `custom` is CVAurum's own, for material that belongs in no standard section. Every field is optional.

- `basics`: name, label, image, email, phone, url, summary, location, urlLabel, urlIcon, profiles
- `basics.location`: address, postalCode, city, countryCode, region
- `basics.profiles[]`: id, network, username, url, label, icon
- `work[]`: id, name, logo, badge, rail, position, url, location, startDate, endDate, summary, highlights
- `work[].rail`: year, word
- `volunteer[]`: id, organization, logo, badge, rail, position, url, startDate, endDate, summary, highlights
- `volunteer[].rail`: year, word
- `education[]`: id, institution, logo, badge, rail, url, area, studyType, location, startDate, endDate, score, summary, courses, status, level
- `education[].rail`: year, word
- `awards[]`: id, title, date, awarder, url, urlLabel, summary
- `certificates[]`: id, name, date, issuer, url, urlLabel, logo
- `publications[]`: id, name, publisher, releaseDate, url, summary
- `skills[]`: id, name, level, rating, keywords
- `languages[]`: id, language, fluency, rating
- `interests[]`: id, name, keywords
- `references[]`: id, name, reference
- `projects[]`: id, name, description, url, links, rail, startDate, endDate, highlights, keywords
- `projects[].links[]`: id, label, url
- `projects[].rail`: year, word
- `custom[]`: id, name, items
- `custom[].items[]`: id, name, subtitle, rail, date, location, url, summary, highlights
- `custom[].items[].rail`: year, word

Dates are strings: `YYYY-MM-DD`, `YYYY-MM` or `YYYY`. An empty `endDate` reads as "present". `summary` and each string in `highlights` may carry simple markup — `strong`, `b`, `em`, `i`, `u`, `s`, `a`, `span`, `p`, `br`, `div`, `ul`, `ol`, `li` — and anything outside that set is stripped before the page is drawn, so plain text is always safe. `basics.image` and any `logo` must be a `data:image/…` URL — a remote address is dropped on import, because the app makes no outbound request. These are CVAurum's additions to the standard sections and all are optional: `id`, `logo`, `badge`, `rail`, `rating`, `links`, `urlLabel`, `urlIcon`, `icon`, and education's `status` and `level`.

Never invent an employer, a date, a qualification or a figure a person has not given you. An empty field is a question to ask them; a filled-in guess is something they have to defend in an interview.

Ready-made prompts for the jobs people actually bring — notes into a résumé, tailoring to a posting, rewriting bullets to name a number, writing a summary, starting from nothing — are at https://cvaurum.com/prompts (Markdown twin: https://cvaurum.com/prompts.md).

## In the page (WebMCP)

When the page is open in a browser that exposes `navigator.modelContext`, the app registers tools: `list_resume_templates`, `open_resume_template` (`{ id }`), `create_resume_from_json_resume` (`{ jsonResume }`) which saves a new résumé in the browser and opens it. They act only in that browser.

## Limits

- It has no server, so there is no cloud sync and no account: a résumé lives in the browser it was made in, and moves to another device by a backup file, a JSON Resume file or an encrypted link.
- It does not write résumés for you: the writing coach is rule-based feedback on what you wrote, not generated text.
- PDF import is a reconstruction of an existing file and is meant to be reviewed; unusual layouts and scanned pages can need corrections.
- It does not send applications, track email or connect to job boards; the tracker is a board you keep yourself.
- Editing needs JavaScript; without it a visitor gets the public pages and their content, not the editor.
