Build a beautiful, ATS-ready resume in your browser. 100% local, private, and free. No account. No server. No tracking.
100% Client-Side · MIT Licensed · Node ≥ 18.18 · Zero Backend
CVAurum is a beautiful, privacy-first resume builder that runs entirely in your browser. Pick from 38 premium templates, edit right on the page, get instant ATS feedback, tailor your resume to a job description, import an existing PDF résumé, and export a crisp PDF or an ATS-friendly Word document — all without an account, a server, or a single byte of tracking. Install it as an app and it works fully offline. Your data lives in your browser's IndexedDB and never leaves your machine unless you send it somewhere.
npm install && npm run devThat's the entire setup. No Docker, no Postgres, no Redis, no headless Chromium. Just a Vite dev server and your browser.
A resume tool should be beautiful, private, and instant — without asking you to sign up, pay, or trust a server with your career history. CVAurum is built around four ideas:
- 🎨 Design-first. 38 hand-crafted templates with real typographic hierarchy, icon-chip section headings, and an auto-fit engine that keeps your resume looking sharp on a single page.
- 🔒 Private by architecture. There is no backend. Your data lives only in your browser. Nothing is ever uploaded, logged, or tracked.
- ⚡ Instant to run, instant to use. One command to start. Edit directly on the resume, drag sections around, undo/redo, and watch a live ATS score update as you type.
- 🧩 Yours to own. 100% open source (MIT), built on the open JSON Resume schema, and easy to extend — adding a template is a config object and a CSS block.
- Features
- Screenshots
- Quick Start
- Usage Highlights
- Privacy
- Tech Stack
- Project Structure
- Roadmap
- Contributing
- License
- Acknowledgements
- 38 premium, data-driven templates — Aurum, Aurum Editorial, Swiss Aurum, Atelier, Harvard, Garamond, Aria, Oxford, Cambridge, Vector, Frost, Sterling, Vertex, Apex, Prism, Linen, Quartz, Lumière, Editorial, Marquee, Terminal, Nova, Scholar, Onyx, Cobalt, Academia, Verdant, Sienna, Newton, Deedy, Slate, Mercury, Halcyon, Graphite, Portrait, Spotlight, Mono, and Opal — each with icon-chip section headings and a refined type scale.
- Most templates are ATS-safe and flagged with a shield so you know which ones parse cleanly.
- Full typography control: separate body / heading / name fonts (45 bundled, self-hosted fonts — no CDN), font size, line-height, letter-spacing, accent colors, spacing, and margins.
- Layout freedom: two-column ↔ single-column, A4 or US-Letter page size, light / dark / system theme.
- Edit directly on the resume — click any text on the canvas (name, title, summary, company, bullets…) and type. Changes sync live to the form panel, undo/redo, and autosave. Prefer forms? Both work, always in sync.
- Live WYSIWYG preview on an A4 / US-Letter page with page-break guides and full multi-page support.
- Rich text (TipTap) for summaries and bullet points.
- Drag-and-drop section reordering (dnd-kit), show/hide sections, custom sections, and section renaming.
- Visual "Add a section" gallery — each section is shown as a live preview rendered in your actual template, so you see exactly how it will look before adding it.
- Undo / redo with
Ctrl+Z/Ctrl+Shift+Z(powered by zundo). - Debounced autosave to IndexedDB — your work is saved as you type.
- Multi-resume dashboard: create, duplicate, delete, and import resumes.
- Job application tracker: a drag-and-drop kanban board (Wishlist → Applied → Interview → Offer → Rejected) to manage your search.
- Deterministic ATS analysis — instant, private, and no LLM required. Structural checks for contact info, summary, quantified bullets, action verbs, length, ATS-safe layout, and standard headings, plus an overall ATS score.
- Live job-description tailoring: paste a JD and instantly see matched vs. missing keywords and a match score.
- Import an existing PDF résumé — drop in a PDF and CVAurum reconstructs it into editable, structured sections (contact, experience, education, skills…) entirely in your browser — nothing is uploaded. Text-based PDFs work best; scanned / image-only PDFs are read with on-device OCR (self-hosted Tesseract, no cloud). Always give the result a quick review.
- One-click PDF export via the browser's native "Save as PDF" of a dedicated print route — selectable, ATS-parseable text (not a rasterized image), pixel-identical to the preview.
- Word (.docx) export — a clean, single-column, ATS-friendly Word document with real bullet lists, preserved bold, and your template's accent color and fonts. Generated entirely in your browser; nothing is uploaded.
- Import & export JSON Resume files — built on the JSON Resume schema so your data round-trips with the wider ecosystem.
- Install it like a native app on desktop or mobile (Add to Home Screen / Install).
- Works fully offline, zero external requests — all 45 fonts are bundled and the whole app is precached by a service worker, so CVAurum never contacts a third-party server (not even for fonts). Build resumes with no connection at all.
- No server, no account, no analytics, no tracking, no cookies. (More in Privacy.)
Run
npm run devto see it live. To populate this section, drop PNGs intodocs/screenshots/(editor.png,preview.png,templates.png,ats.png) and uncomment the table below.
A quick tour of what you get:
- Dashboard — your private resume library, all stored locally.
- Editor — left panel (Content · Design · Templates · ATS) with a live, paginated A4/Letter preview.
- Templates gallery — 38 templates rendered live with your content.
- ATS panel — an instant score plus a checklist and job-description keyword matching.
- Node.js ≥ 18.18
- A modern browser
That's it. No database, no Docker, no background services.
# 1. Install dependencies
npm install
# 2. Start the dev server (http://localhost:5173)
npm run devOpen http://localhost:5173 and start building. CVAurum makes zero external network requests — all 45 fonts are bundled with the app — so it works fully offline from the very first load and never contacts a third-party server.
| Command | What it does |
|---|---|
npm install |
Install dependencies |
npm run dev |
Start the Vite dev server on http://localhost:5173 |
npm run build |
Typecheck + production build to dist/ |
npm run preview |
Preview the production build locally |
npm run typecheck |
tsc --noEmit |
npm run format |
Run Prettier |
Choose from 38 templates and switch between them at any time — your content stays put while the design changes. ATS-safe templates are marked with a shield so you can pick a layout that parses cleanly through applicant tracking systems. Fine-tune fonts, colors, spacing, margins, and page size to make any template your own.
The ATS engine is fully deterministic — it runs instantly, in your browser, with no LLM and no network call. It checks for the things real applicant tracking systems care about: contact details, a summary, quantified and action-verb-driven bullets, appropriate length, an ATS-safe layout, and standard section headings — then rolls everything into an overall ATS score.
Want to target a specific role? Paste the job description into the tailoring panel and CVAurum highlights matched vs. missing keywords and gives you a live match score so you know exactly what to add.
Bring in an existing PDF résumé — CVAurum parses it into structured, editable sections right in your browser (the file is never uploaded). It detects columns, headings, dated entries, bullets, and contact details deterministically; scanned or image-only PDFs fall back to on-device OCR (a self-hosted Tesseract engine, loaded only when needed). PDF parsing is best-effort, so review the imported fields before you rely on them.
CVAurum also speaks the JSON Resume schema, with CVAurum's visual metadata namespaced under meta.cvaurum. That means you can:
- Import an existing JSON Resume file and keep editing.
- Export your resume as JSON Resume — exports round-trip with the JSON Resume ecosystem, and the
meta.cvaurumnamespace preserves your template, fonts, and layout choices.
Imports are validated with Zod, so bringing in a file is safe and predictable.
CVAurum exports via your browser's native "Save as PDF" on a dedicated print route, producing real selectable text that ATS systems can parse — not a flattened image. The output is pixel-identical to your live preview.
💡 PDF export tip: In the browser's print dialog, set Margins to None (or Default) and enable Background graphics. This ensures your template's colors, accents, and spacing render exactly as they appear in the preview.
Privacy isn't a feature bolted on — it's the architecture.
- No server. There's no backend to send your data to.
- No account, no login. Just open the app and start.
- No analytics, no tracking, no cookies.
- Zero external requests. Fonts are bundled, so the app contacts no third-party server at all — not even a font CDN. Nothing about you (not even your IP) is exposed to anyone.
- All resume data is stored locally in your browser's IndexedDB (via
idb-keyval). - Clearing your site data deletes it — you are always in full control.
Your resume data never leaves your browser unless you explicitly export it (as a PDF or a JSON file) or import a file you picked.
Everything is client-side:
| Concern | Library |
|---|---|
| UI framework | React 18 + Vite + TypeScript |
| Styling / theming | Tailwind CSS v3 (design tokens, dark mode) |
| State | Zustand + zundo (undo/redo) |
| Drag & drop | dnd-kit |
| Animation | Framer Motion |
| Rich text | TipTap |
| Validation / safe import | Zod |
| Local persistence | idb-keyval (IndexedDB) |
| Word export | docx (in-browser .docx generation) |
| Offline / installable | vite-plugin-pwa (Workbox service worker) |
| Icons | lucide-react |
| Data contract | JSON Resume schema + CVAurum metadata under meta.cvaurum |
src/
├── types/ JSON Resume schema + metadata (Zod)
├── data/ fonts registry, sample resume, defaults
├── store/ Zustand stores (resume w/ undo-redo, app/settings, editor UI)
├── lib/ ats.ts (ATS engine), io.ts (import/export),
│ pdf.ts (print), storage.ts (IndexedDB), sections.ts, utils
├── templates/ rendering engine (_shared/Artboard + section renderers),
│ registry.ts (template configs), templates.css (per-template styling),
│ TemplateRenderer
├── components/ editor/ (panels, field editors, dnd), preview/, ui/
├── routes/ Dashboard, EditorRoute, PrintPage, Tracker (job board)
└── styles/ artboard.css (resume base styles), print.css
Planned and under consideration:
- More templates (ongoing)
- Sharper PDF import — better reading order for dense two-column layouts, and a confidence/review pass on imported fields (planned)
✅ Shipped: local PDF résumé import (text + on-device OCR), Word (.docx) export, 38 templates, full offline PWA.
Have an idea? Open an issue and let's talk.
Contributions are welcome and appreciated! Whether it's a new template, a bug fix, docs, or a feature from the roadmap, we'd love your help.
- Browse the open issues to find something to work on.
- Run
npm run typecheckandnpm run buildbefore opening a PR. - See
CONTRIBUTING.mdfor full guidelines, anddocs/TEMPLATES.mdto add a template (the easiest way to contribute).
If you build something cool with CVAurum, tell us about it!
CVAurum is released under the MIT License. See LICENSE for details.
- JSON Resume — for the open schema that makes CVAurum's data portable and interoperable.
- The open-source community behind React, Vite, Tailwind, Zustand, dnd-kit, TipTap, and the many libraries that make CVAurum possible.
If CVAurum helps you land an interview, consider giving the repo a ⭐ — it really helps.
Built with care, for everyone job hunting. · Report an issue · Star the repo