Job Tracker Case Study
I built a job tracker and an AI vetting workflow with Claude Code that screens a posting in about a minute and keeps every decision, contact and follow-up in one place.
The problem
A job search spreads across LinkedIn, company career sites and a handful of job boards. A spreadsheet could hold the rows, but not the reasoning behind each one: why I passed, what employees said about the company, who I had contacted and when to follow up.
Vetting was the real time sink. Checking one posting against my criteria, then researching layoffs, reviews and remote eligibility, took far longer than reading the posting itself.
How it works
Every posting goes through the same funnel, and the AI writes its findings back to the tracker so nothing lives only in a chat.
The quick screen uses only the posting, my resume and the tracker. The full vet adds web research on layoffs, reviews, pay and remote eligibility. The final call is always mine.
Product decisions
Each rule exists to save time or to keep the AI honest about my experience.
| Decision | Why |
|---|---|
| Hard gates run before any scoring | A contract role is a no regardless of fit, so the screen stops there and asks if I want to compromise. |
| A skill counts only with on-the-job evidence | A course or side project doesn't score. It keeps scores honest about what I could defend in an interview. |
| Two stages: a 1-minute screen, then a full vet | Deep research only happens for postings that score 55 or higher, so time goes where the fit is. |
| Company research is reused for 60 days | A second role at the same company skips straight to the role, checking only for news since the last vet. |
| The AI never invents facts about me | Anything not on my resume or confirmed by me gets flagged as an inference or asked about. |
| Every write checks the record's version first | If I edit a record while the AI is updating it, my edit wins and nothing is silently overwritten. |
| Capture is one click | A browser bookmarklet saves any posting to the tracker from any job site. |
| Follow-ups schedule themselves | A follow-up date sets itself 7 days after any activity, and the tracker suggests closing out roles quiet for 30+ days. |
Iterating
I treat the workflow like any product: I use it daily and change what gets in the way.
- Shorter output. Full vets ran 300+ words. I rewrote the format so each one opens with the recommendation and fits in about 150-200 words.
- Resume parsing. An applicant tracking system read my resume as 5 years of experience. I traced it to a date line that parsers skipped and fixed the layout.
- What postings ask for. I had the AI tally requirements across 160 saved postings, then rebuilt my resume's skills section around the most requested ones.
- A daily digest. A scheduled search emails new matches each weekday morning and skips jobs I've already passed on.
The hard bug
Jobs I had just added kept disappearing, and edits kept reverting. I exported my data, and Claude and I traced it to the sync layer. Cloud reads lag behind my own writes, and the app trusted every incoming snapshot, so stale snapshots overwrote fresh edits. The fix timestamps every save and merges by newest. I found the problem through daily use and confirmed the fix the same way.
One of our own fixes then caused a regression: opening a rejected job could move it to another tab. I caught it by asking what happens when you edit one field but not the other, and we fixed it.
What I'd do next
This is a working prototype I use daily, not production software. Next I would add automated tests, then consolidate the stage rules into a single source of truth.
Try it
The demo tracker runs on the same code with fictional companies and contacts. Open any job to see its notes, follow-ups and interviews, or the Companies tab to see how ratings roll up from each job.
The code, README and changelog are on GitHub. The changelog shows the sync fixes described above.
Built with Claude Code. I wrote the specs and tested every change myself.