case study · Jan 2025 – May 2025
ApplyTrack
A full-stack job-application tracker with real accounts, live job search, and a status pipeline, built on React/TypeScript/Supabase with a lightweight Node API.
React 19TypeScriptViteSupabaseExpressAdzunaClaude
The problem
Job seekers juggle applications across spreadsheets and browser tabs. ApplyTrack centralizes live job discovery and application tracking in one authenticated dashboard.
What it does
- Real accounts via Supabase Auth.
- Tracks company, role, location, source, link, and notes, with filtering and editing.
- Status pipeline: saved → applied → interview → offer → rejected → archived.
- Live job search pulls Adzuna listings through a server-side proxy (key off the client) and saves them into the tracker.
how it fits together
ApplyTrack · architecture
Full-stack job tracker with a credentials-safe proxy
Real accounts and live job search in one dashboard, with API keys kept on the server, never the client.
- Job seeker (client)React 19 · TypeScript · Vite. Tracker UI plus funnel analytics.
- Supabaseauth / CRUD · Auth + Postgres with row-level security (per-user isolation).Express proxy → Adzuna/api/jobs · live listings fetched server-side so the API key never reaches the browser.Optional Claude parsing/api/parse · paste a resume / job post → structured fields (gated on an optional key; degrades gracefully).
React 19 · TypeScript · Vite · Supabase (Auth + Postgres RLS) · Express · Adzuna · Claude
product screens
key engineering decisions
Credentials stay server-side
Live job search is proxied through Express so the Adzuna API key is never exposed to the browser.
Row-level-secured persistence
Application data is persisted in Supabase Postgres with row-level security, so each user only sees their own records.
results & outcomes
- One system for both job discovery and tracking, built for real daily use.
- Authenticated, persistent, multi-user data with a clear status pipeline.
