Self-directed · AI-assisted · Python + React/TS · 2026

Job Search
Pipeline

Sixty thousand postings aggregated and ranked against what I actually want, with me approving every application before it goes out.

The job pipeline dashboard: crawl and scoring progress across 60,000+ reviewed postings, category filters, and scored job cards showing match percentage and per-criterion ratings.
Fig. 1: Scored listings queue, highest fit first.
Reviewed
60K+
Model-scored
41K+
Companies
140+
Model cost
$0

Problem

Relevant listings are spread across job boards and company career pages behind many applicant tracking systems. Reviewing them by hand takes significant time.

Pipeline

Custom adapters pull listings from Greenhouse, Lever, Ashby, Workday, iCIMS and SmartRecruiters. Cheap deterministic filters remove irrelevant listings before any model sees them, discarding 19K+ of the 60K+ locally. Batch scoring ranks the 41K+ that survive, and a deeper pass breaks ties on borderline listings. Request pacing keeps every source inside its rate limits.

Applying

I choose which opportunities to pursue. For the listings I select, Playwright opens the posting and completes recognized application forms; when a form is unfamiliar, AI helps interpret its fields.

The workflow then stops. It waits for me to inspect what it has filled in, and every application requires my approval immediately before submission. Nothing is sent on the system's own judgment.

Cost

The workflow uses free models and models covered by subscriptions I already maintain, staying within included usage. The project therefore incurred no incremental model cost during the measured run. Deterministic pre-filtering keeps it inside those limits at this volume.

What I learned

Cost and latency are design constraints, not afterthoughts. Significant effort was put into optimizing batch processing and minimizing unnecessary wasted analysis.

Stack

AI-assisted development Python 3.12 FastAPI httpx · BeautifulSoup4 Playwright SQLAlchemy 2.0 · SQLite WAL Alembic APScheduler React · TS · Vite