Semantic Resume Aligner

July 10, 2026 (19d ago)

A local, human-in-the-loop job application assistant. It attaches to a user-selected Chrome tab (no pasted job URLs), scores tailored resume versions against the JD, then autofills ATS forms from a private resume hub — never submitting for you.

GitHub

Demo

Replace the src below with your YouTube, Loom, Vimeo, or /public video URL.

Demo video coming soon — paste a YouTube, Loom, or Vimeo URL.
Semantic Resume Aligner — Analyze → Apply → Autofill

Problem

Applications repeat the same profile data across portals with different schemas. Manual filling is slow; fully unsupervised autofill risks incorrect or overconfident submissions. Opaque “match scores” from platforms also hide why a resume fits or fails.

Pipeline

Active Job Tab ──> JD Extractor ──> Semantic Matcher ──> Structured Gap Analysis
                                         ^
                                         |
                                  Resume Data Hub
                                         |
                                         v
Active ATS Tab ──> ATS Detection ──> Selector Strategy ──> Reviewed Form Fill

Flow in the Streamlit UI: Analyze → Apply → Autofill. Matching gates resume recommendations on applyability first. Autofill uses soft ATS detection plus a shared field catalog across hosts such as Workday, Greenhouse, SuccessFactors, Dayforce, Phenom, and Oracle CX.

Zero-URL contract

Playwright attaches over CDP to a user-managed Chrome instance and operates only on an explicitly selected tab. The UI never accepts a pasted job URL or JD text — the applicant stays in control of navigation, auth, and final submit.

Human-supervised constraints

Non-negotiable gates before any apply step:

  1. No silent submit — drafts are never posted without explicit approval
  2. Diff visibility — reviewer sees mapped fields and unmatched ones for manual entry
  3. Preserve curated fields — hub profile values are not overwritten by stale import prose
  4. Fail closed — ambiguous ATS pages or mappings stop safely rather than guessing

Tech stack

Python · Streamlit · Playwright (CDP) · Pydantic · BeautifulSoup · pypdf / python-docx · Gemini / Anthropic / OpenAI

Design notes

  • Separate durable applicant data from platform-specific selectors and model reasoning
  • Validate LLM gap analysis with Pydantic (APPLY / APPLY_WITH_CAUTION / DO_NOT_APPLY / NEEDS_REVIEW)
  • Prefer importer-based refreshes over hardcoding resume prose that goes stale
  • Detect ATS from local DOM signatures, not paid URL classifiers