Skip to content
← All work
Automation & internal software

Job Search Ops

A pipeline that collects postings from five sources, deduplicates, scores and tiers them, tracks them, and prepares the paperwork — then stops and lets a person send it.

Run history table: each scheduled run with start time, duration, status, exit code, raw postings found, verified count, emails sent and cover letters prepared.
The job tracker: rows scored 0 to 100 with title, company, location, source, found date, verification state and status, above a filter bar.

2Tyme product

The problem

The repetitive half of a job search — finding openings, checking they are still live, judging fit, and keeping track — done on a schedule, with a read-only operations view over the whole thing.

The thinking

Multi-source ingestion, deduplication against everything already seen, a rule-based 0–100 match score with tiering, run history with measured throughput, and a queue that prepares cover-letter work for review.

An operations readout: runs today, raw jobs discovered, verified rows, high-match count at a score threshold, emails sent and cover letters generated; a queue panel showing tracker rows, outbox pending at zero and dead letters at zero; a generation panel showing the per-run letter ceiling; and a usage panel with call counts and estimated cost, with email sending marked DISABLED in amber.
The safety states are first-class readouts: dead letters, a hard per-run ceiling, and email sending shown DISABLED in amber rather than buried in config.

The system

It runs twice a day and writes to a tracker rather than acting. The dashboard is read-only by construction — mode=ro on the database connection, no POST routes at all — because an ops view that can mutate production is a liability, not a feature.

Built with

 Multi-source ingestion
 Deduplication
 Match scoring
 Tiering
 Run history
 Reporting
StackPython · SQLite · FastAPI · systemd

What it proves

Multi-source ingestion, deduplication against everything already seen, a rule-based 0–100 match score with tiering, run history with measured throughput, and a queue that prepares cover-letter work for review..

What this is

Our own system. It never submits an application — it finds, scores, organises and prepares, and a person sends it. Screens run against an anonymized demo dataset that keeps the real scoring distribution; no real employers or applications.