FormFilla
Ingenious Local-First Form Filler
Deterministic, zero-network autofill powered by bipartite graph matching.
Install from Chrome Web Store •
Key Features •
Architecture •
Quickstart •
Extending Rules •
Issues & Feedback
The Philosophy
Job hunting in the modern era is exhausting and repetitive. Candidates spend hours copying and pasting identical professional records into applicant tracking systems (ATS) like Workday, Greenhouse, and Lever—systems whose built-in resume parsers frequently misalign dates, drop job titles, and scramble contact details.
FormFilla was created to restore candidate dignity and reclaim time.
Unlike cloud-based or LLM-driven autofill plugins that transmit your personal credentials, resume texts, and references to third-party AI endpoints, FormFilla is 100% local-first and deterministic. Everything runs directly inside your browser in sub-100ms. Your sensitive career data never leaves your computer.
Key Features
-
⚡ Zero-AI & Sub-100ms Speed
Uses deterministic bipartite optimization and regex heuristics instead of costly, slow, and hallucination-prone LLM API calls. No rate limits, no subscriptions, and zero cloud dependencies.
-
🧠 Globally Optimal Matching (Kuhn-Munkres)
Solves field-to-value assignment as a Maximum Weight Bipartite Matching problem. Rather than using naive greedy heuristics, it optimizes confidence scores across the entire form at once.
-
🛡️ 100% Private & Local-First
All profile details, credentials, and uploaded files are stored strictly on-device via chrome.storage.local and IndexedDB. Zero network requests, zero telemetry.
-
🔄 Framework-Safe DOM Writing
Bypasses React, Vue, and Angular virtual DOM synthetic event wrappers by calling native HTML prototype setters and bubbling real input and change events.
-
📑 Dynamic Repeated Block Detection
Intelligently fingerprints and matches repetitive application sections, correctly mapping multi-card lists such as work experiences, degrees, certifications, references, and language proficiencies.
-
📁 Automated File Transfers
Simulates drag-and-drop operations using synthetic DataTransfer streams to attach your local resumes, CVs, cover letters, and transcripts directly to file inputs.
-
🎯 Interactive Field Learner
Encounter an obscure or bespoke form field? Open the interactive target mapper to click and teach FormFilla new field patterns right on the active page.
-
🎨 Multi-Theme Support
Designed for aesthetics and ergonomics, featuring Light, Dark, Brutalist Light, and Brutalist Dark palettes.
Technical Architecture
FormFilla executes a robust three-stage pipeline to analyze and populate complex application forms:
Active DOM ──► 1. Scanner & Normalizer ──► 2. Hungarian Solver ──► 3. Framework Setter ──► Filled Form
1. Element Scanning & Normalization
Recursively traverses active DOM subtrees (including same-origin iframe roots) to detect inputs, selects, textareas, and comboboxes. Raw signals (labels, placeholders, IDs, names, ARIA attributes) are tokenized and normalized against abbreviation dictionaries.
flowchart TD
DOM["Active DOM Subtree"] --> Scan["Scanner: Inputs, Selects, & Textareas"]
Scan --> Blocks["Repeated Block Detector: Identify School & Work Cards"]
Blocks --> Extract["Signal Extractor: Read Label, Placeholder, ID, Name"]
Extract --> Normalizer["Normalizer: Tokenize & Expand Abbreviations"]
Normalizer --> Tokens["Normalized Field Tokens"]
2. Kuhn-Munkres Bipartite Matching
Models the pairing between scanned form inputs and candidate profile fields as a weighted bipartite graph. FormFilla builds a global cost matrix and executes the Kuhn-Munkres (Hungarian) algorithm to guarantee the mathematically optimal assignment.
flowchart TD
Tokens["Normalized Field Tokens"] --> Scorer["Signal Scorer: Fuzzy Sim + Regex Signatures"]
Profile["Candidate Profile JSON"] --> Scorer
Scorer --> CostMatrix["Build Cost Matrix: 100 - Score"]
CostMatrix --> Hungarian["Hungarian Minimization Algorithm"]
Hungarian --> GlobalMatching["Globally Optimal Field-to-Key Mapping"]
3. Framework-Safe DOM Writing
Standard .value = ... mutations fail on modern reactive web apps (React, Vue, Angular) because virtual DOM wrappers ignore raw property writes. FormFilla extracts browser-native property descriptors and dispatches bubbling lifecycle events.
sequenceDiagram
participant E as Core Orchestrator
participant D as Target DOM Element
participant F as Web Framework (React/Vue/JS)
E->>D: Resolve Value Assignment
E->>D: Invoke Native Prototype Setter (bypass wrapper)
D-->>F: Update element value
E->>D: Dispatch event: 'input' (bubbles: true)
E->>D: Dispatch event: 'change' (bubbles: true)
F-->>F: Synchronize reactive state store
Note over D,F: Element highlighted green/amber for review
Repository Structure
FormFilla/
├── src/ # Extension source code
│ ├── background/ # Service Worker & offline lifecycle
│ ├── content/ # Scanners, Kuhn-Munkres matcher, platform adapters & DOM setters
│ ├── options/ # Dashboard settings panel & profile management
│ ├── popup/ # Extension toolbar popup interface
│ ├── shared/ # Matching dictionaries, schemas, types & storage client
│ └── themes/ # Built-in CSS themes (Light, Dark, Brutalist)
├── tests/ # Vitest test runner suites & HTML form fixtures
├── store_assets/ # Chrome Web Store graphics, banners, and screenshots
├── scripts/ # esbuild bundling, packaging, and icon build utilities
├── docs/ # Architecture specifications and documentation
├── icons/ # Extension icons (16, 32, 48, 128px)
├── manifest.json # Chrome Manifest V3 configuration
├── LICENSE # MIT License
└── package.json # Node dependencies and build scripts
Setup & Development
Prerequisites
- Node.js (v20.0 or later recommended)
- npm (v10 or later)
- Google Chrome or any Chromium-compatible browser (Brave, Edge, Arc)
1. Clone & Install Dependencies
git clone https://github.com/AhmadHassan-BTed/FormFilla.git
cd FormFilla
npm install
2. Build the Extension
Compile the TypeScript code and static assets into the dist/ directory:
# Single build
npm run build
# Watch mode for real-time development
npm run watch
3. Load Unpacked in Chrome
- Open Google Chrome and navigate to
chrome://extensions/.
- Enable Developer mode via the toggle switch in the upper-right corner.
- Click Load unpacked in the top-left corner.
- Select the
dist/ directory inside this repository.
- FormFilla is now active in your browser toolbar!
4. Running Tests
Run the Vitest unit and integration test suite:
npm run test
AI-Driven Dictionary Expansion
FormFilla’s matching logic is completely decoupled from its code through four externalized JSON dictionaries. You can easily expand matching accuracy for specialized portals, regional formats, or regional application styles:
| File |
Purpose |
How to Extend |
rules.json |
Field Selectors & Signatures |
Add new target keys, exactPhrases, and regexPatterns for custom portal inputs. |
profile-template.json |
Profile Schema Layout |
Define user-facing fields and defaults matching any newly introduced rules. |
abbreviations.json |
Acronym Normalization |
Map domain acronyms (e.g. exp → experience, inst → institution). |
degrees.json |
Education Ranking Matrix |
Define degree equivalence tiers for international and regional qualifications. |
Pro Tip: Each dictionary contains an embedded __meta__ prompt. You can supply these JSON files directly to any AI model (Gemini, Claude, GPT) with sample forms to generate accurate new mapping entries!
FormFilla contains dedicated platform adapters and generic fallback handling for:
- Workday (complex multi-step forms, radio groups, comboboxes)
- Greenhouse (file attachments, dynamic question rows)
- Lever (custom textarea fields, URL sections)
- Taleo & Taleo Enterprise
- Scholarship & Admissions Portals (Commonwealth, South Asian & GKS applications)
- Generic HTML5 / Custom ATS forms
Installation via Chrome Web Store
If you prefer installing pre-packaged releases with automated updates, install FormFilla directly from the Google Chrome Web Store:
👉 Install FormFilla from the Chrome Web Store
Contributing & Bug Reports
Contributions, issues, and feature suggestions are warmly welcomed!
- Found a form where autofill didn’t match cleanly?
- Have an idea for a platform adapter or custom dictionary rules?
Please open an issue on our central tracker:
👉 Open an Issue or Suggestion
License
This project is licensed under the MIT License © 2026 Ahmad Hassan (B-Ted). Free to use, modify, and distribute.
评论