Semantic Resume Aligner

Local Analyze → Apply → Autofill workflow: match resume versions to a selected job tab, then fill ATS forms under applicant review.

July 10, 2026 (2mo ago)

Demo

GitHub

Analyze and Autofill as separate sections, each with bookmark tabs and one GIF slot.

Analyze

APPLY
APPLY recommendation with a selected resume version.

Autofill

Work & education
Work history and education from the hub. On Phenom, Role description is also filled.

Problem

How can repetitive ATS applications be accelerated without unsupervised submission, and without pasting job URLs into a third-party service?

A local Streamlit assistant attaches to a Chrome tab the user selects, ranks tailored resume versions against the job description, and fills recognized form fields from a private resume hub. Final submission stays with the applicant.

Approach

  1. Analyze — extract the JD from the active LinkedIn job tab; score applyability first, then rank resume versions (deterministic by default; optional LLM via MATCH_USE_LLM=1)
  2. Apply — open or focus the company ATS tab under user control
  3. Autofill — soft ATS detection + shared field catalog; experience adapters for Workday / Phenom / Dayforce page shapes
  4. Human review — report filled vs unmatched fields; never click Submit

Operating constraints: no automatic submit; fill visibility; curated hub fields preserved on import; unknown hosts may still receive catalog fills.

Results

  • Local Analyze → Apply → Autofill pipeline is implemented and documented on GitHub
  • Recommendation labels: APPLY / APPLY_WITH_CAUTION / DO_NOT_APPLY / NEEDS_REVIEW
  • Catalog coverage includes Workday, Greenhouse, SuccessFactors, Dayforce, Phenom, Jobvite, Oracle Cloud, and similar hosts
  • A field-level validation table (ATS × fields filled × failure modes) and a published accuracy sample are forthcoming

Limitations

  • Unsupervised end-to-end submission is out of scope
  • ATS coverage is incomplete and DOM-signature based; new portals need catalog or adapter work
  • Recommendation labels do not yet have a published accuracy sample
  • The private resume hub remains local; this post does not include personal data

Stack

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

Notes

Pipeline diagram, Zero-URL contract, design notes
Active Job Tab ──> JD Extractor ──> Matcher ──> Structured Gap Analysis
                                         ^
                                         |
                                  Resume Data Hub
                                         |
                                         v
Active ATS Tab ──> Soft ATS Hint ──> Catalog / Adapters ──> Reviewed Form Fill

Zero-URL: Playwright attaches over CDP to a user-managed Chrome instance and operates only on an explicitly selected tab. The UI does not accept a pasted job URL or JD text.

Design notes

  • Keep durable applicant data separate from platform DOM details and optional model calls
  • Validate match results with Pydantic; keep the default path deterministic
  • Prefer importer-based resume refreshes over hardcoded prose that drifts out of date
  • Treat ATS detection from local DOM signatures as a hint, not a paid URL-classification gate