Selected work · 05
Application Optimizer
A command-line pipeline that scores job fit, tailors a LaTeX CV towards a posting's keywords, and writes a matching cover letter, delivered as two finished PDFs.
Highlights
What shipped
- Built a command-line pipeline that turns a job description and a LaTeX master CV into a tailored CV and cover letter as compiled PDFs.
- Had a model analyse each posting as structured JSON: seniority, required and preferred keywords, a fit rating and a match score.
- Measured keyword coverage and density in code, and re-tailored the CV when required keywords were underrepresented, with a warning for keyword stuffing.
- Added a strict-fit mode that stops before writing anything when a role is a stretch or a mismatch.
- Became the first version of the idea behind Job Hunt, which replaced its prompt-only honesty rules with checks in code.
The story
Behind the build
Overview
Applicant tracking systems screen many applications before a person reads them, mostly by matching the CV against the posting’s keywords. Tailoring a CV by hand for every application is slow, and doing it carelessly either misses the keywords or overstates experience. Application Optimizer automates the tailoring while trying to stay honest about fit. It is a single Python script: put the posting in a text file, keep the master CV in LaTeX, run one command, and get a folder with exactly two PDFs.
How the pipeline works
The first step is an analysis call. The model reads the posting and the CV and returns JSON with the role’s seniority, the years of experience it asks for, the required and preferred keywords, a qualification rating from strong match to mismatch, a match score and an optional warning. In strict-fit mode, a stretch or mismatch rating ends the run before any document is written.
Coverage is then measured in code, not by the model: the script checks which of the posting’s keywords already appear in the CV and warns when required coverage is low enough to risk being screened out. The tailoring call receives the missing keywords with an instruction to include them only where the CV supports them. It may reorder bullets by relevance and must keep the LaTeX structure intact, never invent experience and never inflate years.
After tailoring, the script counts how often each required keyword now appears. If any appears too rarely, it re-tailors with just those keywords, for a bounded number of rounds, and it warns when a keyword appears so often that it looks like stuffing.
The cover letter is written as plain text with a word limit and rules against generic praise and exaggeration. For a senior role and a junior candidate, it acknowledges the growth stage instead of pretending otherwise. A filter then strips stock phrases such as “passionate about” or “cutting-edge”, the text is escaped for LaTeX, wrapped in a letter template and compiled. Each application gets its own folder named after the company, and every intermediate file is deleted, so only the two PDFs remain.
What came next
The optimizer’s honesty rules live entirely in its prompts. The script measures keyword counts, but nothing checks whether a tailored bullet still matches what the master CV says. Job Hunt was built on exactly that gap: it requires CV achievements to be copied verbatim from the original, has a second model audit every claim, and stops rather than publishing a draft that fails. The optimizer is where the workflow started, and Job Hunt is where its main weakness was fixed.
Keep exploring
More projects
Cross-Lingual RAG Evaluation
A controlled study of how much retrieval-augmented generation degrades when questions and documents are in different languages, and which fix closes the gap.
qado.ai IDP: RAG and AI Agents for Procurement
My interdisciplinary project at the AI startup qado.ai: a modular RAG pipeline over contract data, a benchmark for its retrieval quality, and prototype agents for strategic purchasing.
Blog Studio
A web app that turns SEO keywords into source-grounded B2B blog posts in English and German, with a human review step at every stage.
Job Hunt
A local job-search dashboard that writes tailored CVs, cover letters and application emails, and refuses to claim anything the applicant's own CV does not support.
Haushalt — Personal Finance Tracker
A local budgeting app that replaced a set of spreadsheets, with linked money pots, automatic capital-gains tax handling and a one-click desktop launcher.
Legacy Data Migration Platform
A relational data platform consolidating historically grown legacy records into a clean target structure, with a Dash front end and REST API for exploration.
Machine Learning Pipeline
A supervised and unsupervised modelling pipeline in Python, covering feature engineering, hyperparameter tuning, and cross-validated evaluation.
In design
Automated Trading System
The design for an automated swing-trading system on Interactive Brokers, built around separate processes, shared backtest and live code, and safety rules that must exist before any real order.
Questions?