HireLens
Glass-box candidate ranking: every score cites the exact evidence it came from.
- Solo
- v1.4.0 · released 6 Oct 2026
- MIT, open source
- TypeScript · Next.js 16 · Hono · Postgres + pgvector · Drizzle · Turborepo
The problem
Most AI screening tools return a bare number. Recruiters can’t check it, candidates can’t question it, and nobody can tell whether it treats groups of people differently.
Constraints
Resumes are personal data. Scoring has to work with self-hosted models through Ollama, as well as hosted providers, so a recruiter can keep resumes on their own machine.
The recruiter stays in charge. The rubric is drafted from the job description, then reviewed and edited before anything is scored.
Free-tier hosting. Vercel for the app and the API, plus a scale-to-zero Postgres with pgvector.
Architecture
Job description
Derive rubric
Rubric
Resume
Extract + parse
Blind mask
Score each criterion
Locate the quote
Evidence span
Weighted overall
Audit log
In action
One fictional resume, scored by the production engine. Pick a criterion to see the evidence it cited; switch on blind review to see what reviewers get instead.
How HireLens scored a candidate
Event-driven & queue architecture
The candidate built event-driven services and designed idempotent webhook delivery with a Postgres-backed outbox table, which aligns with designing queues with retries or ordering. They also built retry queues with exponential backoff, demonstrating a solid understanding of queue architecture.
PostgreSQL at scale
The candidate owned a PostgreSQL schema for a 200M-row ledger and cut slow queries by 60%, indicating experience with tuning queries and designing schemas for large tables. This demonstrates solid experience with PostgreSQL at scale.
Distributed systems fundamentals
The candidate designed idempotent webhook delivery and built retry queues with exponential backoff, showing experience handling retries and idempotency in services. This aligns with the 'Basic' level of handling these aspects in one service.
Reliability & incident response
The candidate introduced SLO dashboards and on-call runbooks, leading to a 45% reduction in MTTR. This demonstrates driving incident response and improving MTTR, aligning with the 'Solid' level.
Fintech / payments context
The candidate led the migration of a payments platform and owned a PostgreSQL schema for a 200M-row ledger. This indicates direct work on payments or settlement services, fitting the 'Solid' description.
Kubernetes & infrastructure as code
The candidate led the migration of the payments platform to Kubernetes and lists Kubernetes and Terraform in their skills. This suggests they owned Kubernetes infrastructure for production, aligning with the 'Strong' level.
Jordan Avery Senior Backend Engineer — San Francisco, CA — jordan.avery@example.com EXPERIENCE Senior Backend Engineer — Acme Corp — 2021–present - Led migration of the payments platform to Kubernetes, cutting deploy time 80%. - Built event-driven services in TypeScript on Node.js handling 40k req/s. - Designed idempotent webhook delivery with a Postgres-backed outbox table. - Introduced SLO dashboards and on-call runbooks; MTTR down 45%. Backend Engineer — Northwind Systems — 2018–2021 - Owned PostgreSQL schema for a 200M-row ledger; cut slow queries 60%. - Built retry queues with exponential backoff for third-party integrations. - Participated in weekly incident reviews and postmortems. SKILLS TypeScript, Node.js, Go, PostgreSQL, Redis, Kafka, Kubernetes, Terraform, AWS EDUCATION B.S. Computer Science, State University (2014–2018)
■■■■■■■■■■■■ Senior Backend Engineer — San Francisco, CA — ■■■■■■■■■■■■■■■■■■■■■■■■ EXPERIENCE Senior Backend Engineer — Acme Corp — 2021–present - Led migration of the payments platform to Kubernetes, cutting deploy time 80%. - Built event-driven services in TypeScript on Node.js handling 40k req/s. - Designed idempotent webhook delivery with a Postgres-backed outbox table. - Introduced SLO dashboards and on-call runbooks; MTTR down 45%. Backend Engineer — Northwind Systems — 2018–2021 - Owned PostgreSQL schema for a 200M-row ledger; cut slow queries 60%. - Built retry queues with exponential backoff for third-party integrations. - Participated in weekly incident reviews and postmortems. SKILLS TypeScript, Node.js, Go, PostgreSQL, Redis, Kafka, Kubernetes, Terraform, AWS EDUCATION B.S. Computer Science, State University (2014–2018)
Decisions
The model quotes; code finds the quote.
- The LLM returns a verbatim quote. Deterministic code locates it in the resume and records the character offsets: an exact match first, then a whitespace-collapsed one.
- Trusting offsets or citations the model reports about itself.
- A sound judgement with a paraphrased quote is set to 0 and sent to a human.
A framework-free core.
- The engines live in a package with no dependency on Next.js, React or any hosting SDK.
- Engine code inside the web app.
- The product, the public demo and the eval harness all run the same scoring engine.
Evaluation
A seeded synthetic benchmark runs through the same scoring engine as the product and measures direction accuracy, self-consistency, position bias (Kendall τ under shuffled order) and name-swap bias.
Outcome
522
npm downloads of the hirelens CLI, 12 Sep – 11 Oct 2026
- v1.4.0 released 6 October 2026.
- Ships as the hirelens CLI on npm and as container images on GHCR.
- Self-hosts with one docker compose command.
What I’d change next
Run the seeded benchmark in CI against a real model, so accuracy and name-swap bias are measured on every change rather than only unit-tested. Then the roadmap items for teams: SSO and SAML, finer-grained roles, and i18n.