Skip to content

Selected work / HireLens

HireLens

Glass-box candidate ranking: every score cites the exact evidence it came from.

Role
Solo
Status
v1.4.0 · released 6 Oct 2026
License
MIT, open source
Stack
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

  1. 01 · Data

    Job description

    pasted text

  2. 02 · LLM step

    Derive rubric

    LLM · Zod-validated

  3. 03 · Data

    Rubric

    5–8 weighted criteria

  4. 04 · Data

    Resume

    PDF · DOCX · TXT

  5. 05 · Code

    Extract + parse

    deterministic

  6. 06 · Code

    Blind mask

    optional · offsets kept

  7. 07 · LLM step

    Score each criterion

    LLM · temperature 0

  8. 08 · Code

    Locate the quote

    exact match → offsets

    If the quote is not in the resume, the score is set to 0 and flagged for review.

  9. 09 · Data

    Evidence span

    chars [start, end)

  10. 10 · Code

    Weighted overall

    0–100

  11. 11 · Code

    Audit log

    hash-chained

The model proposes; code verifies. Embeddings (pgvector) power search and Ask, never scoring.

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

Senior Backend Engineer · Meridian Pay (fictional)

Weighted overall73 / 100

Event-driven & queue architecture4 of 5 · Strong

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.

Evidence: characters [306, 379), located in the resume by code, not by the model

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)
Real output from the HireLens engine (gemini-2.5-flash), fetched from the live demo on 15 Oct 2026. The candidate, company and job are fictional. Every quote is checked against its offsets when this site is built.

Decisions

The model quotes; code finds the quote.

Chose
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.
Over
Trusting offsets or citations the model reports about itself.
Cost
A sound judgement with a paraphrased quote is set to 0 and sent to a human.

A framework-free core.

Chose
The engines live in a package with no dependency on Next.js, React or any hosting SDK.
Over
Engine code inside the web app.
Gain
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

      Source: npm downloads API, read 2026-10-15

    • 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.