arthur@site: ~/projects/recruiting-monitor tty · 80×∞
..
arthur@site:~/projects/recruiting-monitor$
Recruiting Monitor
2026-08-06 · python · automation · sqlite · local ai

Overview

Internship alerts tend to fail in one of two ways: they arrive after everyone else has applied, or they dump every role containing the word “intern” into your inbox. I wanted a monitor built around the job I am actually trying to get—and the applications I am actually eligible to submit.

Recruiting Monitor checks 33 direct company boards and aggregate sources every four hours. Its adapters talk to Greenhouse, Lever, Ashby, Workday, SuccessFactors, Radancy, and several custom career systems rather than waiting for search-engine indexing. A SQLite first-seen ledger makes each posting idempotent, keeps vanished roles from looking new when they reappear in a feed, and records adapter health so a broken source cannot fail silently.

The matching pipeline has two gates. The first scores role fit against my target lanes: forward-deployed engineering, technical implementation, solutions engineering, data engineering, and selected software roles. Exact title rules handle known patterns; unmatched titles go to a local model on my own hardware. The second gate checks whether I can apply: Summer 2027 timing, May 2028 graduation, bachelor’s enrollment, degree background, GPA, U.S. work authorization, and location. It consumes structured term, degree, and sponsorship fields where available, reads full posting descriptions, and rejects explicit conflicts such as graduate-only, citizen-only, wrong-term, or foreign-location roles. Ambiguous postings remain in the review feed but do not trigger a phone alert.

The production service runs as a hardened systemd timer on an always-on Debian machine. Source deploys silently from my development machine, protected state is backed up on a four-hour rotation, health checks validate both configuration and SQLite integrity, and the model call crosses an authenticated private gateway only when rules cannot make the decision.

Key Features

  • 33 ATS, company-board, and aggregate sources checked every four hours
  • First-seen SQLite ledger with source health and retry-safe notifications
  • Role-fit ranking grounded in a written recruiting thesis, not generic keywords
  • Candidate-specific checks for term, graduation window, degree level, work authorization, citizenship, and geography
  • Local-model review of full requirements when deterministic rules are insufficient
  • Conservative alert policy: verified matches ping; uncertain roles wait for review
  • Hardened headless runtime, silent deployments, health checks, rollback, and verified backups

Tech Stack

  • Python 3 standard library
  • SQLite
  • systemd user services and timers on Debian
  • Greenhouse, Lever, Ashby, Workday, and custom career-site adapters
  • Local LLM through an authenticated private gateway
  • ntfy push notifications
this prompt is real. help lists commands, tab completes, arrows recall history
arthur@site:~/projects/recruiting-monitor$