Case study
Démo privéeJob Radar - radar d'offres, scoring et dashboard
Radar local d'offres d'emploi : collecter des sources autorisées, fusionner les doublons, extraire les faits, séparer le score de pertinence du score de confiance, puis rendre le tout lisible dans un dashboard. Le refresh ne prépare ni n'envoie de candidature.

| Type | Outil local - ingestion, scoring, dashboard |
|---|---|
| Période | 2026 - en cours |
| Rôle | Conception, développement, data, UX, QA |
| Statut | Outil personnel, en usage |
| Niveau de preuve | La preuve existe hors ligne ou contient des données qui ne peuvent pas être publiées. |
| Stack | Python, FastAPI, SQLite, React, TypeScript, Playwright, Connecteurs ATS |
| En bref | Un pipeline complet : connecteurs ATS, fusion des offres, scoring de pertinence et de confiance séparés, dashboard local. Le refresh ne prépare ni n'envoie aucune candidature. |
| Preuves | Captures du dashboard et rapports de refresh datés, montrables en entretien. Outil personnel, pas un produit commercialisé ; les données de candidature restent privées. |
Contraintes
Contexte et contraintes.
- Sources hétérogènes et doublons entre plateformes.
- Données personnelles et offres à ne pas exposer.
- Plateformes restreintes non scrapées : seules les sources autorisées ou importées sont utilisées.
Architecture / workflow
Architecture.
- Sources autorisées (France Travail, Adzuna, Greenhouse, Lever, Ashby, etc.) et alertes locales importées ; les plateformes restreintes ne sont pas scrapées.
- Pipeline : ingestion → fusion canonique des offres → extraction de faits → scoring pertinence / confiance → rapports JSON et Markdown.
- SQLite local, profil candidat hors du dépôt, API FastAPI et interface React.
- Refresh planifié avec verrou inter-processus et contrôle d'intégrité ; aucune candidature préparée ni envoyée.
Décisions
Les choix et leurs compromis.
| Décision | Pourquoi | Écarté |
|---|---|---|
| Séparer le score de pertinence du score de confiance | Un bon poste mal sourcé n'est pas une bonne offre. | Un score unique qui mélange le poste et la fiabilité de la source. |
| SQLite local | Un seul utilisateur, zéro serveur à maintenir, des requêtes assez rapides. | Postgres ou une base hébergée pour un outil personnel. |
| Aucune soumission automatique | Le geste final reste humain, avec revue du CV et de la lettre. | Un robot qui postule à ma place. |
Livraison
Livrables.
- Connecteurs ATS et import d'alertes locales.
- Schéma canonique des offres, fusion des doublons et extraction de faits.
- Scores de pertinence et de confiance séparés.
- Dashboard React et API FastAPI, rapports de refresh.
- Refresh planifié avec verrou et contrôle d'intégrité.
Résultats
Résultats.
- Outil utilisé pour la recherche d'emploi : collecte, tri et priorisation des offres.
- Le pipeline tourne localement ; les rapports de refresh sont datés.
- Aucune candidature n'est préparée ni envoyée par le refresh.
Pas encore mesuré
Ce qui reste à creuser.
- Précision du scoring comparée à une décision humaine : pas encore mesurée sur un échantillon publiable.
- Temps gagné par refresh : non instrumenté.
V2 / suite
Prochaine itération.
- Mesurer la précision du scoring sur des décisions réelles, pas seulement sur des cas construits.
- Durcir les connecteurs et les tests de non-régression à mesure que les sources changent.