PROJECT DEEP DIVE
Job application intelligence system - CareerFit
Personal project · React 19, Claude API, Supabase, Cheerio
Problem
Job applications are high-volume, low-signal work. Candidates spend hours tailoring CVs for roles that don't actually match their profile - with no systematic way to filter, rank, or customise at scale.
What I built
A pipeline that scrapes, normalises, and deduplicates roles, then uses LLM evaluation with qualification gating - so a CV is only generated for a role that clears a fit threshold. Structured JSON output is validated strictly before anything is written. Persistence runs on Supabase with a file-store fallback so the pipeline doesn't break if the primary store is unavailable.
Outcome
Candidates spend time only on roles worth applying to. The system handles discovery, ranking, and tailoring. Structured output validation means the pipeline is reliable, not best-effort.
Architecture Diagram
Architecture flow
React 19 Client
Run controls, status visibility, and export flows.
Express API
Tailoring, run lifecycle, and export endpoints.
Discovery Pipeline
Scrape, normalise, dedupe, evaluate, and rank roles.
Claude + Gating
Qualification threshold before CV generation.
Supabase / File Store
Primary persistence with resilient fallback mode.
React 19 Client
Run controls, status visibility, and export flows.
Express API
Tailoring, run lifecycle, and export endpoints.
Discovery Pipeline
Scrape, normalise, dedupe, evaluate, and rank roles.
Claude + Gating
Qualification threshold before CV generation.
Supabase / File Store
Primary persistence with resilient fallback mode.