Personal project
Personal / self-hostedApplication Tracker
A personal workspace for job applications, versioned resumes and a clear history of what happened next.
Personal application development
Personal project / Document workflows / Analytics
View full size ↗Immutable resume versions
Searchable application timelines
Exports and funnel analytics
Built with
- Next.js
- TypeScript
- React
- PostgreSQL
- Docker
A closer look
Inside the workflow.
Context
A job search produces many small pieces of information: a posting, a tailored resume, an application date and a follow-up. The useful record is how those pieces relate over time.
What I built
- Application history: quick capture, duplicate warnings, status changes and a readable event timeline.
- Resume provenance: immutable versions linked to the applications that used them.
- Find and compare: full-text search, JSON/CSV exports and funnel analytics.
- A local extension path: guided resume preparation and reviewed career-context tooling.
Design decisions
A resume is not just the latest file with a familiar name. Preserving the exact version submitted to a role makes the application history more meaningful.
The data model keeps documents, applications and events connected without losing earlier states. Newer AI-assisted preparation work uses reviewed context and claim approval, so a generated suggestion does not automatically become an accepted career claim.
Project overview
The core application uses Next.js, TypeScript, PostgreSQL and Drizzle. It is a personal, self-hosted tool built around a single-user workflow, with Docker packaging and private-access deployment documentation.
The committed foundation includes the resume library, event history, search, export and analytics. Newer local work explores document preparation and optional email/workflow integrations. Those extensions are distinct from the core tracker.
This project applies the same operational ideas found in my professional tooling to a personal problem: preserve history, make state visible and give the user a useful next action without requiring a spreadsheet to hold everything together.
