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:
Chrome Extension:
Resume Processing:
ATS Logic:
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.