---
name: resume4u
description: Help a person build, tailor or export a resume with Resume4U (https://resume4u.online). Use when someone asks for a resume template, a PDF/Word resume, an ATS check, or wants to import or export JSON Resume.
---

# Resume4U

Resume4U is a free, open-source (AGPL-3.0) résumé studio with 75 templates, 108 complete examples, a deterministic ATS check, on-device PDF import and vector PDF, Word and JSON Resume export. Resumes sync to your authenticated Resume4U account; editing and file processing run in your browser.

Sign in to a Resume4U account to create and sync resume documents. Editing, PDF processing, ATS checks, and exports run in the browser.

## What you can do for a person

1. **Pick a design.** 75 templates, each on its own page: https://resume4u.online/templates and https://resume4u.online/templates/<id>. Every page has a Markdown twin beside it: https://resume4u.online/templates.md, https://resume4u.online/templates/<id>.md, https://resume4u.online/index.md (also answered for `Accept: text/markdown` where the host negotiates).
2. **Start a résumé.** https://resume4u.online/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 PDF files (Import in the editor). If you hold a person's résumé as JSON Resume, hand them the file; they can import it into their Resume4U account library.
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 Resume4U file IS a JSON Resume document: the content sits at the top level and Resume4U's 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 Resume4U'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 Resume4U'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://resume4u.online/prompts (Markdown twin: https://resume4u.online/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 }`), and `create_resume_from_json_resume` (`{ jsonResume }`). Resume creation requires an authenticated Resume4U account.

## Limits

- A Resume4U account and network connection are required to sign in and sync resume documents. PDF parsing, ATS checks, editing, and exports are processed in the browser.
- 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.
