Bulk Resume Parser: Score, Fix, and Rebuild It Against the Job (Free, On-Device)

Parse & Score: Extract Structured Signals Locally

Run parsing entirely client-side using pdf.js (PDFs) and mammoth.js (DOCX) via Web Workers to keep the UI responsive during bulk loads. Do not upload files. Extract raw text, then run a lightweight NER model (e.g., @xenova/transformers with a distilled BERT NER quantized to INT8) to tag entities: SKILL, TITLE, ORG, DATE, METRIC. Normalize dates to ISO 8601 intervals (handling "Present", "Summer '22") to calculate exact tenure in months. Build a skill taxonomy map (O*NET / ESCO) to cluster variants ("React.js", "React", "ReactJS" → skill:react). Score each resume against the JD using a weighted hybrid: 40% hard skill Jaccard index (required vs. found), 30% semantic similarity (embed JD + resume chunks with all-MiniLM-L6-v2 ONNX, cosine > 0.72), 20% seniority match (years of highest-matching title), 10% metric density (count of $, %, KPIs per 100 words). Output a JSONL file: {file, score, missing_skills:[], gaps:{skill:months_short}}.

Fix & Rebuild: Deterministic Tailoring

For the "Fix" phase, generate a diff view. For every missing required skill, locate the nearest semantic neighbor in the candidate's history (e.g., missing "Kubernetes" → found "Docker Swarm orchestration"). Suggest a one-line bullet injection: "Orchestrated 15+ containerized microservices via Docker Swarm (Kubernetes-adjacent)". For metric gaps, scan existing bullets for action verbs without numbers; prompt user to add scale (team size, budget, latency drop). Rebuild the resume by rendering a clean, ATS-safe HTML template (single column, standard fonts, no columns/graphics) using the structured JSON. Inject tailored bullets into the relevant role section, preserving chronology. Export three artifacts: 1) .pdf via pdf-lib (text-layer only, tagged PDF/UA), 2) .docx via docx.js for recruiter edits, 3) .json (portable career asset). Validate

Skip the DIY. VaultPDF's Screen the Stack room does exactly this — drop a folder, get a ranked sheet back, nothing ever leaves your machine.
Try it free →