The problem

Job feeds contain far more postings than one person can use. Freshness, location, eligibility, and fit all matter, but evaluating every raw record with an LLM is slow and expensive.

The approach

  1. Poll the upstream manifest and download changed ATS slices. Apply deterministic title, company, freshness, location, and eligibility filters before scoring.
  2. Route surviving jobs to one of four resume tracks. Score with a configured hosted model or local Ollama, and retain outcomes and failure details in SQLite.
  3. Export a CSV audit trail and send a scheduled digest. Persist the email-send guard so restarting the daemon does not repeat the day’s digest.

How it fits together

Changed feeds
Filter & dedupe
Resume routing
LLM scoring
SQLite & digest

The result

A complete local workflow from public ATS data to a ranked review surface, with explicit spending limits, retry behavior, and an audit trail.

The engineering decision

Deterministic filters do the inexpensive work first. Model scoring is reserved for postings that survive those gates; uncertain location data is retained rather than silently discarded.

Explore the implementation