Job Application Tracker - Longlist
Shipped
Longlist is a job application tracker built for the stage of a search where you've applied to thirty roles, a handful have replied, and you can no longer hold it all in your head. Every application moves through six stages - Interested, Applied, Online Assessment, Interview, Offer, Rejected - and a status change updates a donut chart and stage counters instantly, so you can see the shape of your whole search at a glance.
Roadmap
14 of 14 completeThe plan Longlist was built to, start to finish. Every phase shipped — kept here as a record of how it came together.
Foundations
Get the boring parts right first, because everything after this assumes they work.
- Done
Scaffold Next.js and TypeScript
App Router, strict TypeScript, Tailwind. The starting point every later decision had to fit inside.
- Done
Wire up Supabase
Postgres, client and server helpers, and environment variables split so the service key never reaches the browser.
- Done
Model an application
Company, role, link, notes, the date applied and the current stage. Getting this shape right early meant the UI never had to work around it.
- Done
Auth and row-level security
Supabase auth with RLS policies, so a query can only ever return the signed-in user's own applications rather than trusting the client to filter.
Track a single application
One role, end to end, before worrying about thirty of them.
- Done
The six-stage model
Interested, Applied, Online Assessment, Interview, Offer, Rejected. Six was the smallest set that still described a real search honestly.
- Done
Add, edit and delete roles
A form that takes seconds, because a tracker you resent updating stops being accurate within a week.
- Done
Move a role between stages
The single most-used action in the app, so it had to be one click from the table rather than buried in an edit form.
Make the whole search legible
The actual problem was never storing applications. It was seeing the shape of thirty of them at once.
- Done
Donut chart of the pipeline
Where everything sits, in one glance. Answers “am I actually getting interviews or just applying a lot?” without reading a single row.
- Done
Stage counters that update instantly
A status change updates the chart and the counts immediately, so the dashboard never disagrees with the table you just edited.
- Done
Search, filter and sort the table
Find a company by name, filter to one stage, sort by date applied. The three things you reach for when something has gone quiet.
- Done
Empty and loading states
A tracker is at its emptiest on day one, which is exactly when a blank screen is most likely to lose you.
Ship it
Cheap, quick, and the difference between a repo and something people can actually use.
- Done
Make it work on a phone
Applications get logged the moment you send them, which is rarely at a desk. The table collapses to cards below the tablet breakpoint.
- Done
Deploy to Vercel
Preview deployments per branch, environment variables split between preview and production, and a live demo anyone can click.
- Done
Write up how it was built
A post on building it with agentic engineering — Claude Code and Claude Design — since the process was as much the point as the product.