Back to all work
Job Finder
Web app · job-search command center · A 15-day sprint to land a role, with a CRM built around it.
Pulls live listings from five job boards, scores each one from 0 to 100 against your profile, tracks every application on a kanban pipeline with a daily target that adapts to your open pipeline, and drafts cover letters with AI in the language of the offer.
Context
A job search is a funnel problem: too many boards, too little follow-up. Job Finder merges the boards, ranks the offers against what matters (target roles, skills, location or remote, salary floor) and turns the search into a pipeline with a deadline and a daily target.
How it works
- Five sources, one table: Each board has its own adapter (Remotive, Arbeitnow, RemoteOK, Jobicy, plus France Travail). Listings are merged into one jobs table, de-duplicated, and refreshed on a schedule.
- A fit score you can inspect: Every offer gets a 0-100 score against the profile, and the app shows why. Ranking runs across the whole pool rather than only the latest page, with filters for salary and contract type.
- A pipeline, not a spreadsheet: Seven stages from discovered to offer or rejected. Every move to "applied" feeds a daily counter, and applications can be batched, deleted and followed up.
- A sprint dashboard: A countdown to the deadline, a daily application target that scales with the open pipeline (the larger of a baseline and the pipeline divided by the days left), and a funnel with response rate.
- AI that writes in the offer's language: Cover letters are drafted from the job listing and match its language, and a per-job assistant answers follow-up questions. No application is created until the letter has actually been generated.
What I built
- Live aggregation from five job boards with de-duplication and a scheduled sync.
- 0-100 fit scoring with sort, salary and contract filters and visible reasoning.
- A kanban pipeline, batch apply, follow-ups and a recruiter and referral tracker.
- Full offer detail inside the app, with clean text from messy HTML and a clear apply button.
- A cheatsheet page for the questions every application form repeats.
- A French interface, with AI letters written in French for French offers.
Engineering & quality
- Typed end to end: a Drizzle schema, Zod validation on the API routes and shared types.
- Robust text cleaning, including double-encoded HTML entities that broke offer descriptions.
- When the AI gateway needed a card on file, the model was called directly instead and the model name was changed twice as free-tier models were deprecated or oversubscribed.
- Honest about its limits: single-user, no migration history yet, and the README lists what to add next.
Timeline
- 29 Sep 2026: First commit, aggregation, scoring, CRM, dashboard, AI cover letters, French interface and the cheatsheet, all in one day.
- 30 Sep 2026: Per-job AI assistant, posted dates and relevance labels, and a full visual redesign.
In numbers
- Commits in two days: 24
- Job sources: 5
- Pipeline stages: 7
Next.js 16 · TypeScript · Tailwind CSS v4 · Drizzle ORM · Neon Postgres · TanStack Query · Vercel AI SDK + Google Gemini · Vercel Cron