Personal build · Python · local LLM
The problem
I'm trying to simplify how I look for jobs by creating a tool just for myself. I want to watch a dozen-plus sources (government job feeds, company boards on Greenhouse and Workday, USAJobs, aggregators) every day. The same posting appears on three of them under slightly different titles. And "is this worth applying to?" is a judgment call across many dimensions at once: how central each of my skills is to the role, where it sits, whether it quietly wants a hands-on engineer instead of an orchestrator. Reading fifty postings to find three good ones is exactly the kind of manual process suited to an LLM, and exactly what I need it for.
The approach
A Python pipeline collects from eight kinds of source, removes duplicates, and scores each posting with a local LLM across nine weighted dimensions of fit. Two adjustments follow. One asks where the job is and how often it wants me onsite. The other encodes what I'm not (hands-on IC engineering ×0.35, visual design ×0.5). AI Automation and Automation Opportunity carry the most weight, favoring roles where I can improve manual processes. Those weights couldn't also express my interest in instructional design, so I added a separate scoring blend that applies only when learning design is central to the role. The board keeps whichever score is higher. I designed the pipeline and scoring model; AI wrote most of the implementation under my direction, which is rather the point. Probably obvious, but this is one of my favorite uses of AI: make your own tools!
The result
One command produces a ranked, self-contained dashboard. A Telegram bot sends the top matches to my phone in the voice of Red Dwarf's Queeg, and tells me if a run hangs. A second page covers the places with no sanctioned feed, like LinkedIn and Indeed: links I click myself, each with a note on why it isn't automated. A daily hidden-gems pass picks out strong roles the adjustments may have buried and files them in a log, which opens with a few lines from the local model in the manner of Douglas Adams. When I pick a role, the board tracks it from interested to offer, with follow-up dates and notes. Companion tools flag gaps against my résumé and draft a tailored version, stopping if a number isn't supported by the original. My fit judgment lives in a config file instead of my head, so tuning it is an edit, not a habit. And because the scoring runs on a local LLM, ranking costs nothing and the scoring never leaves my machine.
| Measure | Before | After |
|---|---|---|
| Job review | Manual reading across multiple sources | Deduplicated postings in one ranked dashboard |
| Fit criteria | Judgment held in my head | Nine weighted dimensions, configurable in a file |
How I check it
A tool that ranks my job search needs checking, so I measure it against things it can't see. In September I compared it with a one-off manual look at LinkedIn's "top applicant" list. The board had seen only 19 of those 113 roles, which told me which employer boards to add. The ones it had scored averaged 6.9 out of 10, against 3.1 for the board as a whole, so two independent judges mostly agreed on fit — good enough for a personal board. A state web-content role had the highest base score on the board and showed up as a 1, because the model was answering "where is it?" and "how often onsite?" with one field. I split them. And when listings seemed to be drying up, counting the same employer boards day over day showed the drop came from my own title filter. The market was flat for those titles.





