ENGINEERING CASE STUDY / 2026
JobLens
Turn multiple CVs into one truthful CV, with evidence at every step.
JobLens 2.0 is a local application for turning 1–5 existing PDF/DOCX CVs into one job-tailored CV. It extracts source-grounded facts, reconciles conflicting details, generates a deterministic draft, lets the candidate review and edit every line, and exports real PDF or DOCX files. The main web flow is deterministic; no LLM is used to generate the CV.
JobLens 2.0 is an unpublished local release candidate. It is not the older public synthetic demo and is not available as a public repository.

OVERVIEW
What was built, how it was validated, and what remains limited
JobLens 2.0 moves from evidence inspection to evidence-grounded CV generation. It processes multiple CVs, consolidates candidate facts, parses a job posting, generates a draft, supports human review and exports a real document. Recorded results include 556 Python tests, 109 Node UI tests and 20 evaluation scenarios.
- Built: PDF/DOCX ingestion, source provenance, profile reconciliation, job parsing, deterministic CV generation, editable preview, review workflow and PDF/DOCX export.
- Validated: unit, integration, UI, release-safety, fact-preservation and synthetic end-to-end tests.
- Limited: synthetic-data scope, no OCR, no cloud deployment, no persistence beyond explicit profile export/import, no hiring prediction.
KEY ENGINEERING DECISION
Evidence states instead of a hiring score
The product avoids a black-box score. It shows documented requirements, tag-only matches, evidence gaps, context-only mentions and manual-review conditions. A gap is shown as a gap, not as proof that a candidate lacks ability. Final export requires explicit candidate confirmation.
PRODUCT JOURNEY
From multiple CVs to one confirmed CV.
The journey is deterministic and human-reviewed. Every generated line remains traceable to source evidence.
Upload 1–5 CVs
PDF and DOCX files are read locally and never persisted.
Extract evidence
Text, page or paragraph locators and source quotations are captured.
Reconcile facts
Compatible proposals merge; disputed details are omitted.
Parse the job
Requirements are matched with whole-term technology matching.
Generate CV
A deterministic draft ranks source-backed facts against the posting.
Review and export
Editable preview, contact prefill, confirmation and PDF/DOCX export.

PROBLEM AND DECISIONS
Useful recommendations without invented evidence.
The practical problem is not ranking candidates. It is showing what is documented, what needs verification and what requires a human decision.
Problem
Job matching is often reduced to a score. JobLens instead separates documented requirements, tag-only matches, evidence gaps, context-only mentions and manual-review conditions. It never turns a missing requirement into a candidate skill.
Constraints
- Synthetic-data scope for the public demonstration.
- Text-based PDF and DOCX only; no OCR.
- Small explicit skill vocabulary; unrecognised requirements remain for manual review.
- Local, loopback-only execution with no cloud service.
- No persistence, accounts or background jobs.
ARCHITECTURE
The browser is a viewer; Python evaluates and renders.
The evidence bank stays server-side. The browser receives candidate metadata, synthetic postings and reports. Approved profiles can be exported and imported as private JSON, but there is no database.
BROWSER
LOCAL API
ENGINE
Verified capabilities
- PDF and DOCX ingestion with page or paragraph provenance.
- Up to five CVs per batch.
- Conservative candidate profile consolidation.
- Job parsing with whole-term technology matching.
- Deterministic, evidence-grounded CV generation.
- Editable preview, review and contact prefill.
- Real PDF and DOCX export.
Engineering invariants
- Disputed details are omitted rather than guessed.
- Human approval binds to exact content, contact details and section order.
- Editing invalidates confirmation.
- Stale confirmation or download responses are discarded.
- Changed wording requires explicit candidate attestation.
- Unsupported requirements remain gaps and never become skills.
EVIDENCE AND REVIEW
Documented, partial, missing and manually reviewed.
Coverage means documented evidence in the bank. It is not ability, seniority or likelihood of an interview.
Review workspace

Decision report

Evidence states
- Documented5 / 5 required
- Tag only0 / 2 preferred
- Evidence gapshown as a gap
- Human review4 gates surfaced
No score. No prediction. The report separates documented evidence from what still needs a human.
Example result
With fictional candidate Alex Rivera and the Junior AI Engineer posting, the report returns 5/5 documented required skills, 0/2 preferred skills andREVIEW_REQUIRED because degree, authorization, production depth and experience gates remain. The tests lock these outcomes so documentation cannot drift silently.
JobLens 1.0 public demo remains available separately. It is synthetic-only and does not implement the 2.0 CV-tailoring workflow.
VALIDATION AND PRIVACY
Recorded checks with explicit scope.
The release candidate was validated with unit, integration, UI, release-safety, fact-preservation and synthetic end-to-end tests.
Recorded results
- 556 Python tests passed.
- 109 Node UI tests passed.
- Ruff: all checks passed.
- 20 evaluation scenarios: 19 successful, 1 expected error, 0 unexpected failures.
- Fact preservation: 55/55; forbidden insertions: 0/21.
- Supported requirement recall: 22/22; unsupported leakage: 0/3.
- PDF/DOCX mean token Jaccard: 1.0; review enforcement: 65/65.
Privacy controls
- Loopback-only server with host, origin and request-token checks.
- Upload limits: 5 documents, 10 MiB per file, 25 MiB batch, 100 PDF pages, 20,000 DOCX paragraphs.
- Request bodies and CV text are not logged.
- No persistence, analytics, cloud calls or external data requests in the main flow.
- Static assets are allow-listed; source files and fixtures cannot be fetched through application routes.
- Exports use fixed safe filenames and
Cache-Control: no-store.
Version distinction
The public GitHub repository currently contains the older synthetic JobLens demo. JobLens 2.0 is the unpublished local release candidate. Claims about 2.0 capabilities in this portfolio are based on the local release candidate, not on the public repository.
LIMITATIONS AND SOURCE
Deliberately narrow, not a hiring predictor.
JobLens is an evidence-review aid. It is not an ATS and not a hiring predictor.
- Text-based PDF and DOCX only; no OCR. Complex columns, tables and unusual layouts need careful review.
- Extraction uses a bounded English vocabulary and may omit information. No automatic translation.
- No scraping, LinkedIn account connection, cloud hosting, database or background persistence.
- Conservative omission may discard useful ambiguous information.
- One export template is provided.
- Contact prefill is a suggestion layer over bounded extraction, not identity verification.
- Decision explanations are plain-English renderings of deterministic rules, not model reasoning or confidence estimates.
- The preview is an editable content view, not a pixel-identical pagination simulator.
- Signatures validate the current local process and exact reviewed content, not the identity of the human making a declaration.
- The public repository contains the older synthetic demo, not JobLens 2.0.
- Windows and Safari remain manual, unverified checks.
CONTACT
Have a hard problem?
Let's make it measurable.
Open to AI Engineer, Applied ML and Software Engineer roles where evaluation and engineering judgment matter as much as model choice. Based in Madrid.
Open to AI Engineer, Applied ML and Software Engineer roles