Back to projects

Full-stack / Applied AI / Engineering notes

HireLens

I built a CV analysis workflow and tested an offline journey from upload and feedback to tracking, history, and deletion using synthetic inputs.

Inspect the repository

Reviewed 6 October 2026 · Offline synthetic fixtures · Latest implementation changes remain unpublished

HireLens offline analysis with illustrative synthetic match and ATS scores
Local offline journey with mocked authentication/API responses. Displayed fixture scores are illustrative, not employer ATS results or hiring predictions. Select the image for the full-size capture.

The problem

CV tools can blur extracted facts, rule-based scores, and generated advice. I wanted a workflow where users can inspect feedback, understand its limits, and keep analysis and tracker history consistent.

My contribution

I built a FastAPI backend and React interface with document processing, LLM integration, a Supabase-backed workflow, and a five-language interface. The latest local pass adds output validation, ownership checks, consistent scoring/history, streaming handling, retry states, and mobile interaction improvements. These latest changes have not yet been committed or published to the linked repository.

One decision: separate facts from advice

Match and ATS scores are application heuristics applied to extracted fields, not hiring predictions. Both results are computed before one history insert. Changing the CV/job pair invalidates old results; late responses are ignored. Generated advice is labeled separately, with structural checks and failure/retry states. Valid JSON alone does not prove truthful advice.

Verification and evidence scope

The 6 October local record reports 41 backend tests, three frontend streaming tests, two Chromium journeys at 1440×1000 and 390×844, and seven authored evaluation controls. The inspected journey report records no browser errors, unexpected external requests, or horizontal analysis overflow. Browser authentication/API responses are mocked; separate API tests execute real routers with in-memory service adapters. These layers do not establish a live browser-to-database flow, deployed Supabase permissions, or model accuracy. Authored controls test the evaluator, not a model.

Demo

The latest local offline runner can be launched from the frontend with HEADED=1 and npm run test:journey after installing Chromium. It walks through upload validation, job input, scoring, generation failure/retry, tracker save/update, history, deletion, and sign-out. It uses synthetic identities and mocked providers, needs no API keys, and makes no live model calls. The screenshots here show that local runner; the linked public repository does not yet contain this latest demo implementation.

Limits and next work

Live OAuth, Groq output quality, Supabase permissions, and email delivery remain unverified. Human review of model responses is still needed. Chromium coverage is limited to two emulated viewports and a selected journey. Parser isolation, broader accessibility checks, and dependency remediation remain priorities.

Get in touch