Skip to content

techmahr/JD-Match-AI-Powered-Job-Fit-Analyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

⚡ JD Match — AI-Powered Job Fit Analyzer

A Chrome extension that reads any job description and tells you instantly whether the role suits your profile — powered by Google Gemini AI.

Chrome Extension Manifest V3 Gemini AI License


What Is This?

JD Match is a private-use Chrome extension that sits quietly in your browser toolbar. When you're browsing job listings on LinkedIn, Naukri, Indeed, Glassdoor, or any major job site — activate it, click Analyze, and within seconds you get:

  • A match score out of 100
  • A clear verdict (Strong Fit / Good Fit / Partial Fit / Low Fit)
  • Your specific strengths that match the role
  • Gaps you should be aware of before applying
  • A one-line recommendation on whether to apply or skip
  • An Apply / Skip badge

No switching tabs. No copy-pasting. No manual comparison. Just open a job and know your fit in seconds.


Screenshots

┌─────────────────────────────┐
│ ⚡ JD MATCH             On ●│
├─────────────────────────────┤
│  Dashboard  Resume  Settings│
├─────────────────────────────┤
│                             │
│   ╭──────╮  STRONG FIT      │
│   │  92  │  ✓ Apply         │
│   │ /100 │  PM · Acme Corp  │
│   ╰──────╯                  │
│                             │
│  Your 12+ yrs PM experience │
│  directly matches this role.│
│                             │
│  ✓ Strengths                │
│  ✓ 12+ yrs Program/PM exp   │
│  ✓ GenAI delivery leadership│
│  ✓ BFSI domain expertise    │
│                             │
│  ✗ Gaps                     │
│  ✗ No Salesforce CRM mention│
│                             │
│              ↺ Re-analyze   │
└─────────────────────────────┘

Features

Feature Description
ON / OFF Toggle Extension is completely invisible when off — no widgets, no activity
Match Score 0–100 score with color coding (green / amber / red)
Verdict STRONG FIT / GOOD FIT / PARTIAL FIT / LOW FIT
Strengths & Gaps Specific bullet points drawn from your actual resume
Apply / Skip Badge Clear yes/no recommendation
Auto-scan Mode Analyzes job pages automatically the moment you open them
Floating Widget Draggable widget appears on job pages — stays out of your way
Resume Storage Paste your CV once, saved locally forever
Custom Prompt Tell the AI what to focus on — role types, deal-breakers, preferences
Re-analyze One click to re-run analysis on the same page
Tab Badge Score appears on the extension icon for the active tab

Supported Job Sites

The floating widget activates automatically on these platforms:

  • LinkedIn Jobs
  • Naukri.com
  • Indeed
  • Glassdoor
  • Instahyre
  • Foundit (Monster India)
  • Shine.com
  • Wellfound (AngelList Talent)
  • Lever (jobs.lever.co)
  • Greenhouse (boards.greenhouse.io)
  • Workable (apply.workable.com)
  • Workday (myworkdayjobs.com)
  • Google Careers
  • Amazon Jobs

For any other job site not listed above, use the "Analyze Current Page" button inside the popup — it works on any page.


How It Works

You open a job listing
        │
        ▼
Content script extracts the job description text
        │
        ▼
Text is sent to the background service worker
        │
        ▼
Background fetches your saved resume + custom prompt from Chrome storage
        │
        ▼
Both are sent to Gemini 2.5 Flash API with a structured analysis prompt
        │
        ▼
Gemini returns a JSON object with score, verdict, strengths, gaps
        │
        ▼
Result is displayed in the floating widget and popup dashboard
        │
        ▼
Score badge appears on the extension toolbar icon

Smart Text Extraction

The extension uses a priority-based selector system to find the most relevant part of each job page:

  1. Tries known job-specific CSS selectors for each supported site (e.g. .jobs-description for LinkedIn, .job-desc for Naukri)
  2. Falls back to <main>, <article>, or [role="main"]
  3. Last resort: extracts from document.body

Input is trimmed to ~3000 characters each for the resume and JD before sending, keeping the Gemini prompt efficient and the response fast.


Tech Stack

Layer Technology
Runtime Chrome Extension — Manifest V3
Background Service Worker (background.js)
Content Script Vanilla JavaScript + CSS injected into job pages
Popup UI HTML + CSS + Vanilla JavaScript (no frameworks)
AI Model Google Gemini 2.5 Flash via REST API
Storage Chrome storage.local API (device-local only)
Icons Python (Pillow) generated PNG assets

No build tools, no npm, no bundler. Pure browser-native code — load it directly into Chrome.


Installation

Prerequisites

  • Google Chrome browser
  • A free Gemini API key (takes 2 minutes — instructions below)

Step 1 — Download the Extension

Option A — Clone this repo:

git clone https://github.com/YOUR_USERNAME/jd-match.git

Option B — Download ZIP:

  • Click the green Code button → Download ZIP
  • Extract the ZIP to a folder on your computer (e.g. jd-match on your Desktop)

Step 2 — Load Into Chrome

  1. Open Chrome and go to: chrome://extensions
  2. Enable Developer mode using the toggle in the top-right corner
  3. Click Load unpacked
  4. Select the jd-matcher folder (the one containing manifest.json)
  5. The ⚡ JD Match icon will appear in your Chrome toolbar

Tip: Pin it for easy access — click the puzzle piece icon in Chrome toolbar → pin JD Match


Step 3 — Get Your Gemini API Key (Free)

  1. Go to https://aistudio.google.com/app/apikey
  2. Sign in with your Google account
  3. Click Create API keyCreate API key in new project
  4. Copy the key (starts with AIza...)

The Gemini API free tier gives you 1,500 requests per day — more than enough for active job hunting. This is separate from your paid Gemini subscription.


Step 4 — First-Time Setup

  1. Click the ⚡ icon in Chrome toolbar to open JD Match
  2. Go to the Settings tab:
    • Paste your Gemini API key → click Save Key
    • Optionally write custom instructions (see Custom Prompt below)
  3. Go to the Resume tab:
    • Paste your full CV/resume as plain text → click Save Resume
  4. Toggle the extension ON using the switch in the header

You're ready. Open any job listing and click Analyze This Job in the widget.


Usage Guide

Manual Mode (Default)

  1. Toggle the extension ON
  2. Open a job listing on any supported site
  3. A small ⚡ JD Match widget appears at the bottom-right of the page
  4. Click Analyze This Job
  5. Wait ~3–5 seconds for Gemini to analyze
  6. Your result appears in the widget — and in the popup dashboard

Auto-Scan Mode

For zero-click analysis:

  1. Go to Settings tab → enable Auto-scan Job Pages
  2. Now every time you open a job listing, it analyzes automatically
  3. The widget shows the result within a few seconds of the page loading
  4. The extension icon badge also shows your score

Tip: Auto-scan is great when you're quickly browsing a list of jobs. Toggle it off when you only want to analyze specific listings.

Analyzing from the Popup

You can also trigger analysis directly from the popup:

  1. Open any job page
  2. Click the ⚡ icon in your toolbar
  3. On the Dashboard tab → click Analyze Current Page

Re-analyzing

If the JD was still loading when you first clicked, or you want a fresh result:

  • Click ↺ Re-analyze at the bottom of the result in the widget or popup

Moving the Widget

The floating widget is draggable. Click and hold the header bar (where it says "⚡ JD Match") and drag it anywhere on the page.

Hiding the Widget

Click the × button on the widget to hide it. It will reappear the next time you navigate to a job page.


Custom Prompt

The custom prompt is your most powerful personalization tool. It tells Gemini what to focus on when analyzing jobs for you specifically.

Where to set it: Settings tab → Custom Analysis Instructions

Examples:

Focus on Program Manager and Delivery Manager roles. 
Prioritize BFSI domain experience. 
Flag if the role is contract or freelance — I want full-time only. 
Bonus points if the company is an MNC or has ANZ market presence.
I am targeting AI Product Manager roles. 
Weigh GenAI, LLM, and conversational AI experience heavily. 
Ignore roles that require hands-on ML/data science work.
Flag if the company is a startup under Series B.
I have 12 years of experience. Do not recommend roles below senior level.
Highlight any mention of stakeholder management, enterprise clients, or P&L ownership.

Score Guide

Score Verdict What It Means
80 – 100 🟢 STRONG FIT Your profile closely matches. Apply with confidence.
60 – 79 🟡 GOOD FIT Strong overlap. Minor gaps. Worth applying.
40 – 59 🟠 PARTIAL FIT Some match, some gaps. Apply selectively.
0 – 39 🔴 LOW FIT Significant mismatch. Consider skipping.

Privacy & Data

This extension was built with privacy as a core principle.

What How
Your resume Stored in Chrome's storage.local — on your device only, never transmitted anywhere except to Gemini for analysis
Your API key Stored in Chrome's storage.local — never leaves your browser except as an authentication header to Google's API
Your custom prompt Stored locally — never shared
Job page content Extracted temporarily, sent to Gemini API for analysis, then discarded — never stored
Analysis results Cached per browser tab in memory only — cleared when the tab closes
No tracking Zero analytics, zero telemetry, zero external servers
No accounts No sign-up, no login, no user profiles
No ads This is a personal tool — there are no advertisers

The only external service this extension communicates with is the Google Gemini API (generativelanguage.googleapis.com) — and only when you trigger an analysis. Google's data handling is governed by their AI Studio Terms of Service.


Troubleshooting

Widget not appearing on job pages? → Check that the toggle in the popup is ON. The widget only shows on supported job sites when the extension is active.

"Add your Gemini key" error? → Go to Settings tab, paste your key, and click Save Key. Make sure there are no spaces.

"Add your resume" error? → Go to Resume tab, paste your CV text, and click Save Resume.

Parse Error / 0 score? → Usually a token limit issue. Make sure your resume text is plain text (no symbols-heavy formatting). The extension trims input to ~3000 characters each for resume and JD.

Extension context invalidated error? → This happens when Chrome reloads the extension while a job tab is open. Simply refresh the job page (F5) and try again.

Analysis not triggering on a new job site? → The auto-detect covers major platforms. For unlisted sites, use the "Analyze Current Page" button in the popup Dashboard tab — it works on any URL.

Score seems off? → Try adding a custom prompt in Settings to guide the AI towards your specific role targets and priorities.


Project Structure

jd-matcher/
├── manifest.json          # Chrome Extension Manifest V3 config
├── popup.html             # Extension popup UI (3 tabs)
├── popup.css              # Popup styles — dark theme
├── popup.js               # Popup logic — tabs, toggle, save, analyze
├── src/
│   ├── background.js      # Service worker — API calls, state, badge
│   ├── content.js         # Injected into job pages — widget, analysis trigger
│   └── content.css        # Floating widget styles
└── icons/
    ├── icon16.png          # Toolbar icon (active)
    ├── icon48.png
    ├── icon128.png
    ├── icon16_off.png      # Toolbar icon (inactive/grey)
    ├── icon48_off.png
    └── icon128_off.png

Limitations

  • Input trimming: Resume and JD are each capped at ~3000 characters before sending to Gemini. Very long resumes or JDs may have some content trimmed. Keep your resume concise for best results.
  • Dynamic pages: Some job sites load content via JavaScript after the initial page load. If the widget analyzes too quickly on a slow connection, try clicking Re-analyze after the page fully loads.
  • Private job boards: Internal company ATS portals or login-gated job pages may not be in the supported site list — use the popup's Analyze Current Page button for those.
  • Free tier rate limits: Gemini's free API allows 1,500 requests/day and 15 requests/minute. More than sufficient for job hunting.

Contributing

This was built as a personal tool. If you find it useful and want to improve it:

  1. Fork the repo
  2. Make your changes in the jd-matcher/ folder
  3. Test by loading the unpacked extension in Chrome
  4. Submit a pull request with a clear description

Ideas welcome — especially around supporting more job sites, improving the match algorithm prompt, or adding a history/log feature.


License

MIT License — free to use, modify, and distribute. See LICENSE for details.


Built By

Built by Mahr K — Senior Program & Product Manager, AI Transformation Leader.

If this helped your job search, feel free to ⭐ star the repo.


Last updated: June 2026

About

An AI Chrome extension that instantly analyzes any job posting and tells you how well it matches your profile

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors