JobLens-AI

Built an AI-powered Chrome extension that analyzes LinkedIn job descriptions against uploaded resumes to simulate ATS-style skill matching. Implemented resume parsing, PDF text extraction, real-time LinkedIn DOM scraping, and skill-gap analysis through a draggable floating UI injected directly into job pages.

Tech Stack

Frontend:

ReactTypeScriptViteTailwind CSS

Chrome Extension:

Chrome Extension APIsContent ScriptsCRXJSManifest V3

Resume Processing:

pdfjs-distMammothText Parsing

ATS Logic:

Skill ExtractionKeyword MatchingResume-to-Job Comparison

Project highlights

LinkedIn Job Analysis

Injected a floating ATS analysis panel directly into LinkedIn job pages using Chrome content scripts.

Resume Parsing Pipeline

Implemented PDF and DOCX resume parsing with text extraction for downstream ATS analysis.

ATS Skill Matching

Built a keyword-based matching system that compares resume skills against detected job requirements.

Real-Time Job Scraping

Extracted job title, company, location, and description dynamically from LinkedIn DOM elements.

Draggable Floating UI

Built a movable floating interface that updates job information in real time while browsing LinkedIn.

Skill Gap Analysis

Displayed ATS match score, matching skills, missing skills, and extracted job keywords for better resume targeting.

TECHNICAL IMPLEMENTATION

Chrome Extension Architecture:

Built the application using Manifest V3 with CRXJS and content scripts to inject React UI directly into LinkedIn job pages.

  • Manifest V3 architecture with scoped permissions
  • React-based floating panel mounted using content scripts
  • LinkedIn-specific URL matching for targeted execution

Resume Processing Pipeline:

Implemented local resume parsing to extract text content before ATS analysis.

  • PDF parsing using pdfjs worker configuration
  • DOCX support through Mammoth (still in development)
  • Resume text persisted using Chrome storage APIs

ATS Matching System:

Built a lightweight ATS simulation system for comparing resume skills with job requirements.

  • Regex-based skill extraction
  • Case-insensitive keyword comparison
  • Percentage-based ATS scoring

LinkedIn DOM Scraping:

Designed resilient DOM extraction logic using multiple fallback selectors to improve reliability across LinkedIn UI changes.

  • Dynamic selector fallback system
  • Periodic DOM polling for job changes
  • Real-time updates while browsing jobs

Engineering Challenges Solved

  • Solved PDF worker failures inside Chrome extensions by explicitly configuring pdfjs worker paths using Vite asset URLs.
  • Handled dynamic LinkedIn DOM updates by implementing periodic scraping and fallback selectors to avoid broken extraction.
  • Designed a floating draggable UI that stays responsive while continuously monitoring job page changes.
  • Built a lightweight ATS scoring system capable of identifying matching and missing skills without relying on external APIs.

Architecture Decisions

Local Resume Processing

Processed resumes locally using pdfjs and Mammoth instead of external services to keep the extension lightweight and privacy-friendly.

Scoped LinkedIn Injection

Restricted content script execution to LinkedIn jobs pages for better performance, reduced permissions, and improved security.