Claude, with schemas
Every model call uses structured outputs, so the code gets validated JSON back, never prose to parse.
Playwright in a real browser
Headed Chromium under Xvfb reads forms by their labels, which is why Greenhouse, Lever, Ashby and custom forms all use the same code.
Python, Flask, SQLite
One small database tracks each application from posting to offer. The dashboard and the worker hand jobs to each other through it.
WeasyPrint
Resumes and cover letters are HTML templates rendered to PDF, so any edit re-renders instantly with no model call.
Self-hosted
Docker containers on a home server behind Caddy. This public page reads a read-only copy of the data and can't reach anything else.