Job Hunter
A job-search copilot that scores every opening against my own professional knowledge base and drafts the application.
The problem
Job hunting seriously is a scattered data problem: openings live on different platforms, deciding whether each one is worth applying to eats hours, and the material for every application —resume, message, answers— gets rebuilt from scratch every time.
What I did
I built the whole product as a two-half workspace. On one side, a professional knowledge base in Markdown acting as the corpus. On the other, a Next.js 16 app with React 19 and Supabase that turns it into action: an application tracker that autofills metadata from the posting link, and four AI actions on the Claude API with structured outputs validated by Zod and prompt caching of the corpus — fit analysis with score and gaps, an application message in the posting's language, a resume tailored per opening, and a reusable answer bank. Security runs in three layers: a session proxy, per-endpoint validation, and RLS with no policies, so only the server reaches the data. If the database is unavailable the data layer falls back to local storage on its own, and migrates to the cloud when it returns.
The outcome
In use for my own job search: 11 endpoints and around 9,400 lines of TypeScript, across twenty commits between July and August 2026. It is also proof of a pattern I care about: a curated knowledge base as an LLM's corpus, instead of asking the model to improvise over a resume.
From posting to application
- Target roles by tierInput
- Pre-filtered searchesOne link per role and filter
- Auto-filled postingMetadata pulled from the link
- Curated profile corpusStable prefix, cached
- Fit analysis with ClaudeScore, severity-ranked gaps, evidence
- Tailored message and resumeOutput: in the posting's language
The corpus is a curated profile snapshot, deliberately stable: any byte that changes invalidates the cached API prefix. Every analysis is sealed with the date of the snapshot it ran against, so the interface can tell which ones went stale.
Stack
- Next.js 16
- React 19
- TypeScript
- Tailwind CSS v4
- Supabase
- Postgres
- Claude API
- Zod
- @supabase/ssr
The repository is private: it holds my full professional knowledge base. That is why there is no link to the code.
Next project: Assortment Analytics Platform →