Case study · AI recruitment software

A recruitment CRM built around AI Scout, which turns a role brief into a ranked shortlist that explains every candidate. Built by three co-founders and run in production with recruiting agencies.

Team of 3 · 3 repositories Built Mar 2025 → Jul 2026 Paused · Sep 2026
The withlope.com landing page: 'Candidate search, better than ever' with a live demo ranking a candidate at 92% relevance and explaining why.
The landing page at withlope.com, captured 23 September 2026 — its hero demo turns a brief into a ranked, explained candidate.

At a glance

measured 23 Sep 2026 · customers only
799
candidates customers sourced through AI Scout
1,510
customer interviews synced into Lope
23
recruiters signed up, 10 of them agencies; 74% finished onboarding
75 days
longest customer engagement (design-partner agency)

The idea

Boutique technical recruitment agencies work across LinkedIn, spreadsheets, an applicant-tracking system and a notetaker. Two problems dominate: sourcing is slow and opaque, because AI tools that search better return a bare score a recruiter can't defend to a client, and what recruiters know about a candidate is scattered across the LinkedIn profile, the CV, GitHub and the interview notes.

Lope's bet was to bring every source into one candidate profile, then rank with evidence: each candidate's fit explained criterion by criterion (title, skills, experience, location, industry) in a form a recruiter can hand to a hiring manager. AI Scout does the ranking, and the rest of the product either feeds it candidates or acts on what it finds. This page follows the same order.

One profile, every source

how candidates get into Lope
LinkedIn

Enriched automatically from a URL, the Chrome extension or an AI Scout result, including current company and school. 3,246 profiles.

External talent database

AI Scout's external and mixed searches import and enrich new profiles. 799 sourced by customers.

CVs

OCR plus structured extraction, one at a time or as a bulk ZIP upload.

GitHub

Public repositories, languages and commit activity.

Interviews

Calendar sync creates candidates from meetings (228), and the meeting bot adds transcripts, AI reports and team comments.

CSV & manual

CSV import with field mapping, manual adds and custom fields.

AI Scout ranks on the structured profile built from LinkedIn data. CV, GitHub and interview evidence appears in the candidate sheet, the interview chat and candidate reports. Bringing that evidence into the ranking was the next planned step.

1 · AI Scout

the core of the product

A recruiter writes a brief such as “Senior backend engineer in Athens, 6+ years, Python and Kubernetes, fintech background.” AI Scout turns it into structured, editable criteria, searches, and returns a ranked list in which each candidate shows what matched and what's missing.

From a sentence to an explained shortlist

2:15

The brief becomes criteria with synonym-expanded job titles, external sourcing imports new profiles and enriches their companies and schools as they arrive, and every result comes with a per-criterion explanation.

Three ways in

A prompt in plain language. The Search Agent, a conversational assistant that asks follow-up questions to sharpen the brief (beta). Search from a job, which turns a job description into a ready-to-run search.

Three sources

Internal: the workspace's own candidates. External: a third-party talent database, with new profiles imported and enriched automatically. Mixed: both, ranked together.

Explained results

A match breakdown per criterion and a relevance band on every result. Matched skills are highlighted with the evidence behind them, so the recruiter can defend the ranking.

Search Agent

1:49

Asks the follow-up questions a senior recruiter would, then hands AI Scout a well-formed brief.

Create job dialog with 'Find candidates after creating' turned on and a generated AI Scout brief.
Search from a job. Creating a job can draft the search: title, location, skills and years come from the job description, and every signal stays editable.

How the ranking works

Each criterion is scored on its own. Job titles are matched three ways (OpenAI embeddings, JobBERT, a model trained on job titles, and BM25 keywords), fused, then reranked by a cross-encoder. Skills, location, experience and industry each have their own index.

Eight Milvus collections feed five scored dimensions, merged by grouped Borda rank aggregation. Because every result keeps its per-dimension scores, each ranking can be explained.

The one known limit: on a single CPU-only VM the engine served concurrent searches one at a time, which was fine for pilot traffic. GPU inference was the planned next step.

Search engine latency by pool sizelive · 23 Sep 2026
p50p950–20 s scale · 0 errors in 103 requests
243
searches run, 95.9% completed
100%
of customers' internal and mixed searches completed
11.2 s
median search for customers, end to end
799
candidates customers sourced with it

2 · The recruiter workspace

ranked by importance

Everything around the search, ranked by importance. Each feature gets candidates into Lope, acts on what AI Scout finds, or, in the case of Lope MCP, brings the whole CRM into the AI assistants recruiters already use.

FeatureWhat it doesStatus
InterviewsGoogle and Microsoft calendar sync, a meeting bot for Meet and Teams, speaker-separated transcripts, editable AI reports from templates, and a chat whose citations are checked against the transcript.ShippedMost-used by volume: 1,510 interviews synced
ShortlistsCandidates evaluated and ranked against a versioned client brief, with a read-only client link that hides private notes.Shipped701 AI evaluations at 99.0% success · 68 shared links
Lope MCPA hosted Model Context Protocol server: add one URL in Claude, ChatGPT, Cursor or Gemini, sign in, and search candidates, run AI Scout, manage shortlists and read interviews from the assistant. 27 tools, OAuth 2.1 with scoped permissions.ShippedWorks with Claude, ChatGPT, Cursor and Gemini
Candidate & company sheetsOne profile per candidate combining LinkedIn, GitHub, CV and interview data, with an AI summary across all of them, next to a company sheet with firmographics.ShippedLinkedIn enrichment 98.7% over ~3,000 profiles
JobsClient → Job hierarchy. A job description becomes an editable AI Scout search, with advanced weights.Shipped
Chrome extensionA LinkedIn side panel that spots candidates already in your database and adds new ones, including bulk adds from Recruiter Lite.ShippedPublished on the Chrome Web Store
Google & Microsoft accountsSign in with Google or Microsoft, then connect the work calendar that drives interview sync.Shipped13 of 23 recruiters connected a calendar
Companies“Recruit-from” pages: where your candidates work today, which companies are already clients, and firmographics.Shipped lateJuly 2026; talent-flow panel never built
CollaborationInterview comments with @mentions, an activity feed and external share links, on top of public/private access with roles enforced in the database.PartialInterviews only; follow-up tasks and threaded comments not built

Interviews

0:51

Transcript, templated summary, and a chat that links each answer to the moment in the transcript.

Lope MCP inside Claude

0:43

Sign in with scoped permissions, then ask Claude about candidates, pipelines and interviews.

Chrome extension

0:54

Spots candidates already in your database and adds new ones, fully enriched, in one click.

Client shortlist ranking three candidates with match percentages and the criteria behind the top candidate.
Shortlists. Ranked against the client's brief, with the reasons for each position.
Companies list with a company sheet open, showing firmographics, a client badge and the workspace's candidates who work there (names blurred).
Companies. Where your talent works today and which companies are clients. Demo workspace; names blurred.

3 · Smaller features

supporting the core
FeatureWhat it doesStatus
Criteria & filter tuningSuggested criteria, must-have vs optional skills, advanced weights, current/recent/full-career title matching, years of experience in a specific role, and industry inferred from a company name.Shipped
Skill inferenceCredits skills a profile shows in its own words and displays the quote behind each one. An LLM may only answer with a verbatim quote and a skill from a curated list.ShippedFinal week, July 2026 · 1,345 candidates gained evidence · 0 unverifiable quotes in audit
CSV & CV importCSV upload with field mapping; CV parsing with OCR and structured extraction, including bulk ZIP uploads.Shipped
Salary estimationA salary band per role and candidate, computed from market data, with an AI explanation that is not allowed to produce numbers.PartialGreek market bands live; company-level adjustment unfinished
Candidate trackingWatches LinkedIn for job changes, promotions, new skills and 5 other changes, with in-app and email notifications.ShippedLightly used

Also in the product: custom candidate fields, a 7-stage pipeline as a table and Kanban board, API keys, guided onboarding, and a help center with a public changelog.

Skill inference. Recreated from the product's component, with illustrative data.
Years of experience filter measured against a specific job title: at least 6 years as Full-stack Software Engineer.
Filter tuning. Count only the years spent in the role you're hiring for, not the whole career.
Salary estimation. The band is computed; the AI only explains where the profile sits. Recreated with illustrative data.
Candidate tracking. Job moves, promotions and six other changes, detected from LinkedIn. Recreated with illustrative data.

Results in production

Lope launched publicly in March 2026. Recruiters found it through LinkedIn, word of mouth, Slack and Discord communities, search, Reddit, a newsletter, a conference, and three through AI assistants (ChatGPT and Perplexity).

From July 2026 a Greek technical recruitment agency ran three recruiters on Lope as a design partner: about 950 of their interviews went through it, they ran 36 AI Scout searches and sourced ~450 candidates, and one recruiter used it across 75 days.

Most other sign-ups tried the product once. That concentration is part of why we paused.

Customer funnelexternal recruiters

How it was built

Explainable by construction

The ranking keeps a separate score for each criterion, so the explanation comes from the same numbers that produced the order.

Code decides; the model reads language

The Search Agent, the industry resolver and salary explanations work this way, and every model output is snapped back to a validated value. Salary figures are computed, never generated, and interview-chat citations are checked on the server before they render.

Multi-tenant all the way down

Row-level security on every table, with public/private visibility enforced from teamspace down to a single interview. The search engine ranks only the candidates the product sends it and never decides who may see what.

Production discipline

Long-running work runs as background jobs. Both Hetzner VMs ship immutable, commit-addressed releases with health checks and rollback, key-only SSH and closed database ports.

Three repositories (platform, search engine, help center) · 1,819 commits · ~350k lines of TypeScript and Python · 1,272 automated tests.

What we learned

Breadth is the trap for a small team

Interviews, pipeline and CRM each compete with a funded specialist. Our strategy review concluded we should cut back to explainable sourcing, the part that was hard to copy. This page is ordered the same way.

Defaults decide adoption

The meeting bot produced a transcript 77% of the time it was on, but recruiters turned it on for only 13% of interviews because auto-join defaulted to off.

Read usage from the database, not only analytics

Analytics alone said nobody reached the core workflow; the database showed active users running into coverage limits.

Pin LLM outputs that feed queries

A controlled experiment traced an apparent search bug to regenerated synonyms. Any model output that shapes a search is now cached per search.

My role

Nikos Mavrapidis · co-founder

I worked across the whole platform (product, front end, back end, data, AI search, infrastructure and documentation) and was the most active contributor in both code repositories: 622 of 1,649 platform commits and 45 of 94 search-engine commits.

AI search

AI Scout and search quality

Skill matching that understands synonyms and composite skills, tested against a before/after evaluation harness; evidence-based skill inference; the vector-recall fix; the code-verified architecture of the ranking engine.

Product & front end

The recruiter workspace

Candidate grid and Kanban pipeline, candidate sheet, Companies, shortlist review and sharing, interview collaboration, CSV import and guided onboarding.

Back end & data

Access and data integrity

The row-level-security access model and roles, candidate de-duplication, migrations and calendar-sync consolidation.

Infrastructure & quality

Production operations

Releases with rollback on both VMs, server hardening, secret rotation, CI, a large share of the test suite, and the analytics guide that made the team measure usage from the database.

Built with

64 technologies and services · show

The full stack across the three repositories, plus the services Lope ran on. Every item here is used in the code or the production setup.

Product & interface
  • Next.jsApp Router
  • React
  • TypeScript
  • Tailwind CSS
  • Radix UI
  • shadcn/ui
  • HeroUI
  • TanStackQuery · Table
  • Framer Motion
  • React Hook Form
  • Zod
  • Lottie
  • Tiptaprich text
  • Zustandstate
Back end & data
  • Node.js
  • Fastifyproduct API
  • SupabaseAuth · Realtime · Storage
  • PostgreSQLRLS · pg_cron
  • Denoedge functions
  • Python
  • FastAPIranking service
  • Milvusvector search
  • MinIO
  • etcd
AI & search
  • OpenAIGPT-4o · 4.1 · embeddings
  • Mistral AIOCR
  • Hugging FaceJobBERT · cross-encoder
  • PyTorch
  • Model Context Protocolhosted MCP
  • Gladiatranscription
  • LangfuseLLM tracing
  • Parallel AIcompany research
Data & integrations
  • LinkedInprofiles · companies
  • Apifyscraping
  • CoreSignaltalent data
  • Skribbymeeting bot
  • Google Calendarpush sync
  • Google Meet
  • Microsoft Teams
  • Microsoft GraphOutlook calendar
  • GitHubprofile enrichment
  • Chrome Web Storeextension
  • levels.fyisalary bands
  • GeoNameslocations
Infrastructure & operations
  • Netlifyweb app
  • Hetzner2 VMs
  • Cloudflaretunnel
  • Docker
  • Linuxsystemd
  • GitHub ActionsCI
  • Bunny CDN
Customers & communication
  • PostHogproduct analytics
  • Resendemail
  • Intercomsupport
  • Slackcustomer community
  • Mintlifyhelp center
Quality & tooling
  • Vitest1,272 tests
  • Playwrighte2e
  • ESLint
  • Nxmonorepo
  • Git
AI-assisted development
  • Claude Code
  • Codex
  • Cursor