Skip to content
Mathis Beauville

All work-

Fitex

Tailoring a CV to each job offer, without ever letting it lie

Context
Personal product
Role
Everything: design, development, infrastructure, product
Period
Winter 2025 to July 2026
Stack
Next.js, NestJS, PostgreSQL, Stripe, WXT, OpenAI
Live
fitex.obstinate.fr
Fitex home page, in French: “Get more interviews. Stop being ignored.”

From a tool for me…

At the end of 2025 I was looking for a contract. Tailoring your CV to every offer is the right thing to do, and it takes forever. I wrote a tool that did it for me.

In about two weeks: around fifteen applications, four or five interviews, and the contract I am on today.

…to a product for others

In March 2026 I started turning it into a product: an extension that picks up the offer on the page where you are reading it, a web platform, paid credits.

A tool that works for me and a product that strangers trust with their CV and their bank card are not the same job.

What made it tricky

  • An AI that tailors a CV tends to embellish it. On offers full of technical detail, it picked technologies from the ad and slipped them into the CV. A CV that lies is worse than a generic one.
  • A CV has to fit on one page, whatever the AI has rewritten.
  • The CV remains the user’s own LaTeX document, compiled on my server. Compiling someone else’s code means opening a door to them.
  • Payments: a credit must not vanish when a generation fails.

Decisions

  1. Offer selected
    in the extension
  2. Credits reserved
  3. Tailoring by the model
    anti-fabrication tests
  4. LaTeX compilation
    sandboxed
  5. Page measured
    shorten or fill out
  6. One-page PDF
One generation, from the offer to the PDF. Each step’s progress shows live in the extension.

Measuring fabrication instead of hoping

I built an evaluation bench: twenty CVs, eight of them traps, automatic checks and a model that judges the result. The prompt imposes explicit tests on every change, for example a term that is absent from the original CV, or a role whose scope grows.

Every significant change to the prompt goes through the bench before it reaches production.

One page, checked at compile time

The model was bad at holding the “one page” instruction. Rather than insist, the server measures how full the page really is at compile time.

Too long: the CV is shortened deterministically until it fits. Less than 40% full: it is filled out.

Compiling other people’s LaTeX without opening up the server

Every compilation runs without shell access, capped at 1 GB of memory and 60 seconds, three at a time at most. Dangerous LaTeX commands are refused before compilation even starts.

Credits reserved, not debited

Credits are reserved when a generation starts, in a single database operation, and returned if it fails or if the user cancels.

Three models plugged in, one in production

Anthropic, OpenAI and Gemini are called directly, without an SDK, with the cost of every call recorded. That let me compare them on the evaluation bench. In production, it is GPT.

An extension that depends on no site

No per-site script for job boards: each one would break at the first page change, and they would all need maintaining. You click the text of the offer to select it, anywhere, or you paste it. The generation shows its progress step by step.

Demo of the Fitex extension: two blocks of the offer selected on the page, and the extension panel showing the generation in progress, step by step.
The extension demo on the Fitex site, in French: the offer is selected on the page, and the generation moves forward step by step.

Result

“no fabrication” score on the evaluation bench, out of 10
2.7 → 10
“no fabrication” score on the evaluation bench, out of 10
overall score on the same bench, out of 10
5.6 → 8.4
overall score on the same bench, out of 10
around fifteen applications, four or five interviews, one contract
2 weeks
around fifteen applications, four or five interviews, one contract

Live, in French and in English, with data export and deletion (GDPR). The extension is not yet published on the Chrome Web Store.

Homeg h
E.Leclerc (SIPLEC)
EssilorLuxottica
Fitex
Salon
Contactg c
See the CV
Copy the email address[email protected]y
Book a 30-minute call
Switch themet
Lire cette page en français
Show the shortcuts?
GitHubObstinateM
LinkedIn
Vesper++VS Code Marketplace

Keyboard shortcuts

Moving around

jk
Next, previous item
Enter
Open the selected item
hl
Previous, next project
-
Go up one level
g gG
Top, bottom of the page
g h
Home
g c
Contact

Actions

⌘ K/
Command palette
y
Copy the email address
t
Switch theme
?
Show this help