Gmail Job Tracker · Case study
Gmail Job Tracker
Reads your Gmail, finds every application email, and puts each company on a board by stage.
1 day
from brief to working app
5
agent sessions I directed
4
status columns
- Role
- Product design · Design engineering · Agent orchestration
- Type
- Full stack product
- Timeline
- 1 day · September 2026
- Stack
- Next.js 16 · Gmail API · Claude Haiku · SQLite · Motion
The problem
One application, six emails, four senders
Confirmations come from Greenhouse, invites from a recruiter, rejections from no-reply. Nothing says which company or stage.
The board
One card per company, four columns

Cards sort by the latest email.
Keeping up
New mail lands on the board

Gmail is polled every 2 minutes, or on Sync now. A new confirmation becomes a card.
Reading the email
A small model reads each email once
Claude Haiku reads the subject, sender, snippet and first 2,000 characters, then answers through one fixed-schema tool call. A keyword heuristic takes over if the model is down.
- Applied · Confirms an application was received.
- Interviewing · Invites or confirms an interview or call.
- Offer · Extends a job offer.
- Rejected · Says the company is moving on.
Correcting it
Drag it, edit it, it stays



Once you edit a card, sync never overwrites your version.
What's stored
Only card data is stored

The database holds subject, sender, date, a 200-character snippet, the classifier’s decision and a Gmail link. Bodies are read once, in memory.
The design system
Calm glass, with colour for status




Pale blue canvas, frosted-glass cards. Status carries the only colour: yellow interviewing, green offer, red rejected.
Radii run 10, 14, 20, 28 and pill. Springs come from one file.
How I built it
I ran the build as five sessions
- I wrote the brief; a planner froze stack, data model and API.
- Two coders built backend and frontend in parallel, each owning set files.
- An integration session ran both halves and fixed the seams with Playwright.
- A reviewer did a security pass, and the redesign reused the shape.