← Back to projects
Shipped 2026

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
Job Dashboard cover

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.