SB
projects
WIP · 2026 Personal

ApplyDesk

Personal job-search back-office to handle everything end-to-end — scrapers, LLM parsing, application tracking, email generation, interview prep.

The problem

Why I built this

When job-hunting alongside a full-time role, you juggle 5+ job boards, versioned CVs, cover letters to tailor, interviews to prep, and an application log that gets lost in a spreadsheet. ApplyDesk centralizes all of that in one app where every step is tooled.

Highlights

What is technically interesting

01

CV parsing via Gemini structured output

I feed the raw text extracted via pypdf and get back a fully validated Pydantic model (experiences, education, skills by category, languages, publications). Detection holds up even on column-layout CVs.

02

Bilingual FR / EN

Each CV has a language, and so do applications. A "translate → EN" button calls Gemini to generate an idiomatic English version (action verbs: shipped, led, owned), with bullet-by-bullet manual editing.

03

moderncv LaTeX generation

CV exported as editable LaTeX source directly inside the app + one-click compilation on Overleaf (form POST with textarea, because input strips newlines — a small detail that cost me an hour).

04

Job-offer scrapers

France Travail + Adzuna via API, HelloWork / Welcome to the Jungle via HTML scraping. Smart dedup (title + company + location) merges duplicates across sources.

05

Application tracking + auto-followup

Kanban board (sent → response → interview → offer), with a "needs followup" banner when an application exceeds the configured day threshold.

06

LLM-generated cover email + SMTP send

The LLM writes a tailored offer × profile email, I can edit, then the app sends via Gmail SMTP with the CV attached (in the chosen language).

Preview

On screen

ApplyDesk dashboard with KPIs, pipeline funnel and 12-week activity
Dashboard — application KPIs, pipeline funnel, 12-week activity and offer sources.
Offer drawer with 95% match score and skills / title / location / fit breakdown
AI matcher — every offer is scored with a skills, title, location and fit breakdown plus skills extracted from the resume.
ApplyDesk daily digest with Apply verdict per offer
Daily digest — 5 offers ranked by LLM verdict (Apply / Check / Skip) with the reasoning behind each choice.
ApplyDesk resumes page with parsed FR resume and pending EN resume
Bilingual resumes — PDF upload, AI parsing, FR ↔ EN translation and direct application to job entries.
ApplyDesk Remote page with multi-country and language selection
International remote — multi-source aggregation (Remotive, WeWorkRemotely, Himalayas, Adzuna) with auto FR→EN translation.
Stack

Under the hood

Backend
Python 3.11 FastAPI SQLAlchemy 2.0 async Pydantic 2 Alembic Gemini 2.5
Frontend
React 18 TypeScript Vite TanStack Query Zustand sonner
Data
PostgreSQL (Neon) JSON columns Full-text search
Ops
Docker pytest vitest ruff eslint

Current status

Used daily since April 2026. Private repo for now — I'll open-source it after my job search, once cleaned of personal data.