Skip to content
/ cvgen Public

💼 CVGen is an offline-ready resume builder powered by React, Fastify, and shared Zod schemas. Group skills, manage ATS tags, and export polished resumes to PDF, TXT, or JSON without relying on external services.

License

Notifications You must be signed in to change notification settings

manwwe/cvgen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CVGen

TypeScript React Vite Tailwind CSS Fastify Node.js Vitest Puppeteer Zod Docker

Personal resume generator with a Vite + React frontend and a Fastify backend, bundled through Docker Compose. Export finished profiles to PDF, TXT, or JSON, and run everything offline once dependencies and fonts are installed.

cvgen preview

Table of Contents

Requirements

  • Node.js 20+
  • npm 9+
  • Docker & Docker Compose (optional for deployment)

Local Installation

npm install
npm run setup:fonts -w backend

setup:fonts syncs the required font files (currently Roboto Mono for the UI and exports) into frontend/src/assets/fonts and backend/assets/fonts, ensuring offline typography.

Development

Use two terminals:

npm run dev -w backend
npm run dev -w frontend -- --host

The frontend expects the backend at http://localhost:4000/api and you can override it with VITE_API_URL.

Testing

npm test

This runs the backend Vitest suite with coverage (kept above 30% around Zod validation and PDF/TXT exports).

Docker Compose

docker compose up --build
  • Frontend: http://localhost:5173
  • Backend: http://localhost:4000
  • Profiles persist in the shared profiles_data volume

Editing Workflow

  1. Create one or more profiles ("New profile" button).
  2. Edit meta, contact, and every section from the central panel.
  3. Preview the PDF styling live in the right-hand panel.
  4. Tweak Profile Settings (target role + ATS tags) directly under the contact card.
  5. Organise skills into labeled groups (up to 13 items per group) and keep certifications within the 13-entry limit.
  6. Export PDF/TXT/JSON or import profiles from JSON files.

Import / Export Details

  • Importing profiles lets users omit every id; the backend generates UUIDs for profile sections, normalises legacy skill arrays, and validates everything through Zod. Validation problems return explicit error messages.
  • JSON exports strip all id fields so the file can be re-imported without conflicts, while the persisted storage keeps its identifiers intact.
  • PDF/TXT exports share the formatting defaults: Calibri-first font stack, 2 cm page margins, 16–18 pt name, 13–14 pt section headers, 11 pt body copy, and 10–11 pt metadata.

Contributing

  1. Fork the repository and create a branch with a conventional commit-style name (e.g. feat/frontend-skills-groups).
  2. Run npm install followed by npm run setup:fonts -w backend if you have not already synced fonts.
  3. Implement changes while keeping ESLint/Prettier defaults and the shared schema expectations.
  4. Validate with npm test (or package-scoped scripts) and, where relevant, npm run build -w frontend / npm run build -w backend.
  5. Open a PR summarising the impact, screenshots for UI updates, and any manual verification steps.

Offline Behaviour

  • No external network calls at runtime: Roboto Mono fonts are shipped locally by the backend.
  • Puppeteer renders the PDF inside the backend service; ensure Chromium downloads during the initial npm install.
  • Imported profiles are stored in backend/data/profiles.json (or in the Docker volume) so they remain available offline.

About

💼 CVGen is an offline-ready resume builder powered by React, Fastify, and shared Zod schemas. Group skills, manage ATS tags, and export polished resumes to PDF, TXT, or JSON without relying on external services.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published