A modern, data-driven curriculum vitae built with Eleventy that generates both a responsive web version and a PDF document.
- Responsive Design: Mobile-friendly layout that adapts to different screen sizes
- Clean UI: Built with Pico CSS framework with custom styling
- Font Awesome Icons: Visual icons for navigation links (contact, GitHub, website, PDF)
- Print-Optimized: Special print styles for generating PDF-friendly output
- HTML Version: Fully responsive web page hosted on Netlify
- PDF Generation: Automatically generates a PDF version using PDFKit during build
- SEO Optimized: Includes meta tags, keywords, and structured data
- JSON Configuration: Main CV data stored in
_data/main.json(personal info, skills, languages, links) - Markdown Job Entries: Each work experience is a separate markdown file in
_jobs/directory - Numbered Sorting: Jobs are automatically sorted by filename prefix (e.g.,
1_company.md,2_company.md) - Frontmatter Support: Each job includes metadata (title, company, location, period, tech stack)
- Collapsible Details: Tech stack for each job is shown in expandable
<details>elements - Comma-Separated Lists: Clean, inline display of technologies
- Dynamic Keywords: Automatically generates SEO keywords from job technologies and skills
- Professional Experience: Chronologically ordered work history
- Technical Skills: Comprehensive list of technical competencies
- Soft Skills: Professional and interpersonal skills
- Languages: Language proficiencies
- Open Source Projects: Links to personal projects
- HTML Minification: Output HTML is automatically minified
- Static Generation: Fast, pre-rendered static site
- Asset Optimization: CSS and assets are optimized for production
- Netlify Integration: Configured for automatic deployment via Netlify
- Build Automation: PDF generation happens automatically during build process
- Version Control: Full Git history for tracking CV updates
.
├── _data/
│ └── main.json # Main CV data (personal info, skills, links)
├── _includes/
│ ├── base.njk # Base HTML template
│ └── index.njk # Main CV content template
├── _jobs/
│ ├── 1_company.md # Job entries (numbered for sorting)
│ ├── 2_company.md
│ └── ...
├── lib/
│ └── pdf-generator.js # PDF generation logic
├── _site/ # Build output directory
├── .eleventy.js # Eleventy configuration
├── bundle.css # Custom styles
├── index.md # Entry point
└── netlify.toml # Netlify deployment config
- Node.js (v14 or higher)
- npm
npm installStart the development server with live reload:
npm run serveThe site will be available at http://localhost:8080
Generate the static site and PDF:
npm run buildOutput will be in the _site/ directory.
npm run format- Format code with Prettiernpm run lint- Run ESLintnpm run lint:fix- Fix ESLint issues automaticallynpm run clean- Remove build output directory
Edit _data/main.json to update:
- Name, role, title
- Skills (tech skills, soft skills, languages)
- Navigation links (contact, GitHub, website)
- Open source projects
-
Create or edit a markdown file in
_jobs/directory -
Use numbered prefix for ordering (e.g.,
11_newjob.md) -
Include frontmatter with:
--- title: Job Title company: Company Name location: City, Country period: 2020 - 2023 tech: - Technology 1 - Technology 2 ---
-
Write job description in markdown below the frontmatter
- Main styles:
bundle.css - Framework: Pico CSS (loaded via CDN)
- Print styles: Included in
bundle.cssfor PDF generation
- Eleventy (11ty): Static site generator
- Nunjucks: Template engine
- Pico CSS: Minimal CSS framework
- PDFKit: PDF generation library
- Font Awesome: Icon library
- html-minifier-terser: HTML minification
ISC