HS logo
back to work
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 account creation and sign-in via Supabase Auth.
  • Application tracking: company, role, location, source, link, notes.
  • A status pipeline: saved → applied → interview → offer → rejected → withdrawn → archived.
  • Filtering by status and editing entries without losing the selected record.
  • Live job search that pulls current listings from the Adzuna API through a server-side proxy (keeping the request off the client) and saves results into the tracker.

Approach & architecture

The frontend is React + TypeScript + Vite talking to Supabase for auth and Postgres persistence with row-level security. Live job search runs through an Express proxy at /api/jobs/search, which calls the Adzuna jobs API server-side so credentials never reach the client.

how it fits together

ApplyTrack · architecture

Full-stack job tracker with a credentials-safe proxy

Real accounts and live job search in one dashboard — API keys stay on the server, never the client.

  1. Job seeker (client)
    React 19 · TypeScript · Vite — tracker UI + funnel analytics.
  2. Supabase
    auth / 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

Sign-in: real accounts backed by Supabase Auth.
Sign-in: real accounts backed by Supabase Auth.
Dashboard: live Adzuna job search and the application tracker in one place.
Dashboard: live Adzuna job search and the application tracker in one place.
Tracker: applications moving through the saved → applied → interview → offer pipeline.
Tracker: applications moving through the saved → applied → interview → offer pipeline.

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.