A modern, modular CV generation system that creates professional HTML and PDF CVs from structured Markdown and YAML content. Features a VS Code dark theme aesthetic with print-optimized styling.
cv/
├── build_html.sh # Script to generate HTML CV from content files
├── Makefile # Build targets for HTML, PDF, Docker image, and cleanup
├── README.md # This documentation
├── content/ # CV content files
│ ├── meta.yml # Basic metadata (title, avatar path)
│ ├── contacts.yml # Personal information (name, role, location, contacts)
│ ├── skills.yml # Skills organized in categories
│ ├── summary.md # Professional summary
│ ├── achievements.md # Key achievements and highlights
│ ├── responsibilities.md # Professional responsibilities and duties
│ ├── strengths.md # Core professional strengths and capabilities
│ ├── experience.md # Work experience history
│ ├── education.md # Education background
│ ├── languages.md # Language proficiencies
│ └── avatar.webp # Profile picture
├── docker/ # Docker setup for containerized generation
│ ├── Dockerfile # Docker image definition
│ └── scripts/
│ ├── build.sh # Build Docker image
│ └── generate.sh # Generate CV using Docker
├── pdf/ # PDF generation tools
│ └── generate-pdf.js # Node.js script using Puppeteer for PDF creation
└── template/ # HTML template and styling
├── cv.html # Pandoc HTML template
└── style.css # CSS styles (screen + print media queries)
The CV content is organized into modular files for easy maintenance and updates:
meta.yml: Contains basic page metadatatitle: Browser tab titleavatar: Path to profile image
contacts.yml: Personal and contact informationname: Full namerole: Professional titlelocation: City and countryemail,phone: Contact detailsgithub,linkedin: Professional profiles (without https://)
skills.yml: Technical and professional skills organized in categories- Structured as
skill_categorieswithnameanditemsarrays
- Structured as
summary.md: Brief professional summary (plain text)achievements.md: Key accomplishments and highlights (Markdown formatted)responsibilities.md: Key professional responsibilities and duties (Markdown formatted)strengths.md: Core professional strengths and capabilities (Markdown formatted)experience.md: Work experience with job titles, companies, dates, and descriptions (Markdown formatted)education.md: Educational background and qualifications (Markdown formatted)languages.md: Language proficiencies and levels (Markdown formatted)
avatar.webp: Profile picture (WebP format recommended for smaller file size)
-
Pandoc: Required for converting Markdown to HTML
# macOS brew install pandoc # Ubuntu/Debian sudo apt install pandoc # Windows (with Chocolatey) choco install pandoc
-
Node.js (v14+): Required for PDF generation
-
Puppeteer: Install dependencies
npm install puppeteer
- Docker: For containerized PDF generation (includes all dependencies)
./build_html.sh- Generates
dist/cv.htmlwith current date - Optional: Add
--openflag to automatically open in browser
make html# Build Docker image (one-time setup)
make image
# Generate both HTML and PDF
make pdf# First generate HTML
./build_html.sh
# Then generate PDF
node pdf/generate-pdf.js- Web preview: Open
dist/cv.htmlin any modern browser - Print preview: Use browser's print function (Ctrl+P/Cmd+P) for A4 PDF layout
- Direct PDF: Generated files are saved in
dist/directory
This repository includes automated CV generation and release publishing using GitHub Actions.
Method 1: Git Tags (Recommended)
git tag v1.0
git push origin v1.0Method 2: Manual Trigger
- Go to Actions tab in your repository
- Select "Generate CV and Create Release"
- Click "Run workflow"
- Automatic PDF generation using your Docker setup
- GitHub release with downloadable
dzmitry_kalianchuk_cv.pdf - Direct download link:
https://github.com/USER/REPO/releases/latest/download/dzmitry_kalianchuk_cv.pdf
- Pull requests automatically test CV generation
- All pushes to main/master trigger build validation
- Build artifacts available for download from Actions tab## Maintenance Guide
- Personal Information: Edit
content/contacts.yml - Skills: Modify
content/skills.yml(add/remove categories or items) - Professional Summary: Update
content/summary.md - Achievements: Update
content/achievements.md - Responsibilities: Edit
content/responsibilities.md - Strengths: Modify
content/strengths.md - Experience: Edit
content/experience.mdwith new positions or updates - Education: Modify
content/education.md - Languages: Edit
content/languages.md - Profile Picture: Replace
content/avatar.webp
- Keep content files focused on their specific sections
- Use Markdown formatting for rich text in experience, education, and achievements
- Maintain consistent date formats (e.g., "2020 - Present" or "2018 - 2022")
- Update the generation date automatically via build scripts
- HTML Generation: Uses Pandoc with custom template and variable injection
- PDF Generation: Leverages Puppeteer for headless Chrome rendering with background preservation
- Docker: Provides consistent environment across different systems
- Makefile: Offers convenient targets for common operations
- Runtime: Pandoc for HTML, Node.js/Puppeteer for PDF
- Development: Docker for containerized builds
- Assets: WebP images for optimized file sizes
- HTML generation fails: Ensure Pandoc is installed and all content files exist
- PDF generation fails: Check Node.js version and Puppeteer installation
- Docker issues: Verify Docker is running and image is built
- Styling issues: Check browser compatibility and print CSS
- Commit content changes separately from build artifacts
- The
dist/folder is typically gitignored (generated files) - Keep template and build scripts under version control
- Modular Content: Separate files for easy maintenance and updates
- VS Code Theme: Dark theme for screen, professional for print
- Responsive Design: Works on desktop and mobile devices
- Print Optimized: A4 format with proper margins and print-friendly styling
- Automated Builds: Scripts and Makefile for consistent generation
- Docker Support: Containerized PDF generation for reproducibility
- Background Preservation: PDF generation maintains all visual styling
- Semantic HTML: Proper HTML5 structure for accessibility