Aller au contenu
Quentin Barroin

Étude de cas

Novera Megasearch

Un moteur de sourcing IT candidate-driven : recherche fine, file de contact, et profils qui s’enrichissent eux-mêmes.

La brique de sourcing de ma plateforme Novera Talent : un moteur de recherche de profils à deux étages, alimenté par les candidats eux-mêmes via la vitrine novera-talent.com, qui enrichit automatiquement les profils et les rend requêtables finement par le recruteur.

Rôle
Design · Produit · Développement · Hébergement
De A à Z, en solo
Année
2026
Type
Moteur de sourcing IT candidate-driven · brique de la plateforme Novera Talent
Recherche de sourcing
react senior · postgres

Séniorité

JuniorConfirméSeniorLead

Top skills

TypeScriptReactNode.jsPostgreSQL
File de contactpersistante

Le défi

Le sourcing IT à la main — LinkedIn, tableurs et boîte mail — ne passe pas l’échelle. Pas de recherche fine multi-critères, pas de file de contact persistante, aucune réutilisation des typologies de recherche, et aucune capture structurée des candidats qui se manifestent spontanément via la vitrine novera-talent.com.

L’objectif : un moteur où le candidat est le point de départ. Il se manifeste, on l’enrichit automatiquement, et il devient un profil requêtable finement — pendant que les recherches qui marchent se sauvegardent et se rejouent.

La solution : un moteur de sourcing à deux étages

Un cycle « candidate-driven » de bout en bout : le candidat se manifeste, s’enrichit, puis devient requêtable — du premier signal jusqu’au handoff de contact.

Recherche de sourcing

Recherche à deux étages : full-text PostgreSQL sur titre, skills et expériences + similarité trigramme pour la tolérance aux fautes, avec ranking combiné et facettes.

Recherches sauvegardées

Les typologies de recherche qui marchent sont sauvegardées et rejouables — plus besoin de reconstruire les critères à chaque fois.

Ingestion candidate-driven

Capture des profils depuis la vitrine, LinkedIn ou l’extension, en statut PENDING_CANDIDATE en attendant l’enrichissement.

Onboarding candidat

E-mail magic link, wizard d’enrichissement en 5 étapes (profil PARTIAL puis COMPLETE) et désinscription.

Enrichissement automatique

Trois providers gratuits — GitHub, site perso, page entreprise — bâtis sur un socle commun EnrichmentFact.

Parsing de CV par LLM

Extraction structurée du CV via l’API Anthropic, en job asynchrone exécuté hors du hot-path de recherche.

File de contact & export

File de contact persistée côté navigateur (Zustand + localStorage) et export de la shortlist en CSV.

Sourcing piloté par une offre

Campagnes → shortlist → handoff vers Novera Signal / Unipile pour le contact LinkedIn.

Sous le capot

La recherche s’appuie sur deux capacités natives de PostgreSQL — full-text et trigramme — plutôt que sur un moteur externe. L’enrichissement et le parsing IA tournent hors du chemin critique de recherche, en jobs asynchrones, pour garder la requête rapide.

FastifyPrismaPostgreSQLNext.jsReactZodZustandAnthropicpnpmVitestPlaywright

Recherche à deux étages

Full-text PostgreSQL (tsvector) sur titre, skills et expériences, combiné à la similarité trigramme (pg_trgm) pour le fuzzy et la tolérance aux fautes. Ranking combiné FTS + trigramme, facettes (compteurs de séniorité, top skills) et pagination clampée côté serveur à 100.

Cycle candidate-driven

Ingestion (showcase / LinkedIn / extension) en PENDING_CANDIDATE → email magic link → wizard d’enrichissement en 5 étapes → profil PARTIAL puis COMPLETE → requêtable par le recruteur, les profils non enrichis étant masqués par défaut.

Enrichissement multi-providers

Trois providers gratuits — GitHub, site perso, page entreprise — bâtis sur un socle commun EnrichmentFact. Un run a produit 5 268 faits et ~581 liens net-new sur la base.

IA hors hot-path

Le parsing de CV par LLM (Anthropic) tourne en job asynchrone, en dehors du chemin critique de recherche — la requête reste rapide, l’extraction se fait en arrière-plan.

File de contact persistante

La file de contact est persistée côté navigateur (Zustand + localStorage), de sorte que la shortlist en cours survit entre les sessions ; export CSV pour le handoff.

Base & couverture de tests

Base d’environ 9 600 profils LinkedIn en PENDING_CANDIDATE, dont ~726 enrichis via GitHub, ~290 via site perso et ~65 entreprises. 366 tests unitaires backend + 97/97 frontend (Vitest + Playwright).

Mon rôle : tout, en solo

De la vision à l’hébergement, j’ai porté Novera Megasearch seul : design, produit, développement back et front, et exploitation. C’est la brique de sourcing qui alimente ma propre plateforme de recrutement — donc le produit dont j’assume chaque arbitrage.

Produit & cadrage (PO)

Cycle candidate-driven, frontières de plateforme, roadmap.

Design & expérience

Interface de sourcing, wizard d’onboarding candidat, facettes.

Développement full-stack

Backend Fastify/Prisma, recherche PostgreSQL, frontend Next.js, tests.

Hébergement & données

Exploitation, runs d’enrichissement, intégrité de la base de profils.

Construire mon propre moteur de sourcing, c’est comprendre de l’intérieur la donnée candidat et le métier du recrutement tech. Modéliser la recherche, dessiner le parcours candidat, écrire le code et l’exploiter : c’est ce regard de bout en bout que j’apporte quand j’évalue et recrute des profils tech.