← Back to projects

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.