A job-board watcher that pushes to my phone
A small Python service that checks 160 companies' job boards every 30 minutes and sends new matching roles to my phone, often before they reach LinkedIn.
- Where
- Personal project
- When
- 2026
- My role
- Design, build, deploy
Why
On LinkedIn, a good posting has hundreds of applicants within a day (some of them probably even read the job description). Most companies publish to their own applicant tracking system first, and LinkedIn picks the job up later. So I built something to watch the source instead.
How it works
- Every 30 minutes, a systemd timer runs a Python script. It uses the standard library only, so there’s nothing to patch but Python itself.
- It reads the public job feeds of 160 companies on Greenhouse, Lever, Ashby and Workday.
- Each job is filtered by title keywords and by location (local to Orange County and South LA, or US remote). Engineering-heavy companies get a stricter “IT roles only” filter, because it turns out there are a lot of “systems engineers” who design satellites, and I’m not one of them.
- New matches are recorded in SQLite and pushed to my phone through ntfy, with a link straight to the posting.
Running it properly
It’s a small script, but I treated it like a production service:
- It runs as an unprivileged system user under a locked-down systemd unit. The filesystem is read-only except for its own database, it can’t gain new privileges, and it only gets network access.
- The notification topic works like a password, so it’s generated on the server and never committed to the config repo.
- Everything is deployed from a Git repo by an idempotent setup script that shows a diff for every file it changes.
- I can test filters from my Mac with a dry run before anything is deployed.
I built it with an AI coding assistant as a pair programmer. I set the requirements and constraints, reviewed every change, and tuned the filters against real results (the AI was very confident about a few of them, and very wrong).