The problem

Finding openings and keeping track of applications often happen in disconnected tools. A small self-hosted application can unify those workflows without needing a large infrastructure footprint.

The approach

  1. Build on the vendored jobhive / ats-scrapers library, scheduling ingestion and normalizing results into a local SQLite database.
  2. Use WAL mode, FTS5 full-text search, and synchronization triggers. Preserve application history separately from the expiring job feed.
  3. Serve JSON endpoints and an interactive FastAPI, Jinja2, and HTMX interface for browsing, applying, filtering, and reviewing scrape logs.

How it fits together

ATS scrapers
Ingestion
SQLite + FTS5
FastAPI
HTMX dashboard

The result

A cohesive self-hosted workflow for job discovery and application tracking, with per-run audit records and a searchable feed.

The engineering decision

SQLite and server-rendered interactions keep the application small. The project builds on an existing scraper library rather than claiming every connector as original work.

Explore the implementation