Skip to content
François Nguinbu
← Back to home

Case study

MonPoste

A French job board for students and young graduates (jobs, work-study, internships) that tailors the CV and writes the cover letter for every offer.

Role
Founder, sole developer
Launch
October 2026
Stack
TypeScript, React 19, Node.js 24, PostgreSQL
Visit monposte.com ↗

01

The problem

Students send dozens of applications with the same CV, while every offer uses its own vocabulary. Tailoring a CV by hand takes time, and generic AI tools rewrite everything, sometimes inventing experience along the way.

And the offers themselves are scattered across employers’ career sites, recruiting platforms and public-sector sources.

02

Collecting 100,000 offers at the source

A dedicated service collects offers directly from employers’ career sites and recruiting platforms (Workday, SmartRecruiters, Lever, Greenhouse, Taleo and others), as well as public-sector sources.

Each offer is cleaned, deduplicated and geolocated, then enriched with contract type and salary. The result: about 100,000 open, up-to-date offers.

03

The AI proposes, the user decides

The model doesn’t rewrite the CV freely. It receives the structured CV, the offer text and the user’s settings (which sections may change, and how strongly), and returns structured JSON containing only the allowed sections. Every item is tied to an id in the original CV.

The API validates that output against a schema, turns it into a list of individual changes and drops anything the settings don’t allow. The user sees each change, accepts or rejects it, and their own edits are kept.

By default, the model only rephrases and reorders to match the offer’s wording: it adds nothing and removes nothing. Gemini Flash writes the CVs and cover letters; Gemini Flash-Lite reads uploaded CVs and offers and handles translations.

04

SEO as the acquisition channel

Offer pages are server-rendered with schema.org JobPosting structured data, alongside landing pages by job and town, and sitemaps. Most traffic so far comes from Google.

05

Infrastructure

A TypeScript monorepo: a Node.js 24 / Express 5 API, a React 19 front end with TanStack Query, Tailwind 4 and Vite, and a PostgreSQL database with Prisma 7.

It all runs with Docker Compose on a single VPS behind Caddy. Around it: Stripe for one-time passes, self-hosted Umami for privacy-friendly analytics, Brevo for email, and Playwright to render CVs from HTML templates to PDF.

What it shows

I can build a complete product, from data collection to billing, and keep it running in production. That’s exactly what I bring to a client project.

Tell me about your project