Inspiration

Many qualified candidates miss interviews because their resumes are not tailored to a specific Job Description (JD). Recruiters and ATS systems search for role‑specific skills and phrasing. Resume Job Matcher closes that gap by extracting the JD, analyzing alignment, and producing targeted rewrites that explicitly add missing skills while preserving impact and authenticity.

What it does

  • Chrome extension (popup)

    • Analyze Resume vs JD using on‑device Prompt API, rendered as crisp cards (match score, missing skills, strengths, recommendations).
    • Summarize JD via Summarizer API for a quick understanding of requirements and responsibilities.
    • “Rewrite Resume Points” securely opens the companion website and hands off JD + resume.
  • Website app

    • Auto‑ingests JD and resume from the extension; provides a guided chat for refinement.
    • Rewriter flow: first builds a JSON “rewrite plan” with few‑shot patterns using Prompt API, then rewrites with Rewriter API to add missing JD skills naturally into bullets.
    • Cover letter generation using Writer API.
    • Proofreading using Proofreader API with a paragraph‑level strategy and a Prompt API fallback; includes a side‑by‑side diff to visualize changes.
    • Optional Gemini fallback for chat when Prompt API is unavailable.

How we built it

  • Chrome MV3 extension

    • content.js extracts LinkedIn JD (resilient selectors + MutationObserver).
    • popup.js drives Analyze/Summarize/Rewrite actions and renders readable results.
    • background.js brokers chrome.runtime.onMessageExternal for secure storage handoff.
  • Website (single‑page app)

    • index.html ingests data via chrome.runtime.sendMessage + chrome.storage.local and orchestrates chat, rewriting, cover letter, and proofreading.
    • Robust JSON normalization, fence‑stripping, and card components for consistent rendering.
  • Chrome AI APIs

    • Prompt API (LanguageModel): analysis, initial recommendations, chat, proofreading fallback.
    • Summarizer: JD and resume summaries (including popup JD summary).
    • Rewriter: few‑shot‑style context to add missing JD skills into bullets while preserving metrics.
    • Writer: cover letter generation.
    • Proofreader: grammar/spelling with paragraph chunking + fallback.
  • Fallback

    • Gemini Developer API (gemini‑1.5‑flash) for chat when Prompt API isn’t available.
  • UX resilience

    • Resilient JD scraping, strict output contracts, and graceful capability gating for devices without newer Chrome AI models.

Challenges we ran into

  • Dynamic LinkedIn DOM (lazy content + shifting selectors): mitigated with retries and an MutationObserver‑based extractor.
  • Cross‑surface handoff: avoided URL length limits and brittleness by persisting JD/resume in extension storage and fetching via onMessageExternal.
  • Model availability/guardrails: Chrome AI APIs may be unavailable or blocked for “low quality” output; added capability checks, paragraph chunking, and Prompt/Gemini fallbacks.
  • Output readability: models can emit JSON/markdown unpredictably; enforced strict prompts, fence‑stripping, normalization, and card components to ensure clarity.

Accomplishments that we're proud of

  • A compact popup and professional website UI that present AI output clearly and concisely.
  • A resilient JD extractor that handles dynamic page loads reliably.
  • A two‑step rewriter pipeline that logically adds missing JD skills using few‑shot‑style examples, not just generic paraphrasing.
  • Proofreading with side‑by‑side diff and resilient fallbacks so corrections always apply.
  • Optional Gemini fallback to keep chat working off‑device when Prompt API isn’t available.

What we learned

  • Practical limits and feature flags of Chrome AI APIs (Prompt, Summarizer, Rewriter, Writer, Proofreader) and how to degrade gracefully.
  • The value of strict output contracts and post‑processing for reliable, readable UI.
  • MV3 messaging/storage patterns for low‑friction handoff between extension and website.
  • How small UX touches (concise layouts, status toasts, precise errors) raise trust and usability.

What's next for Resume Job Matcher

  • Host a public demo (Netlify/Vercel) and publish to the Chrome Web Store.
  • Introduce export (PDF/Word/TXT) with a robust library and tests.
  • Multi‑source JD intake (paste/upload) and multi‑resume management.
  • Role‑specific rewrite templates with measurable impact prompts.
  • Optional analytics (opt‑in) for alignment score trends; better scoring heuristics.
  • Broader model options and fallbacks (Gemini variants, rate‑limit handling, retries).
  • Privacy polish (clear data lifecycle, local‑only toggles).

Tech stack

  • Languages/UI: HTML, CSS, JavaScript (vanilla)
  • Extension: MV3 (service worker, content scripts, action popup)
  • Chrome APIs: chrome.runtime (internal/external messaging), chrome.storage.local, activeTab, scripting
  • Chrome AI: Prompt, Summarizer, Rewriter, Writer, Proofreader
  • Fallback AI: Gemini Developer API (gemini‑1.5‑flash)
  • PDF parsing: pdf.js (CDN)

Built With

Share this project:

Updates