CVgen – Generate Resumes from JSON Using Markdown Templates

3 months ago 10

A local-first tool to generate beautiful, professional CVs from JSON data and HTML templates. Perfect for developers, designers, and professionals who want full control over their CV presentation.

  • 🧠 JSON-based data input - Easy to edit and version control
  • 🖨️ PDF output - High-quality, print-ready CVs using Puppeteer
  • 🔧 Local-first - No cloud dependencies, your data stays private
  • 🎨 Web-based editor - Visual editor with live preview (CV-JSON Web Editor)
  • 📱 CLI tool - Command-line interface for automation
  • 🎯 Role-specific guidance - Skills, verbs, and schema for different roles

Before you begin, ensure you have the following installed:

  • Node.js 18+ - JavaScript runtime for the CLI tool
  • Chrome/Chromium - For PDF generation (optional, falls back to HTML)
  • Modern web browser - For the web-based editor

Follow these steps to create your professional CV:

# Install Node.js dependencies npm install # Make the CLI tool executable chmod +x src/generate.js

2.1. Open JSON Web Editor to customize your information

  1. Visit https://jobpare.github.io/cvgen/ (online editor)
  2. Choose your role from the dropdown (backend/frontend)
  3. Edit your CV data using the form editor or JSON view
  4. See live preview of your CV as you type

CV JSON Editor

  • Click "Download JSON" to save your CV data as a JSON file
  • Save it as my-cv.json in your project directory

3. Pick Template + Format

Available Templates:

  • template-1-handlebars.html - Clean, professional single-column layout

Output Formats:

  • HTML - Web-friendly, can be opened in any browser
  • PDF - Print-ready, professional format (requires Chrome/Chromium)

4. Run CLI Commands to generate your CV

# Generate HTML file (recommended for most users) node src/generate.js generate \ -t docs/cv-templates/template-1-handlebars.html \ -i my-cv.json \ -o output/my-cv.html # Generate PDF file node src/generate.js generate \ -t docs/cv-templates/template-1-handlebars.html \ -i my-cv.json \ -o output/my-cv.pdf # Validate your data before generating node src/generate.js generate \ -t docs/cv-templates/template-1-handlebars.html \ -i my-cv.json \ --validate-only

Your generated CV will be saved in the output/ directory!

Jobpare CV Generator uses a modern web-based approach combining HTML/CSS/JavaScript for the editor and Node.js for document generation. This provides a simpler alternative to traditional LaTeX-based CV solutions.

  • Web Editor: Online editor at jobpare.github.io/cvgen/ with instant live preview
  • JSON Data: Version control friendly, platform-independent format
  • Templates: Handlebars.js for flexible, logic-less templating
  • Generation: HTML output + PDF conversion via Puppeteer
  • Curated Content: Skills and action verbs lists compiled from most-used terms across the web

Comparison with LaTeX Solutions

Feature Jobpare CV Generator Traditional LaTeX
Setup Simple npm install Complex LaTeX distribution
Learning Basic HTML/CSS LaTeX syntax required
Preview Instant browser preview Compile → View cycle
Customization Visual editor + CSS Code-based editing
Version Control Human-readable JSON Mixed text/binary files
Cross-Platform Works everywhere Platform-specific issues
Dependencies Node.js + Chrome Full LaTeX distribution
Output Quality Professional print-ready Excellent typography
  • Simple: No complex toolchain, familiar web technologies
  • Flexible: Easy to customize templates and add new roles
  • Maintainable: Web standards ensure long-term compatibility
  • Fast: Instant preview, efficient generation
jobpare-cv/ ├── src/ │ └── generate.js # 🧠 CLI generator ├── docs/ # 🌐 Web interface source │ ├── index.html # 📄 Web editor (deployed to GitHub Pages) │ ├── js/ │ │ └── editor.js # 🔧 Editor logic │ ├── css/ │ │ └── editor.css # 🎨 Editor styles │ ├── cv-templates/ │ │ └── template-1-handlebars.html # 📄 HTML template │ └── cv-data/ # 🎯 Role-specific guidance │ ├── backend/ │ │ ├── cv-schema.json # 👤 Data structure guide │ │ ├── skills.txt # 🔧 Relevant skills │ │ └── action-verbs.txt # 🚀 Power verbs │ └── frontend/ │ ├── cv-schema.json # 👤 Data structure guide │ ├── skills.txt # 🔧 Relevant skills │ └── action-verbs.txt # 🚀 Power verbs ├── output/ # 📄 Generated CVs ├── package.json # 📦 Node.js dependencies └── README.md # This file
  • Schema: docs/cv-data/backend/cv-schema.json
  • Skills: Programming languages, frameworks, databases, cloud platforms
  • Verbs: Technical achievement and leadership verbs
  • Schema: docs/cv-data/frontend/cv-schema.json
  • Skills: JavaScript frameworks, UI libraries, design tools
  • Verbs: Frontend-specific action verbs

Your CV data should follow this complete JSON structure:

{ "personal_info": { "name": "Your Name", "position": "Your Target Position", "email": "[email protected]", "phone": "+1 (555) 123-4567", "location": "City, State", "linkedin": "linkedin.com/in/yourprofile", "github": "github.com/yourusername", "portfolio": "yourportfolio.com" }, "summary": { "professional_summary": "2-3 sentences about your background, expertise, and career goals" }, "experience": [ { "company": "Company Name", "position": "Job Title", "location": "City, State", "start_date": "MM/YYYY", "end_date": "MM/YYYY or 'Present'", "description": "Brief company description and your role", "achievements": [ "Use action verbs from action-verbs.txt", "Quantify your impact when possible", "Focus on results and outcomes" ] } ], "education": [ { "institution": "University Name", "degree": "Degree Type", "field_of_study": "Field of Study", "graduation_date": "MM/YYYY", "gpa": "GPA (optional)" } ], "skills": { "programming_languages": ["From skills.txt"], "frameworks": ["From skills.txt"], "databases": ["From skills.txt"], "cloud_platforms": ["From skills.txt"], "tools": ["From skills.txt"], "soft_skills": ["Your soft skills"] }, "projects": [ { "name": "Project Name", "description": "Brief project description and your role", "technologies": ["Tech stack used"], "github_url": "github.com/yourusername/project", "live_url": "project-demo.com (optional)" } ], "certifications": [ { "name": "Certification Name", "issuer": "Issuing Organization", "date": "MM/YYYY", "expiry_date": "MM/YYYY or null" } ], "languages": [ { "language": "Language Name", "proficiency": "Native/Fluent/Intermediate/Basic" } ] }
  • File: docs/cv-templates/template-1-handlebars.html
  • Figma Design: View Template 1 Design
  • Style: Clean, professional, single-column layout
  • Features:
    • Responsive design
    • Color-coded sections
    • Skill tags
    • Print-optimized
    • Handlebars templating
# Generate HTML file (recommended for most users) node src/generate.js generate -t docs/cv-templates/template-1-handlebars.html -i my-cv.json -o output/cv.html # Generate PDF file (requires Chrome/Chromium) node src/generate.js generate -t docs/cv-templates/template-1-handlebars.html -i my-cv.json -o output/cv.pdf # Force HTML output even with .pdf extension node src/generate.js generate -t docs/cv-templates/template-1-handlebars.html -i my-cv.json -o output/cv.pdf --html-only # Validate data without generating output node src/generate.js generate -t docs/cv-templates/template-1-handlebars.html -i my-cv.json --validate-only # Help node src/generate.js generate --help
Option Description
-t, --template Path to HTML template file
-i, --input Path to JSON input file
-o, --output Path for output file (PDF or HTML)
--html-only Generate HTML file only (skip PDF generation)
--validate-only Only validate JSON data

This project is licensed under the MIT License - see the LICENSE file for details.


Happy CV building! 🎉

For questions or support, please open an issue on GitHub.

Read Entire Article