Job Application Pipeline
Applications that sound like me, not a template
The Problem
My background crosses neuroscience, fintech, and ML engineering. The same experience needs completely different framing depending on the role. Tools that swap in a company name and call it personalization don't work when the whole narrative has to shift.
The Approach
I automated my own applications — but built in three points where a human (me) has to actually think.
Underneath that is a pretty strict system. Existing notes, cover letters, CV variants, and routing logic get pulled into a runtime knowledge base. Jobs can enter through search or manual intake. The posting is extracted into structured fields before any analysis or generation step sees it.
- Search and scoring: Scrapes job boards, scores across 6 dimensions, recommends a CV variant. I pick which ones to pursue. The pipeline won't proceed until I do.
- Interview before generation: A structured interview — why this company, which experiences are relevant, what's the honest angle. Generation is blocked at code level until the interview is finished.
- Voice-matched generation: Few-shot anchoring from manually written cover letters, plus an anti-pattern blocklist ("passionate about", "leverage", the usual). Every claim has to cite a specific experience.
State tracked in SQLite: new → scored → analyzed → interview_done → generated. You can't skip a single step.
What Shipped
28 / 28 v1 requirements built for the single-application workflow.
- Multi-board search plus manual intake by URL, raw text, or LinkedIn email parse.
- MD5 deduplication, six-dimension scoring, tiering, and CV-mode routing.
- Structured analysis briefs before interview, instead of dumping raw job posts straight into prompts.
- A single editable
application.mdpackage with source citations for generated claims.
The Outcome
The interview step is what keeps it from being bulk-apply with extra steps. Structured questions first — why this company, which of my experiences actually map to it, what the honest framing is — so by the time anything gets generated, the draft has deep context I thought about, enabling me to put out a quality application.
What I'd change: the scoring weights are tuned by gut feeling right now. A feedback loop that adjusts weights based on which scored jobs I actually ended up pursuing would make the filter learn my preferences over time instead of just reflecting my initial guesses.