- Python 40.1%
- HTML 20%
- CSS 16.7%
- Typst 12.8%
- Dockerfile 10.4%
|
|
||
|---|---|---|
| static | ||
| templates | ||
| typst | ||
| .dockerignore | ||
| .gitignore | ||
| app.py | ||
| cv-flask.service | ||
| cv.yaml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| MAINTAINING.md | ||
| README.md | ||
| requirements.txt | ||
CV — tailored per company
A small Flask app that serves your CV as HTML, JSON, and PDF, with optional per-company tailoring (highlighted skills and experience bullets, plus an overridable summary).
Run it
The simplest way is Docker Compose:
docker compose up -d
Then open http://localhost:8000. Stop with docker compose down.
First run builds the image (downloads Python and the Typst binary). Subsequent starts are instant.
Endpoints
| URL | What you get |
|---|---|
/ |
Generic HTML CV |
/<slug> |
HTML CV tailored for a company |
/cv.pdf |
Generic PDF CV |
/<slug>.pdf |
Tailored PDF CV |
/cv.json |
Generic CV as JSON (no company info, no tags) |
Unknown company slugs return 404. The list of valid slugs is shown on the home
page and lives in cv.yaml.
Editing your CV
Everything you'll touch is in cv.yaml. Changes are picked up on the next
request — no restart needed.
Personal info
personal:
name: Jane Developer
title: Full-Stack Software Engineer
email: jane@example.com
location: Berlin, Germany
about: One paragraph that describes you in general.
Skills (with tags)
Tags are arbitrary labels you invent (backend, frontend, design, ...).
They drive per-company highlighting.
skills:
- name: HTTP / REST APIs
tags: [backend, http, platform]
- name: CSS / Design Systems
tags: [frontend, design]
Experience (bullets are tagged too)
experience:
- role: Senior Engineer
company: Wayne Enterprises
period: 2021 – present
bullets:
- text: Designed an HTTP API gateway handling 5k req/s.
tags: [backend, http, scale]
- text: Mentored four engineers across teams.
tags: [leadership]
Education
education:
- degree: B.Sc. Computer Science
school: TU Berlin
period: 2013 – 2016
Companies (the tailoring rules)
Each entry is reachable at /<slug> and /<slug>.pdf.
companies:
acme:
name: Acme Corp
pitch: Backend / platform role — emphasizing HTTP, Go, and Kubernetes.
highlight_tags: [backend, http, platform, scale]
summary: >- # optional; overrides personal.about
Backend engineer with a track record of designing high-throughput
HTTP services and operating them on Kubernetes.
A skill or bullet is highlighted when its tags overlap with the company's
highlight_tags. If summary is omitted, the generic personal.about is
used.
Adding a new company
Append to companies: in cv.yaml:
newco:
name: NewCo
pitch: Platform engineering role.
highlight_tags: [platform, devops, scale]
Visit /newco and /newco.pdf. That's it.
Layout & PDF look
- HTML styling:
static/cv.css - HTML structure:
templates/cv.html - PDF template (Typst, based on
modern-cv):typst/cv.typ
All three are bind-mounted into the container in development, so edits show up immediately.
Notes
- Uses Flask's built-in dev server. Fine for personal use; not intended for high-traffic public hosting.
- PDFs are rendered with Typst (
modern-cvtemplate). - The
/cv.jsonendpoint is intentionally generic: no company data, no tags.