Case study
Novera MegasearchA candidate-driven IT sourcing engine: fine-grained search, a persistent contact queue, and profiles that enrich themselves.
The sourcing layer of my Novera Talent platform: a two-stage profile search engine, fed by candidates themselves through the novera-talent.com showcase, which automatically enriches profiles and makes them finely queryable by the recruiter.
- Role
- Design · Product · Development · Hosting
- End to end, solo
- Year
- 2026
- Type
- Candidate-driven IT sourcing engine · part of the Novera Talent platform
Seniority
Top skills
The challenge
Manual IT sourcing — LinkedIn, spreadsheets and inbox — does not scale. No fine-grained multi-criteria search, no persistent contact queue, no reuse of search typologies, and no structured capture of candidates who show up spontaneously through the novera-talent.com showcase.
The goal: an engine where the candidate is the starting point. They show up, we enrich them automatically, and they become a finely queryable profile — while the searches that work get saved and replayed.
The solution: a two-stage sourcing engine
An end-to-end “candidate-driven” cycle: the candidate shows up, gets enriched, then becomes queryable — from the first signal to the contact handoff.
Sourcing search
Two-stage search: PostgreSQL full-text over title, skills and experiences + trigram similarity for typo tolerance, with combined ranking and facets.
Saved searches
The search typologies that work are saved and replayable — no need to rebuild criteria every time.
Candidate-driven ingestion
Captures profiles from the showcase, LinkedIn or the extension, in PENDING_CANDIDATE status pending enrichment.
Candidate onboarding
Magic-link email, a 5-step enrichment wizard (PARTIAL then COMPLETE profile) and unsubscribe.
Automatic enrichment
Three free providers — GitHub, personal site, company page — built on a shared EnrichmentFact foundation.
LLM CV parsing
Structured CV extraction via the Anthropic API, run as an async job outside the search hot-path.
Contact queue & export
Browser-persisted contact queue (Zustand + localStorage) and shortlist export to CSV.
Role-driven sourcing
Campaigns → shortlist → handoff to Novera Signal / Unipile for LinkedIn outreach.
Under the hood
Search leans on two native PostgreSQL capabilities — full-text and trigram — rather than an external engine. Enrichment and AI parsing run off the critical search path, as async jobs, to keep queries fast.
Two-stage search
PostgreSQL full-text (tsvector) over title, skills and experiences, combined with trigram similarity (pg_trgm) for fuzzy matching and typo tolerance. Combined FTS + trigram ranking, facets (seniority counters, top skills) and server-side pagination clamped to 100.
Candidate-driven cycle
Ingestion (showcase / LinkedIn / extension) in PENDING_CANDIDATE → magic-link email → 5-step enrichment wizard → PARTIAL then COMPLETE profile → queryable by the recruiter, with non-enriched profiles hidden by default.
Multi-provider enrichment
Three free providers — GitHub, personal site, company page — built on a shared EnrichmentFact foundation. One run produced 5,268 facts and ~581 net-new links across the base.
AI off the hot-path
LLM CV parsing (Anthropic) runs as an async job, off the critical search path — queries stay fast while extraction happens in the background.
Persistent contact queue
The contact queue is persisted in the browser (Zustand + localStorage), so the in-progress shortlist survives between sessions; CSV export for handoff.
Base & test coverage
A base of about 9,600 LinkedIn profiles in PENDING_CANDIDATE, of which ~726 enriched via GitHub, ~290 via personal site and ~65 companies. 366 backend unit tests + 97/97 frontend (Vitest + Playwright).
My role: everything, solo
From vision to hosting, I built Novera Megasearch alone: design, product, back-end and front-end development, and operations. It’s the sourcing layer feeding my own recruitment platform — so it’s the product whose every trade-off I own.
Product & scoping (PO)
Candidate-driven cycle, platform boundaries, roadmap.
Design & experience
Sourcing interface, candidate onboarding wizard, facets.
Full-stack development
Fastify/Prisma backend, PostgreSQL search, Next.js frontend, tests.
Hosting & data
Operations, enrichment runs, profile-base integrity.
Building my own sourcing engine means understanding candidate data and the craft of tech recruitment from the inside. Modelling the search, designing the candidate journey, writing the code and operating it: that end-to-end perspective is what I bring when I assess and recruit tech profiles.