Treating my professional identity like a production-grade software system
As an AI & Data Engineer, I spend my days building automated pipelines and scalable architectures. Yet my CVโthe single most important document of my careerโwas still a static, manually formatted file. Every update meant wrestling with Word margins, exporting PDFs, and manually re-uploading to my portfolio.
No more.
This project applies DevOps principles to my professional identity. My CV is now "source code" that gets compiled, versioned, and automatically deployedโjust like the software systems I build at work.
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ Content โโโโโโถโ Typesetting โโโโโโถโ CI/CD โโโโโโถโ Deployment โ
โ (YAML) โ โ (Typst) โ โ (GitHub โ โ (GitHub โ
โ โ โ โ โ Actions) โ โ Pages) โ
โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ
โ โ โ โ
โผ โผ โผ โผ
Single source Professional Automated on Always-live
of truth formatting every push public URL
- ๐ฆ Content vs. Presentation โ All data lives in structured YAML; design lives in Typst templates
- ๐ Single Source of Truth โ Never update the same information in two places
- ๐ค Automated Pipeline โ Every git push triggers a fresh build
- ๐ Version Control โ Full history of every CV version ever sent
- ๐ Always Live โ Portfolio always serves the latest PDF
| Component | Technology | Purpose |
|---|---|---|
| Data Layer | YAML | Structured storage of all CV content |
| Presentation Layer | Typst | Modern, Rust-based typesetting (faster than LaTeX) |
| Build System | Make / Typst CLI | Local compilation |
| CI/CD | GitHub Actions | Automated build on every push |
| Hosting | GitHub Pages | Permanent, live URL |
| Version Control | Git | Complete history tracking |
- Modular architecture โ Change fonts in one file, content in another
- Perfect formatting โ No mysterious margin shifts between versions
- Instant updates โ CV regenerates in seconds, not minutes
- Git-tracked history โ See exactly what your CV looked like 6 months ago
- QR-code ready โ Share the live link anywhere
- Multiple variants โ Filter YAML data for role-specific versions (AI Eng vs. Data Eng)
- RAG-powered customization โ Feed it a job description, get a tailored CV
- Natural language interface โ Describe the role, get a polished PDF with embedded portfolio links
- Automated cover letters โ Generate matching cover letters from the same data
cv-as-code/
โโโ .github/
โ โโโ workflows/
โ โโโ build.yml # GitHub Actions CI/CD pipeline
โโโ data/
โ โโโ cv.yaml # Single source of truth (all content)
โโโ templates/
โ โโโ main.typ # Main Typst template
โ โโโ header.typ # Header styling
โ โโโ sections.typ # Section layouts
โโโ variants/
โ โโโ ai-engineer.typ # AI-focused variant
โ โโโ data-engineer.typ # Data Eng-focused variant
โโโ scripts/
โ โโโ generate.sh # Local build helper
โโโ output/ # Generated PDFs (gitignored)
โโโ .gitignore
โโโ Makefile # Local build commands
โโโ README.md
โโโ LICENSE
# Install Typst (if you don't have it)
curl -fsSL https://typst.com/install.sh | sh
# Or via package manager
sudo apt install typst # Debian/Ubuntu
brew install typst # macOS# Clone the repository
git clone https://github.com/NeelM47/cv-as-code.git
cd cv-as-code
# Build all variants
make all
# Build specific variant
make ai-engineer
# Watch for changes (auto-rebuild)
make watch
# Clean output directory
make clean- Edit
data/cv.yamlwith your information - Modify templates in
templates/for design changes - Commit and push to trigger automatic rebuild
On every push to main, GitHub Actions automatically:
- Spins up a Ubuntu runner
- Installs Typst
- Compiles all variants from YAML + templates
- Deploys PDFs to GitHub Pages
- Makes available at
https://neelm47.github.io/cv-as-code/ai-engineer.pdf
name: Build and Deploy CV
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Typst
run: |
curl -fsSL https://typst.com/install.sh | sh
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Build CV
run: make all
- name: Upload PDFs
uses: actions/upload-artifact@v3
with:
name: cv-pdfs
path: output/*.pdf
- name: Deploy to Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./output
publish_branch: gh-pages
keep_files: false- AI Engineer CV: https://neelm47.github.io/cv-as-code/ai-engineer.pdf
- Portfolio: https://neelm47.github.io/ Scan this QR code to see the live CV:
[]
- Demonstrates systems thinking โ I don't just "know" CI/CD; I use it to solve real problems
- Shows automation mindset โ Why do manually what a machine can do?
- Proves adaptability โ Quickly learn and apply new tools (Typst)
- Always up-to-date โ No more "is this the latest version?"
- Perfect formatting โ What you see is what you get
- Tech stack transparency โ See exactly what tools I work with
- Start with structure โ Separating content from presentation was the key enabler
- Automate early โ The CI/CD pipeline saved hours of manual work
- Version everything โ Git history has saved me more than once
- Keep it simple โ Typst was easier to learn than LaTeX
- Phase 1: โ Basic CV-as-Code pipeline
- Phase 2: ๐ Multiple variants (AI/Data Eng)
- Phase 3: ๐ง RAG-based job description matching
- Phase 4: ๐ Automated cover letter generation
- Phase 5: ๐ Multi-language support
This is a personal project, but I'm open to ideas! Feel free to:
- Open an issue with suggestions
- Fork and customize for your own CV
- Share how you've adapted the concept
- GitHub: @NeelM47
- Portfolio: [https://neelm47.github.io/]
- LinkedIn: [https://www.linkedin.com/in/neel-more-ai/]
- Email: neelmore007@gmail.com
This project is licensed under the MIT License - see the LICENSE file for details.
Built with automation, version control, and โ