Job Dashboard
A self-hosted job-application tracker that ingests recruiter email, classifies each message with Claude, and surfaces your entire pipeline on a native macOS desktop widget.
- Python
- Claude / LLM
- MCP
- SQLite
- macOS / Swift
- Google APIs
The problem
A job search generates a flood of email across a dozen ATS platforms (Greenhouse, Lever, Ashby, Workday…). Keeping a spreadsheet current by hand is tedious and always out of date. I wanted a system that watched my inbox and kept an accurate pipeline for me — with zero manual data entry.
What’s technically interesting
- An LLM in the classification loop. Each labelled email is sent to Claude with a structured-output schema, returning a typed result rather than free text — so the pipeline can trust and act on it programmatically.
- An event-sourced data model. Every stage change is recorded as an event. The upsert logic never regresses a stage and auto-derives “ghosted” after 21 quiet days. Stats (response rate, average days to first response, in-flight count) are computed from the event log, not stored counters.
- A native macOS client. A SwiftUI app and an extra-large desktop widget render the pipeline, post notifications on stage changes, and let me move applications between stages directly.
- Tool integration both ways. An MCP server lets me add or move applications straight from Claude Desktop; interviews are pushed to Google Calendar automatically.
Stack
Python ingestion pipeline (launchd, every 3h) · Claude (Opus) structured output · SQLite event store · Gmail + Google Calendar OAuth · MCP server · SwiftUI macOS app + widget.
Outcome
A genuinely useful tool I run every day — and the project I point to when someone asks what I can ship end-to-end. It touches data modelling, an AI integration, OAuth, background scheduling, and native UI in one coherent system.