Skip to content

Esysc/resume-as-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

40 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

resume as Code ✨

Infrastructure-as-Code for your resume. Single YAML source of truth, automatic multi-format generation, version-controlled career history.

Build Status GitHub Pages License Python Node.js

Screenshot

🎯 Why Resume as Code?

Traditional resume builders force you into templates and web UIs. CV as Code treats your resume like infrastructure:

  • Single Source of Truth β€” Edit YAML once, generate everywhere
  • Version Control β€” Git history of your career evolution
  • Multi-Language β€” Single data, multiple languages (EN/FR/IT)
  • Automation β€” GitHub Actions auto-generates on every commit
  • Privacy β€” Code stays private, CV is public on GitHub Pages
  • Modern Stack β€” Python backend + React frontend
  • Multi-Format β€” HTML / JSON / PDF from same source
  • Privacy Controls β€” Sensitive info (email/phone) hidden in web interface

The Philosophy

Your CV Data (YAML)
        ↓
Python Generators (validate, transform)
        ↓
Multiple Outputs (HTML, JSON, PDF)
        ↓
GitHub Pages (public) + Git History (version control)

πŸš€ Quick Start

1. Fork or Clone

git clone https://github.com/YOUR_USERNAME/cv-as-code.git
cd cv-as-code

2. Install Dependencies

# Backend
pip install -r backend/requirements.txt

# Frontend
cd web
npm install
cd ..

3. Customize Your resume

Edit cv-data/cv_en.yml:

personal:
  name: Your Name
  email: your@email.com
  phone: "+1-234-567-8900"
  location: City, Country
  birth_date: 1990-01-01

summary: "Your professional summary..."

experience:
  - id: exp_1
    company: Your Company
    title: Your Title
    period: 2020 - Present
    location: City
    technologies:
      - Python
      - Kubernetes
    description: "Your achievements..."

See CV_SCHEMA.md for complete documentation.

4. Generate Outputs

python backend/generate.py

Generates:

  • dist/index.html β€” Static HTML
  • dist/cv.json β€” JSON API
  • dist/cv.pdf β€” PDF export

5. Preview Locally

# Start dev server (port 3000)
cd web && npm run dev

6. Deploy

Push to GitHub and enable GitHub Pages:

git add .
git commit -m "Update CV"
git push origin main

GitHub Actions automatically:

  1. Generates HTML/JSON/PDF
  2. Builds React app
  3. Deploys to GitHub Pages

Your resume is now live at: https://YOUR_USERNAME.github.io/resume-as-code

πŸ“š Features

βœ… Current (Stable)

  • Multi-language support (EN/FR/IT) with externalized translations
  • Dynamic language selector
  • Dark mode toggle
  • Version control (Git history)
  • HTML/JSON/PDF exports
  • Responsive design
  • GitHub Pages deployment
  • CI/CD automation
  • Privacy controls (sensitive info hidden in web interface)
  • Complete CV sections: Personal, Summary, Experience, Education, Skills, Projects, Certifications, Languages

🚧 Planned (Roadmap)

  • Resume PDF parser (local CLI)
  • Multiple templates
  • Skills proficiency levels
  • Certifications with verification
  • Timeline visualizations
  • SEO optimization
  • Theme customization UI

See ROADMAP.md for details.

οΏ½ Multi-Language Translation

The project uses English as the base language. Translation files (French, Italian) only need to contain fields that require translation β€” all other data is automatically inherited from cv_en.yml.

How It Works

cv_en.yml (base)          cv_fr.yml (overrides)
─────────────────         ────────────────────
personal:                 # Not needed - inherited
  name: John Doe
  email: john@example.com
  company: Tech Corp      # Not needed - inherited

summary: "Full-stack      summary: "IngΓ©nieur
  engineer..."              full-stack..."

experience:               experience:
  - id: exp_1               - id: exp_1
    company: Tech Corp        title: "IngΓ©nieur Senior"
    title: "Senior Eng"       description: "DirigΓ©..."
    period: 2021-Present
    description: "Led..."

What to Include in Translation Files

Include (translated) Exclude (inherited from English)
summary personal (name, email, etc.)
experience[].title experience[].company
experience[].description experience[].period
education[].degree experience[].technologies
education[].description education[].school
skills[].category education[].graduation_year
projects[].title projects[].url
projects[].description projects[].technologies
languages[].name All URLs, dates, company names
languages[].level

Matching by ID

List items (experience, education, projects) are matched by their id field:

# cv_en.yml
experience:
  - id: exp_1
    company: Tech Corp
    title: Senior Engineer

# cv_fr.yml - only override translated fields
experience:
  - id: exp_1
    title: IngΓ©nieur Senior
    # company inherited from English

πŸ—οΈ Architecture

cv-as-code/
β”œβ”€β”€ cv-data/                    # Your CV data
β”‚   β”œβ”€β”€ cv_en.yml              # English (base - complete data)
β”‚   β”œβ”€β”€ cv_fr.yml              # French (translations only)
β”‚   β”œβ”€β”€ cv_it.yml              # Italian (translations only)
β”‚   └── ui_translations.yml    # UI text translations
β”‚
β”œβ”€β”€ backend/                    # Python infrastructure
β”‚   β”œβ”€β”€ generate.py            # Main entry point
β”‚   β”œβ”€β”€ parsers/
β”‚   β”‚   β”œβ”€β”€ yaml_parser.py     # Parse YAML + merge translations
β”‚   β”‚   └── schema.py          # Validate schema
β”‚   β”œβ”€β”€ generators/
β”‚   β”‚   β”œβ”€β”€ html_generator.py  # β†’ HTML
β”‚   β”‚   β”œβ”€β”€ json_generator.py  # β†’ JSON
β”‚   β”‚   └── pdf_generator.py   # β†’ PDF
β”‚   └── templates/
β”‚       └── cv.html            # Jinja2 template
β”‚
β”œβ”€β”€ web/                        # React frontend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ App.jsx
β”‚   β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ styles/
β”‚   β”‚   └── utils/
β”‚   β”œβ”€β”€ public/
β”‚   β”‚   β”œβ”€β”€ cv.json            # Generated
β”‚   β”‚   └── cv.pdf             # Generated
β”‚   └── vite.config.js
β”‚
└── .github/workflows/
    └── deploy.yml             # CI/CD pipeline

πŸ› οΈ Tech Stack

Layer Technology Why
Data YAML Human-readable, version-controllable
Backend Python 3.9+ Parsing, validation, generation
Validation Pydantic Type safety, schema enforcement
Templates Jinja2 Flexible HTML generation
PDF WeasyPrint Pure Python, no browser needed
Frontend React 19 Modern, component-based
Styling Tailwind CSS Utility-first, customizable
Build Vite Fast, modern bundler
Deploy GitHub Pages Free, automated

πŸ“– Documentation

πŸ”„ Workflow Examples

Example 1: Update CV and Auto-Deploy

# Edit cv_en.yml
nano cv-data/cv_en.yml

# Commit and push
git add cv-data/cv_en.yml
git commit -m "Update: Added new project"
git push

# βœ… GitHub Actions auto-generates outputs
# βœ… CV is live in ~30 seconds

Example 2: Create Role-Specific PDF (Local)

# For a data engineering position
git checkout -b feature/cv-dataeng

# Edit cv_en.yml emphasizing data/analytics skills
nano cv-data/cv_en.yml

# Generate PDF locally
python backend/generate.py

# Send dist/cv.pdf to recruiter
# Don't push this branchβ€”it's local only
git checkout main

Example 3: Multi-Language Support

Public website automatically shows language selector:

  • English (default)
  • FranΓ§ais
  • Italiano

Users can switch languages on the fly.

🎨 Customization

Change Colors

Edit web/src/styles/App.css:

:root {
  --primary: #2563eb;    /* Primary color */
  --secondary: #64748b;  /* Secondary color */
  --accent: #f97316;     /* Accent color */
}

Change Template

Edit backend/templates/cv.html to modify layout, typography, etc.

Add Sections

Edit cv-data/cv_en.yml and backend/templates/cv.html in parallel.

πŸ“¦ Deployment

GitHub Pages (Recommended)

  1. Push code to GitHub
  2. Enable GitHub Pages in repo settings
  3. GitHub Actions handles the rest

Your CV is live at: https://USERNAME.github.io/cv-as-code

Other Platforms

The dist/ folder is fully staticβ€”deploy to:

  • Netlify
  • Vercel
  • Firebase Hosting
  • AWS S3 + CloudFront
  • Any static host

πŸ” Privacy

  • Private Repo β€” Source code stays private
  • Public CV β€” Resume is publicly accessible via GitHub Pages
  • No Backend β€” No server to compromise (static site)
  • Git History β€” Only you control your data

πŸ› οΈ Development

Prerequisites

  • Python 3.9+
  • Node.js 18+
  • Git
  • VS Code (recommended)

VS Code Setup

The project includes VS Code workspace configuration:

  1. Automatic Environment: VS Code will automatically use the virtual environment
  2. Recommended Extensions: Install suggested extensions for Python, React, and YAML
  3. Debug Configurations: Pre-configured launch options for running and debugging
  4. Tasks: Quick access to common development commands via Ctrl+Shift+P β†’ "Tasks: Run Task"

Setup

# Clone repository
git clone https://github.com/YOUR_USERNAME/cv-as-code.git
cd cv-as-code

# Install dependencies
make install

# Generate CV outputs
make generate

# Run tests
make test

# Start development server
make dev

Available Commands

make help          # Show all available commands
make install       # Install all dependencies
make generate      # Generate CV outputs (HTML/JSON/PDF)
make test          # Run test suite
make dev           # Start development server
make build         # Build for production
make clean         # Remove generated files
make lint          # Lint code

Testing

The project includes automated tests for:

  • PDF generation with professional styling
  • Multi-language support
  • Schema validation
  • Output format verification
# Run all tests
make test

# Run specific test file
pytest tests/test_pdf_generation.py -v

Pre-commit Hooks

Pre-commit hooks are configured to:

  • Validate CV YAML schema
  • Format Python code (black, isort, flake8)
  • Format JavaScript/React code (prettier)
  • Lint Markdown files
  • Check for TODO/FIXME comments
  • Auto-generate CV files on changes
# Install pre-commit hooks
pre-commit install

# Run hooks manually
pre-commit run --all-files

CI/CD

GitHub Actions automatically:

  • Runs pre-commit checks on pull requests
  • Executes test suite
  • Builds and deploys on main branch pushes
  • Validates CV data schema
  • Ensures code quality standards

🀝 Contributing

Contributions welcome! See CONTRIBUTING.md for guidelines.

Areas for Contribution

  • 🎨 Templates β€” Minimal, sidebar, creative layouts
  • 🌍 Translations β€” Spanish, German, Chinese, Japanese
  • πŸ› Bug fixes β€” Quality improvements
  • πŸ“ Documentation β€” Guides, examples, tutorials
  • ✨ Features β€” From ROADMAP.md

πŸ“Š Project Status

  • Version: 1.0.0
  • Status: Production-ready, actively maintained
  • License: MIT
  • Last Updated: January 2026

πŸ“‹ License

MIT β€” See LICENSE for details.

Free to use, modify, and distribute.

πŸ™Œ Acknowledgments

Inspired by:

  • Infrastructure-as-Code principles
  • Version control best practices
  • Modern DevOps workflows

πŸ’¬ Questions?


Made with ❀️ for developers who think infrastructure-first.

⭐ If you find this useful, please star the repo!

About

Single YAML source of truth with automated multi-format resume generation and version-controlled career history.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors