Back to Projects

Job Search Pipeline – Local-First Discovery and Scoring

A system that scans roughly 4,900 job postings a day across ~35 public boards, dedupes them into SQLite, scores each one against an editable rubric, and hands back a ranked digest — running entirely on one laptop, with no subscriptions and no auto-submit.

Architecture diagram: public ATS APIs, RSS, JSON boards, alert emails and optional keyed APIs feed a stdlib Python fetcher, which dedupes into SQLite, then fans out to scoring, lane matching and a daily digest, with a human review gate before any application is sent.

Project Details

Tags

Python SQLite System Design AI Automation API Integration Data Pipeline

Challenge

Job hunting for a hybrid design-and-engineering role is a search problem with a brutal decay rate. The listings worth applying to are scattered across dozens of applicant tracking systems that never appear in one place, and the best of them close fast — one senior design engineering role I was tracking closed within hours of my confirming it was open. Aggregator sites lag the source boards by days, which is precisely the window that matters.

The obvious solutions all had a catch. Off-the-shelf automation platforms wanted a monthly subscription for what amounts to a cron job. Scraping services charged per call for data that employers already publish for free. And the tools that promised to auto-apply on my behalf were solving the wrong problem loudly — volume is not the bottleneck when you have no referral network; relevance is.

Solution

I built the pipeline as a set of small, boring, local programs. The fetcher is standard-library Python with no dependencies at all, which means it has no install step, no version drift, and nothing that can break on a machine I have not touched in a month.

A scheduled task runs the whole chain each morning and reports back with anything that scored high enough to act on today.

Decisions Worth Defending

Most of what makes this system work is what it refuses to do.

Outcome

The pipeline runs daily and has been in continuous use since August 2026.

The part I did not expect to matter most was the rubric being a text file. Treating the scoring criteria as an editable document rather than application logic turned the system into something I could argue with. When the results skewed wrong, I edited a sentence instead of a function, and the next morning's digest reflected it.

The same resume-as-data idea runs alongside it: my CV lives as a YAML document that renders to a typeset one-page PDF, so tailoring for a specific role is a diff rather than a fight with a word processor.