A Chrome extension that instantly analyzes job postings and identifies visa sponsorship and work authorization eligibility for F-1 international students.
Instead of manually searching every job description for phrases like "unable to sponsor" or "OPT/CPT welcome", F1-Filter scans the page in seconds and highlights the relevant information directly inside your browser.
Built with Chrome Manifest V3, a modular analysis engine, and a domain-agnostic content scanning pipeline.
International students spend countless hours opening job postings only to discover, after reading the entire description, that the company does not sponsor work authorization.
The eligibility information is often:
- buried deep within long job descriptions
- written using inconsistent wording
- sometimes even omitted entirely
- different across every job board
This turns finding eligible positions into a repetitive manual process.
F1-Filter automatically scans the text of any job posting and classifies it into one of three categories:
| Result | Meaning |
|---|---|
| ✅ Eligible | Language indicates sponsorship or OPT/CPT acceptance |
| ❌ Not Eligible | Posting explicitly states sponsorship is unavailable |
| No clear eligibility information was found |
Rather than just producing a verdict, the extension also highlights the exact phrases responsible for the classification so users can verify the result themselves.
The sections below cover the essentials — installing, testing, and a quick tour of the codebase. For an in-depth look at any part of the project, see:
| Doc | Covers |
|---|---|
| PRD | Problem statement, goals/non-goals, user stories, functional & non-functional requirements, technical requirements + design rationale, roadmap |
| Architecture | System design, the manual vs. auto-run scan paths, every component's responsibilities, storage schema, and the messaging contract between scripts |
| User Guide | Installing, scanning a posting, setting up auto-run, managing keyword lists, backup/reset, privacy, and troubleshooting |
| Classification Engine | How the matching algorithm and verdict decision logic work, the full default keyword lists, accuracy, and known limitations |
| Development Guide | Local dev loop, running/adding tests, CI, coding conventions, and how to add a new job board or tune keywords |
| Resources | Documentation, tutorials, and tools referenced while building this project |
- Chrome Extension built with Manifest V3
- Works across different job boards using a domain-agnostic scanning pipeline
- Pure JavaScript eligibility analysis engine
- Configurable keyword rules
- Site-specific configuration support
- Background service worker architecture
- Unit-tested classification logic
- Lightweight with no external backend
Job Posting
│
▼
Content Script
(DOM Scanner)
│
▼
Text Extraction
│
▼
Analysis Engine
(Pure Functions)
│
▼
Classification
Eligible
Not Eligible
Uncertain
│
▼
Popup UI
A scan can be triggered manually (click Check eligibility) or automatically on job boards you've opted into — both paths share the same analysis engine and DOM-highlighting logic. For the full breakdown of every component, the storage schema, and the messaging contract, see docs/architecture.md.
The current rule-based engine achieved approximately 90–92% classification accuracy during manual validation using real-world job descriptions.
Automated tests cover edge cases including compound terms (OPT/CPT, F-1), punctuation variations, overlapping keywords, and false-positive prevention (e.g. ensuring "opt" does not match "adopt"). Full details in docs/classification.md.
f1-filter
├── icons/ Extension icons (16/32/48/128px)
├── docs/ In-depth documentation (see table above)
├── src/ Extension source (analyzer, content scripts, popup, settings)
├── test/ Unit tests for the analysis engine
├── manifest.json
├── package.json
└── .github/workflows/ci.yml
See docs/development.md for the fully annotated file tree.
- Clone the repository.
git clone https://github.com/gargikalla/f1-filter.git- Open Chrome and navigate to:
chrome://extensions
-
Enable Developer Mode.
-
Click Load unpacked.
-
Select the project folder.
The extension is now ready to use. You can click on the extension icon to open the settings, update keywords list, update site permissions, turn on/off auto-scan for specific job boards, and access other tools like reset. See the User Guide for a full walkthrough.
npm testThis runs test/analyzer.test.js, validating the analyzer independently from Chrome APIs, making it fast, deterministic, and easy to extend. See docs/development.md for how to add new test cases.
- No permissions on install.
host_permissionsis empty in the manifest — the extension can't read any page until you either click Scan this page for that one tab, or explicitly opt a specific site into auto-run. - Auto-run permissions are per-site and revocable. Each toggle in Settings triggers Chrome's own permission prompt for exactly one origin. Turning a site off calls
chrome.permissions.removeimmediately. - Zero network requests anywhere in the code. No analytics, no telemetry, no external fonts or scripts, no server of any kind.
- Storage stays on-device. Keyword lists live in
chrome.storage.local; the last scan result per tab lives inchrome.storage.session, which Chrome clears automatically and never writes to disk.
- Company sponsorship history integration
- Confidence scoring instead of rule-only classification
- Support for additional work authorization categories
- Enhanced keyword management UI
- Browser support beyond Chrome
Copyright © 2026 gargikalla. All rights reserved. This project is provided for personal use only. You may download and use F1 Filter locally, but you may not redistribute, modify, or republish the source code or derivative works without prior written permission.

