InternTrack
2025A job application tracker I built during recruiting season to keep track of applications and see how the search was going.
I built InternTrack during recruiting season because keeping track of applications in a spreadsheet was becoming difficult. Statuses would get outdated, I would lose track of follow-ups, and after a few dozen applications, it was hard to get a sense of how the search was going. I wanted one place where I could keep everything organized and see how applications were moving through the pipeline.
Each application has a company, a role, and notes. Applications move through Applied, Online Assessment, Interview, Offer, and Closed. Every status change is saved to that application's timeline, so I can still see its previous statuses.
The dashboard also tracks counts and response rates for each stage. Since everything comes from the same application list, these numbers update whenever I make a change.
Mar 4 · Application submitted
Mar 11 · Assessment sent
Mar 18 · Interview loop
Mar 25 · Offer received
·
Stripe is Applied. The count on that stage includes it.
Implementation
The app is built with React and TypeScript, bundled with Vite and styled with Tailwind CSS.
All applications are stored in one list, and the different folders are just filters on that list. The application cards, timelines, and dashboard statistics all use the same data, so changing an application's status updates everything together.
- folder
- Summer 2025
- status
- Applied
- timeline
- Mar 4 · AppliedMar 18 · Interview
- JobCard
- Applied
- Timeline
- Mar 4 · Applied
- Stats
- 2 interviewing
Stripe is Applied. The card, the timeline, and the stats already agree.
I also added a way to create applications directly from a job description. Instead of filling in every field manually, you can paste a posting and have a model extract the role, company, location, experience requirements, skills, remote status, and notes into a JSON object.
The form fills in using the response, and you can review or edit the details before saving. If the response cannot be parsed, it falls back to default values that can still be edited.
Once saved, the application is added with an Applied status and its first timeline entry. From there, it works just like any other application.
{ role, company, location, skills }
- role
- —
- company
- —
- location
- —
- skills
- —
- status
- —
- timeline
- —
A job posting starts as a block of text.
I used InternTrack throughout that recruiting season.