An AI-powered resume-to-score pipeline that runs on your own hardware — enriches candidates with real code-host evidence, and flags projects that were vibe-coded by an AI rather than engineered by a human.
Hundreds of resumes per role. Manual review is slow, inconsistent, and biased.
Resumes are dense PII. SaaS screeners ship that data to third-party clouds.
Anyone can prompt an agent to ship a polished "full-stack platform" — with zero real coding skill.
We solve all three — locally, fairly, and with a signal nobody else has.
PDF → structured JSON (basics, work, projects, skills) via a local LLM.
Pull public signals from GitHub & Codeberg — repos, commits, contributions.
Rubric-based evaluation with per-category evidence + an authorship flag.
Every score carries its reasoning — a recommendation for a human, never an automatic verdict.
Scoring is forbidden from using:
+20 bonus (GSoC, blogs, portfolio) · deductions for tutorial-only / link-less projects.
╭──────────────────────────────────────────────────────────╮ │ Presentation Web demo / sealed desktop GUI │ ├──────────────────────────────────────────────────────────┤ │ Governance consent · retention · erasure · audit · │ │ human-in-the-loop gate (GDPR Art. 22) │ ├──────────────────────────────────────────────────────────┤ │ Orchestration pipeline service │ ├──────────────────────────────────────────────────────────┤ │ Providers resume-parser │ code-hosts │ LLMs │ │ PDF/PyMuPDF │ GitHub·Codeberg │ LM Studio │ ├──────────────────────────────────────────────────────────┤ │ Storage encrypted local vault (PII) + │ │ pseudonymous evaluations + cache │ ╰──────────────────────────────────────────────────────────╯
╭───────────── Recruiter's machine (trust boundary) ─────────────╮
│ resume.pdf ─▶ parse ─▶ PII vault (encrypted, local) │
│ │ │
│ ▼ │
│ LOCAL LLM ──── extraction + scoring │
│ │ (PII never leaves) │
│ ▼ │
│ extract public handle only ──┐ │
╰───────────────────────────────────┼───────────────────────────╯
│ ONLY "github.com/jdoe"
▼ (no resume data)
╭───────────────────────╮
│ GitHub / Codeberg API │ public data
╰───────────────────────╯
Resume PII and code-host queries are two separate flows. The cloud LLM option is the only thing that breaks this — so it is off by default, warned, and audited.
Rich REST API: repos, contributors, commits. The primary source.
Forgejo/Gitea API. Classification adapted (no /contributors); co-author trailers still parsed.
No reliable per-user / per-author commit API — would produce misleading scores.
Same project shape from every provider, so selection & scoring stay platform-agnostic.
Many independent human commits, real iteration & debugging, AI co-authors some work. Normal in 2026.
AI authored ~everything, one-day dump, no iteration, the candidate has almost no independent commits anywhere.
We don't claim "AI wrote this." We surface a low-real-coding-confidence review flag — and recommend a live interview.
AI co-author ratio Tier 1
up to +40 — bot logins & Co-Authored-By: Claude
Low human commits
up to +20
Temporal compression
up to +15 — built in one window
History poverty
up to +10 — single "Initial commit" dump
No issues / forks / scaffolding
up to +5
Generic messages · AI-marker files
up to +5 each (tie-breakers)
<30 ok 30–60 review >60 flag
Maintenance bots (dependabot, renovate, CI) are explicitly excluded — they never trigger the flag.
| Candidate | Platform | Score | Authorship |
|---|---|---|---|
| A — real engineer upstream OSS, multi-year history | GitHub | 88/120 | ✓ ok · 9 human commits |
| B — vibe-coder "AI startup platform", one-day build | GitHub | 71/120 | ⚠ flag · 95/100 risk |
| C — contributor genuine Codeberg work | Codeberg | 79/120 | ✓ ok |
Candidate B looks impressive on the surface — every commit is Co-Authored-By: Claude. That's the "wow, it caught that" moment.
HR PC (8GB, no GPU) ╮
HR PC (16GB) ├──LAN──▶ ╭──────────────────────────╮
HR PC (64GB) ╯ │ Inference server (on-prem)│
│ Qwen2.5-32B · pinned ver. │
╰──────────────────────────╯
Every candidate judged by the same pinned model — fair & auditable.
HR PCs are thin clients; only one machine needs the GPU.
Traffic stays on the company LAN — never the internet.
DEMO (your laptop) PRODUCTION (HR dept)
╭─────────────────────╮ ╭─────────────────────╮
│ App ──▶ LM Studio │ │ HR PCs ──LAN──▶ GPU │
│ localhost:1234 │ one env │ inference srv │
╰─────────────────────╯ var ───▶ ╰─────────────────────╯
same code path · identical behavior
Ship to a real HR department by changing one variable: INFERENCE_BASE_URL.
| GDPR concern | How we handle it |
|---|---|
| Data residency | Local LLM by default — PII never leaves the device |
| Automated decisions (Art. 22) | Recommendation + evidence; human-in-the-loop required |
| Right to erasure / access | Delete & export a candidate by pseudonymous ID |
| Data minimization | PII vault separate from evaluations |
| Security (Art. 32) | Encryption at rest; no plaintext resume cache |
| Accountability | Append-only audit log (model, mode, time) |
Engineering guidance, not legal advice — a formal DPIA + counsel sign-off is required before production use.
Local-first. Fair. Explainable. And it catches what every other screener misses. Let's deploy it.