Chapitre 1
Le problème
Une part significative des candidatures est écartée automatiquement avant toute lecture humaine. Le profil n'est pas en cause : c'est le document qui ne respecte pas les conventions de lecture des logiciels de recrutement, les ATS.
Le projet assume cette dimension d'équité. Sa valeur n'est pas le CV produit, c'est la capacité du candidat à franchir cette barrière pour accéder à une opportunité réelle.
Chapitre 2
Cadrer avant de générer
La recherche a précédé les maquettes : ChatGPT et Gemini Notebook, sur des sources qui documentent le recrutement automatisé. Les personas reposent sur ces données, pas sur une intuition.
J'ai défini cinq acteurs avant les fonctionnalités : le visiteur, le candidat, le recruteur, le lecteur et l'administrateur. Pour qui et pourquoi d'abord, quoi ensuite. Un schéma TypeScript global formalise les composantes d'un CV moderne.
Chapitre 3
Des tâches aux écrans
Plutôt que le logiciel K-MADe dans sa version formelle, j'ai délégué l'analyse des tâches à l'IA, qui a structuré les tâches critiques par fonctionnalité. La maquette haute fidélité est sortie de Google Stitch en une seule variante globale, suivie d'itérations ciblées sur les seules pages critiques.
Chapitre 4
Deux générateurs, une spécification
Le code est passé par Google AI Studio, puis par une phase comparative entre Claude Code et Emergent.sh. Le prototype fonctionnel est sorti en 72 heures. Il existe aujourd'hui en ligne en deux versions, que la galerie permet de comparer.




Version Google AI Studio (nouvel onglet) Version Claude Code (nouvel onglet)
Chapitre 5
Une décision que personne n'imposait
Le texte d'un CV est extrait dans le navigateur du candidat, avec un Web Worker, avant toute transmission à l'API Gemini. L'IA ne l'a pas suggéré. La réglementation exigeait de sécuriser les données transmises, pas de ne pas les transmettre. Cette décision a coûté en complexité ce qu'un envoi direct au serveur aurait économisé.
Je l'ai prise parce qu'elle importait au candidat qui utiliserait l'outil. Le débogage a demandé deux diagnostics, menés avec l'agent : un conflit de l'environnement Fetch, où des paquets tentaient de surcharger une propriété protégée en lecture seule, et le chargement asynchrone du Worker PDF.js, réglé par une importation locale avec Vite.
Chapitre 6
Un incident : la refonte
Vers la fin, le prototype était déjà livré. L'identité visuelle ne me convenait pas, j'ai demandé une refonte du design system. L'agent est intervenu bien au-delà du périmètre annoncé, en modifiant du code sans rapport avec les styles. Le site ne fonctionnait plus.
Il a fallu inspecter tout le code pour établir ce qui marchait encore, ce qui a lancé une cascade d'itérations correctives. Ce que j'en retiens : un design system se déclare comme un contrat non négociable dès l'amont, il ne se laisse pas rouvert à chaque demande.
Chapitre 7
Après la livraison : le premier test
Je n'ai pas conduit de test utilisateur formel avant la livraison : ils ont été omis, pas déplacés. Le premier test, mené après, a fait apparaître deux défauts. Un geste tactile de l'interface entrait en conflit avec la navigation du navigateur, et la pagination différait d'un gabarit à l'autre. Ce sont des manquements à la prévisibilité de l'interface, que l'anticipation en conception aurait prévenus.
Il a aussi révélé un bug d'export PDF, déjà signalé à Google AI Studio et non corrigé : une dépendance à une plateforme tierce que je ne contrôle pas.
Chapitre 8
Ce qui reste fragile
L'outil traite des CV avec un modèle génératif. L'obligation d'informer l'utilisateur, prévue par l'article 50 du règlement européen sur l'IA, n'est pas intégrée : elle n'existait pas sous cette forme à la conception. ATS First assiste le candidat et ne classe personne pour un recruteur, ce qui l'éloigne des usages à haut risque, mais la question de sa qualification reste posée.
Si c'était à refaire : un test avant la livraison, le design system déclaré comme contrat, et l'inventaire des dépendances tierces avant de livrer.