Automation · ML
JobScout
Veille emploi expliquée · outil personnel, commercialisation en sommeil
Outil personnel · démo fictive · 5 essais/jour par navigateur
Le besoin
Passer moins de temps à trier les offres.
La réalisation
Une chaîne de collecte, scoring et suivi.
Le choix
Garder l’outil. Ne pas lancer un SaaS de plus.
Explorer la démonstration
JobScout / Le laboratoire de veille emploi
Dix annonces.
Lesquelles méritent votre attention ?
Choisissez un profil, posez vos limites et regardez la sélection évoluer. Chaque entreprise, annonce et profil ci-dessous est fictif. Vous pouvez explorer un classement complet sans créer de compte.
01 / Votre scénario
Une rémunération non indiquée reste à vérifier. Elle n’est jamais inventée.
Chargement du compteur…
Limite locale par navigateur, renouvelée à minuit UTC. Aucun CV demandé, aucun appel IA facturé.
02 / Le tri, en clair
Une sélection à examiner
Classement pédagogique sur règles explicites. Le moteur LLM du projet personnel n’est pas appelé ici.
- Annonces fictives
- 10
- Doublon / expirée
- 1 / 1
- Compatibles
- 4
01 / Atelier Atlas · fictif
ML engineer
100/ 100Paris · Télétravail intégral · 52 000 € brut/an
Pourquoi ce classement ?
Compétences communes : Python, SQL, Machine learning. Toutes les compétences demandées sont présentes dans ce profil fictif.
- Compétences
- 40 / 40
- Expérience
- 20 / 20
- Lieu / télétravail
- 20 / 20
- Salaire
- 20 / 20
Cet indice n’est pas une probabilité d’entretien. À égalité, l’ordre suit l’identifiant de l’annonce.
02 / Studio Brume · fictif
Data scientist
87/ 100Lyon · Télétravail intégral · 48 000 € brut/an
Pourquoi ce classement ?
Compétences communes : Python, Machine learning. À vérifier : Analyse.
- Compétences
- 27 / 40
- Expérience
- 20 / 20
- Lieu / télétravail
- 20 / 20
- Salaire
- 20 / 20
Cet indice n’est pas une probabilité d’entretien. À égalité, l’ordre suit l’identifiant de l’annonce.
03 / Laboratoire Orme · fictif
ML platform engineer
77/ 100Paris · Télétravail intégral · Salaire non indiqué
Pourquoi ce classement ?
Compétences communes : Python, Machine learning. À vérifier : Cloud.
Rémunération inconnue : 10 points sur 20 par convention, à confirmer avant de candidater.
- Compétences
- 27 / 40
- Expérience
- 20 / 20
- Lieu / télétravail
- 20 / 20
- Salaire
- 10 / 20
Cet indice n’est pas une probabilité d’entretien. À égalité, l’ordre suit l’identifiant de l’annonce.
04 / Équipe Aube · fictif
Backend engineer
73/ 100Lyon · Télétravail intégral · 50 000 € brut/an
Pourquoi ce classement ?
Compétences communes : Python. À vérifier : API, Cloud.
- Compétences
- 13 / 40
- Expérience
- 20 / 20
- Lieu / télétravail
- 20 / 20
- Salaire
- 20 / 20
Cet indice n’est pas une probabilité d’entretien. À égalité, l’ordre suit l’identifiant de l’annonce.
0 offre retenue dans cette session. Aucune candidature n’est envoyée.
Voir les 4 offres hors critères
Développeur API · Maison Silex
Télétravail intégral absent
Data analyst junior · Collectif Nacre
Télétravail intégral absent · Salaire sous le minimum choisi
Lead machine learning · Projet Cèdre
7 ans requis, profil à 3 ans
Data analyst · Atelier Rive
Salaire sous le minimum choisi
Un doublon identifié et une annonce expirée ont été retirés avant le classement. Ces statuts sont fixés dans le jeu fictif, pas vérifiés sur Internet.
Ce que cette démo montre, et ce qu’elle ne fait pas
Le parcours reprend les étapes du projet : collecter, dédupliquer, appliquer les contraintes, expliquer un classement et retenir des offres. Ici, les règles sont déterministes et visibles : compétences sur 40, expérience sur 20, lieu sur 20 et salaire sur 20. Les contraintes éliminatoires passent avant le score.
Le projet personnel dispose d’un worker et d’un scoring via DeepSeek. Cette démonstration ne lance ni ce worker, ni scraping, ni LLM. Elle ne mesure pas leurs performances et ne présente aucune offre réelle.
Le compteur est conservé localement, sans compte ni identification. Effacer le stockage ou changer de navigateur le réinitialise : il s’agit d’une limite de parcours, pas d’un quota sécurisé par personne. La sélection d’offres reste en mémoire jusqu’au rechargement.
Comprendre le projet
Derrière le projet
Automatiser la veille, garder le jugement.
Une recherche d’emploi produit vite beaucoup d’onglets et peu de décisions. La même annonce apparaît sur plusieurs sites. Une autre semble prometteuse, jusqu’à la ligne qui impose sept ans d’expérience ou une présence sur place. J’ai construit JobScout pour rassembler ces informations et rendre le tri plus lisible.
Le projet est personnel. Je l’ai développé comme une chaîne complète : acquisition des offres, stockage, rapprochement avec un profil, explication du score et suivi des opportunités retenues. Une interface web et des notifications permettent ensuite de revenir aux offres utiles sans reprendre la recherche de zéro.
Ce que j’ai effectivement construit
- Un worker de collecte. Des connecteurs séparés par source, des reprises sur erreur et un suivi des exécutions. Leur disponibilité dépend des fournisseurs ; je ne présente pas un connecteur écrit comme une source garantie.
- Un classement expliqué. Le moteur personnel utilise DeepSeek pour rapprocher un profil et une offre. La démo ci-dessus en rend le parcours compréhensible avec un calcul local plus simple, dont chaque point peut être vérifié.
- Une application de bout en bout. API FastAPI, interface Next.js, authentification et données dans Supabase, notifications et suivi. Des briques d’abonnement ont aussi été développées, sans lancement commercial validé.
- Des contrôles sur les cas qui comptent. Entrées invalides, doublons, limites de consommation et explications du résultat. La démonstration illustre ces choix sans prétendre prouver un taux d’embauche.
Décision du 3 novembre 2026
Pourquoi je n’en fais pas une nouvelle activité commerciale
Au moment de réexaminer le projet, JobScout n’avait aucun utilisateur. Entre-temps, le matching, l’aide au CV et le suivi de candidature étaient déjà proposés par de nombreux outils, parfois gratuitement. Ajouter quelques fonctions n’aurait pas suffi à expliquer pourquoi quelqu’un devait choisir le mien.
J’ai donc choisi de ne pas investir dans une nouvelle offre généraliste. La collecte demande de l’entretien, les utilisateurs ont besoin de support et un abonnement à petit prix ne paie pas automatiquement ce travail. Une application qui fonctionne et une activité rentable sont deux questions différentes.
Je préfère réserver mon temps à mes autres projets prioritaires, notamment Egir, plutôt que mener un lancement commercial de plus sans demande démontrée. JobScout reste un outil personnel et une réalisation que je peux montrer, expliquer et faire évoluer pour mes propres besoins. Il n’est plus présenté ici comme un service à souscrire.
Ce que je réutilise aujourd’hui
La séparation entre collecte et traitement, les retours utilisateurs, les budgets d’exécution et la mise en évidence des informations manquantes sont utiles bien au-delà de l’emploi. Ce sont ces choix d’ingénierie que cette page donne à voir : un système compréhensible, des limites explicites et une décision produit assumée.
Méthode et ressources
Une architecture en trois services
01 / Worker Python
Collecte, normalisation, scoring et notifications.
02 / API FastAPI
Accès aux profils, aux offres et au suivi.
03 / Interface Next.js
Lecture, filtres et décisions de l’utilisateur.
Supabase assure l’authentification et le stockage PostgreSQL. Le dépôt contient aussi une version solo historique et des expérimentations d’embeddings. Ces éléments ne sont pas tous exécutés par la démo du portfolio.
Lire le code et ses limites
Le dépôt documente le projet personnel et ses évolutions. La démo publique utilise dix annonces fictives et un score déterministe ; elle n’appelle aucun service d’IA et n’envoie aucune candidature. Son quota de cinq essais est local au navigateur.
Consulter le dépôt JobScout (nouvel onglet)Les repères qui ont éclairé ma décision
Analyse réalisée en novembre 2026. Ces pages décrivent les offres de leurs éditeurs ; elles ne constituent pas un comparatif de performance ni une preuve de leurs résultats.