My work history, automatically turned into professional documents.
Dossier renders my resume from a YAML source of truth and publishes it via a Cloudflare Worker.
flowchart LR
classDef source fill:#fde68a,stroke:#b45309,stroke-width:2px,color:#1f2937
classDef stage fill:#bae6fd,stroke:#0369a1,stroke-width:2px,color:#0c4a6e
classDef artifact fill:#bbf7d0,stroke:#15803d,stroke-width:2px,color:#14532d
classDef deploy fill:#fbcfe8,stroke:#be185d,stroke-width:2px,color:#831843
classDef edge fill:#ddd6fe,stroke:#6d28d9,stroke-width:2px,color:#3b0764
subgraph S[sources/resumes/]
TECH[SDE2_CV_v2.yaml<br/>tech]:::source
IMPACT[SDE2_CV.yaml<br/>impact]:::source
end
R([render]):::stage
RA([render-anon]):::stage
PP([publish-pdf]):::stage
OG([og-image]):::stage
DW([deploy-worker]):::stage
ANON[SDE2_CV.anon.<br/>generated.yaml]:::source
PDFS[artifacts/resumes/<br/>PDF + PNG + Typst]:::artifact
PUB[deployments/cf-workers/<br/>public/*.pdf]:::artifact
OGIMG[public/og-image.png]:::artifact
CF{{Cloudflare Worker<br/>worker.js + pdf.js}}:::deploy
WEB((resume.vibhakar.dev<br/>resume.vibhakar.in)):::edge
TECH --> R
IMPACT --> R
IMPACT --> RA --> ANON --> PDFS
R --> PDFS
PDFS --> PP --> PUB
PDFS --> OG --> OGIMG
PUB --> DW
OGIMG --> DW
DW --> CF --> WEB
- Render —
renderruns RenderCV on both YAML variants (tech + impact);render-anonproduces a redacted variant for public feedback. - Stage assets —
publish-pdfcopies the PDFs into the Worker'spublic/directory;og-imagebuilds a 1200×630 social preview from the rendered PNG. - Deploy —
deploy-workershipspublic/viawranglerto a Cloudflare Worker that serves the PDF directly (with SEO + OG tags) and a vendored pdf.js viewer for browsers.
Concise and ATS-friendly, rendered from sources/resumes/SDE2_CV.yaml.
A redacted version (header + socials stripped) for public feedback, written to SDE2_CV.anon.generated.yaml.
- Document generation — RenderCV for the resume
- Hosting — Cloudflare Worker serving the PDF and pdf.js viewer
- Web viewer — Vendored pdf.js for in-browser PDF display
The pipeline lives in dossier.py. Run everything with uv run dossier.py, or pick a subset with uv run dossier.py <stage> [<stage> ...]. List stages with uv run dossier.py --list.
| Stage | What it does |
|---|---|
render |
Renders both resume variants (tech + impact) to PDF + PNG via RenderCV, into artifacts/resumes/. |
publish-pdf |
Copies both rendered resume PDFs into deployments/cf-workers/public/ for the Worker to serve. |
render-anon |
Writes SDE2_CV.anon.generated.yaml with header + socials redacted, then renders it. |
og-image |
Builds a 1200×630 og-image.png from the RenderCV PNG output. |
deploy-worker |
Deploys the Cloudflare Worker (publishes public/ assets to resume.vibhakar.{dev,in}). |
dossier/
├── dossier.py # Pipeline entrypoint
├── pyproject.toml
├── uv.lock
├── sources/
│ └── resumes/
│ ├── SDE2_CV.yaml # Source of truth for the resume
│ ├── SDE2_CV.anon.generated.yaml # Written by `render-anon`
│ └── fonts/
├── artifacts/
│ └── resumes/ # RenderCV output (PDF, PNG, Typst)
├── deployments/
│ ├── cf-workers/
│ │ ├── worker.js # Cloudflare Worker (SEO, OG tags, viewer routing)
│ │ ├── wrangler.toml
│ │ └── public/
│ │ ├── vibhakar-solanki-sde2-resume.pdf # Published by `publish-pdf`
│ │ ├── og-image.png # Built by `og-image`
│ │ └── pdfjs/ # Vendored pdf.js viewer
│ └── scripts/
│ └── build_og_image.py
└── static/
└── artifact_pipeline_diagram.svg
git clone https://github.com/your-username/dossier
cd dossier
uv syncRun the full build pipeline:
uv run dossier.pyRun a subset of stages (e.g. re-render and publish after a YAML edit):
uv run dossier.py render publish-pdfList available stages:
uv run dossier.py --listFeatures described in earlier drafts but not yet implemented:
- Git collector — Walk every repository in
/projects, pulling commit messages and diffs to feed downstream generators. - Linear collector — Fetch issues I worked on via the Linear API for task/cycle/project context.
- Context synthesis — Combine raw git + Linear data into structured context (what shipped, problems solved, collaborators).
- Brag document generator — 5–10 page self-review covering goals, projects, collaboration, mentorship, design/docs, company building, learning, and outside-of-work highlights. Intended to feed the resume/CV generators as narrative context.
- CV (multi-page) — Full career record with detailed project descriptions, technologies used, and measurable outcomes. Currently only the 1-page resume is generated.
- GitHub Actions CI/CD — Scheduled (e.g. weekly) and push-triggered workflow that runs collectors + generators and commits PDFs to a
gh-pagesbranch. - GitHub Pages hosting — Serve the pdf.js viewer from GitHub Pages pointing at the latest PDFs. (Currently hosted via Cloudflare Worker instead.)
MIT