Skip to content

Latest commit

 

History

22 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Fillo AI Pro

A local-first AI copilot for job applications and complex web forms

Save your profile once. Open almost any form. Detect → fill → verify → review.

Chrome MV3 Local-first AI No sign-up Human Review

Live Website · Chrome Web Store · Watch Demo


In one line: a Manifest V3 Chrome extension that pairs a deterministic form-understanding engine with an AI judgment layer — it reads field intent across difficult DOM structures, fills framework-controlled inputs safely, verifies its own selections, attaches documents, and uses AI only for the questions that actually need it. Your profile, résumé, and answers stay on your device; only a form's questions are used to understand it — and nothing is ever submitted without you.

Why it exists

Job applications ask candidates to re-type information that already lives in their résumé — contact details, work history, education, links, eligibility, salary, and long-form questions. Basic autofill handles predictable fields. Modern ATS platforms don't: they use custom widgets, dynamic sections, framework-controlled inputs, ARIA components, iframes, and inconsistent labels.

Fillo AI Pro treats form filling as a systems problem, not a text-pasting problem.

The deterministic engine does the high-confidence work first — instantly and for free. AI is used only where judgment is genuinely useful. You stay responsible for review and submission.


Demo

Watch the Fillo AI demo

Profile & Documents Job Tracker AI & Settings
Fillo AI Pro profile and documents Fillo AI Pro job application tracker Fillo AI Pro AI assist and settings
Your AI Co-Pilot Get Started in 3 Steps Smarter Answers
Fillo AI Pro — your AI co-pilot for any form Fillo AI Pro onboarding in three steps Fillo AI Pro — smarter answers, pick an answer

What it does

Capability Status
Field-intent detection across poorly labeled forms
React / Vue / Angular controlled inputs
Custom JS dropdowns (Workday, Greenhouse, React-Select, MUI, …)
Google Forms & ARIA widgets (role=radio/checkbox/listbox)
Open Shadow DOM + iframes
Résumé / cover-letter upload into file fields
Résumé → profile extraction (PDF)
Multi-entry Experience / Education (repeaters)
Custom Q&A with AI Enhance
Answer memory + past-response learning
AI answers for open-ended questions
LLM-for-choices — dropdowns the matcher can't map
Application Tracker (Applied → Interviewing → Offer)
Right-click single-field fill + keyboard shortcuts
Auto-submit 🚫 intentionally excluded
CAPTCHA bypass 🚫 never read, never touched

Architecture

The extension is Manifest V3, vanilla JavaScript, no build step (the only bundled library is pdf.js, used offline for résumé parsing). The engine ships as an <all_urls> content script but is inert until you invoke it — it never fills, and detection is passive.

The intelligence is split into a local shell and a cloud brain, in the pattern Grammarly and similar tools use — the page's structure is understood in the cloud; your data never leaves your machine:

  • On your device: the UI, your profile / résumé / Q&A (chrome.storage.local), DOM scanning, the fill executor, and the join of field → your value.
  • In the cloud (Fillo API): field classification — given a form's questions, which profile key does each field want? It receives descriptors (label text, attributes, section, option labels), never your values.
  • A frozen local engine (engine-lite.js) classifies in-page whenever the server is slow, offline, or switched off — so filling always works.
flowchart TB
    U["User"]

    subgraph EXT["Chrome Extension · Manifest V3 (your device)"]
        UI["Side Panel / Options UI"]
        SCAN["DOM Scanner + Fill Executor"]
        LITE["engine-lite · offline fallback brain"]
    end

    STORE[("chrome.storage.local<br/>profile · résumé · Q&A · memory · tracker")]
    PAGE["Target Web Form<br/>DOM · Shadow DOM · Iframes · ARIA"]

    API[("Fillo API · Cloudflare Worker<br/>classification brain + usage meter")]
    CLOUDAI[("Fillo Cloud AI<br/>hosted model · opt-in")]
    OLLAMA[("Ollama · localhost<br/>your machine")]

    U --> UI
    UI -->|"on-demand injection"| SCAN
    SCAN <--> PAGE
    UI <--> STORE
    SCAN <--> STORE
    SCAN -->|"field descriptors only<br/>(questions, never answers)"| API
    SCAN <-->|"fallback"| LITE
    UI -->|"open-ended answers"| CLOUDAI
    UI -->|"or, fully local"| OLLAMA
Loading

The pipeline, at a glance:

Discover → Understand → Classify → Resolve → Fill → Verify → Escalate → Report

Detection and mutation are kept separate. AI is additive, never foundational. Every write is verified. And when confidence runs out, the system reports or skips — it never fakes success.


How it works (without the recipe)

Reading a field's intent is the hard part — and it's where naive fillers die. Fillo AI Pro reconstructs each field's true question through a 9-layer resolution hierarchy, ranging from explicit accessibility metadata down to structural and positional inference of the surrounding DOM. That's why it can read a field like this — no for, no useful name, no placeholder — that most tools see as an anonymous text box:

<label>Full Name</label>
<input type="text">

Intent alone isn't enough, so each field is also enriched with section context (Personal / Experience / Education / …) reconstructed from the page's structure — so an Experience → Company never gets confused with a Reference → Company, and an ambiguous "Email" lands in the right place. Those descriptors — and only those — are what the classification brain sees.

Filling is verified, not assumed. Standard inputs are written through the element's native setter with the events modern frameworks expect, so React/Vue/Angular state actually updates. Custom dropdowns follow a verify-then-escalate strategy: the widget is driven, then checked to confirm it accepted the value — with fallbacks, and an honest empty result rather than forcing invalid text into a closed-choice control. Multi-entry Experience/Education blocks are filled per entry (with "Add another" repeaters clicked as needed), and conditional fields revealed by earlier answers are picked up automatically.

AI is deterministic-first. Everything the engine can answer from your profile, Custom Q&A, and memory is resolved instantly and for free. Only the leftover, open-ended questions go to a model — grounded in your profile, instructed never to invent employers, dates, or credentials, and always drafted for you to review. You choose where that model runs (see The AI layer).

Answer priority is intentional:

Profile  →  Custom Q&A  →  Answer memory  →  Past responses  →  AI  →  Honest skip

Factual data stays deterministic; generation is reserved for the tasks where generation is actually useful.


The AI layer

Profile mapping can't write a cover letter or answer "why do you want this role?" — that's what the AI layer is for. You pick the provider, per your privacy and convenience preference:

  • Fillo Cloud AI — the zero-setup default. One-click opt-in, hosted model, generous daily beta quota. This is the one feature that sends profile content off your device: your question plus the profile details needed to answer it go to Fillo's server, which drafts the answer and returns it. Nothing is stored beyond usage counts.
  • Local Ollama — unlimited and fully private. Point the extension at your own Ollama at localhost; your profile, résumé text, and questions never leave your machine. AI calls route through the extension's service worker, so there's no CORS/OLLAMA_ORIGINS setup.

Either way the rules are the same: only leftover open-ended fields are sent, one focused prompt per field, an explicit "do not invent employers/dates/credentials" grounding rule, a SKIP escape hatch, and every AI draft visibly marked (★) and reviewable before you submit. AI never touches a field the deterministic engine already answered.

The same layer also powers Resume Auto-Fill (upload a PDF → your profile is extracted for you), AI Enhance (polish Custom Q&A drafts in your voice), and LLM-for-choices (when the dropdown matcher is unsure, the model picks by index into the real option list — so a closed-choice control only ever receives one of its own options).


Application Tracker

Every fill already knows the company, role, URL, and date — so Fillo keeps a local pipeline of your applications in the panel's Jobs tab:

  • Auto-detects job forms (JSON-LD JobPosting, ATS host patterns — Workday, Greenhouse, Lever, Ashby, iCIMS, …, page metadata) and extracts company and role.
  • Tracks each application through Applied → Interviewing → Offer → Rejected, with notes.
  • Duplicate-apply warning — "you already applied to this role at this company."

It's an isolated, optional feature that writes only to chrome.storage.local — nothing about your applications is ever sent to the Fillo server.


Design principles

  • Deterministic first, AI second — lower latency, lower hallucination risk, predictable and offline-resilient.
  • Verify writes, don't trust actions — a click or an assignment is not proof the widget accepted it.
  • Honest skip over fake completion — for a job application, a silently wrong answer is worse than a visibly empty one.
  • Your data is yours — profile, résumé, and answers live on your device and are never uploaded; the brain classifies questions, never answers.
  • No auto-submit — you see and approve everything before it reaches an employer.
  • On-demand injection — the engine stays inert until you invoke it; detection is passive.

Tech Stack

Layer Technology
Browser platform Chrome Extension, Manifest V3
Language Vanilla JavaScript (ES2020) — no framework, no build step
Background runtime MV3 Service Worker (Ollama + Fillo API proxy)
Page access chrome.scripting + activeTab (on-demand injection)
On-device storage chrome.storage.local (profile, résumé, Q&A, memory, tracker)
Classification brain Cloudflare Worker + Hono + D1 (field descriptors → profile keys)
Offline fallback engine-lite.js — frozen in-page classifier
AI Fillo Cloud AI (hosted, opt-in) or local Ollama
Résumé parsing pdf.js (offline, on device)
DOM intelligence Accessibility metadata, structural context, Shadow DOM traversal
File injection DataTransfer API
Dynamic forms MutationObserver

Privacy & Security

Your data stays yours. Really.

  • Your profile, résumé, Custom Q&A, and answers are stored only on your device (chrome.storage.local). They are never uploaded to Fillo servers.
  • When the engine understands a form, it sends the form's questions (field labels like "Current employer", attributes, section names, option labels) to the Fillo classification brain to work out what each field wants. It never sends your values — matching your data to fields happens on your computer.
  • No sign-up, no login, no password. An anonymous random device ID is used to count usage; there is no PII and no hardware fingerprinting.
  • We don't know which sites you visit. Usage is metered as a one-way HMAC of the hostname that we can't reverse — never the hostname itself.
  • AI is your choice: run it fully local with Ollama (nothing leaves your machine), or use opt-in Fillo Cloud AI, where only your question and the profile details needed to answer it are sent, and nothing is retained beyond usage counts.
  • The Application Tracker and all profile data never touch the network.
  • Prefer zero server calls? The extension runs on the built-in offline engine when the cloud brain is disabled — classification then happens entirely in-page.

Permanent non-goals: no auto-submit · no CAPTCHA bypass · no fabricated qualifications · no ads · no selling or sharing of data.


Installation

Install from the Chrome Web Store. A short onboarding wizard opens on first run — upload your résumé and let the AI build your profile, or fill it in by hand, then pick your AI provider.

AI setup

  • Fillo Cloud AI (recommended to start) — nothing to install. In the wizard or Settings → AI, choose Cloud AI and click Enable once.

  • Local Ollama (unlimited, fully private) — install Ollama, pull a model, then point the extension at it:

    ollama pull llama3.1        # or llama3.2:3b / gemma3:1b on lower-end hardware

    Keep Ollama running, open Settings → AI, select Ollama, fetch the model, and test the connection. Calls route through the extension's service worker, so no browser CORS configuration is needed.

Without any AI, deterministic field filling still works — you just won't get AI-written answers.

Usage

  • Full form — open the side panel and hit Auto Fill, then optionally AI Fill for open-ended leftovers. Review the highlighted changes and submit manually.
  • KeyboardAlt+Shift+G fills the whole form (press twice to run AI Fill on the leftovers) · Alt+Shift+F fills the focused field · Alt+Shift+C opens a custom-answer prompt.
  • Right-click any editable field for Smart Fill, a direct AI answer, a custom instruction, or length presets.

Roadmap

flowchart LR
    V2["v2.1 · Today<br/>Detection + verified fill +<br/>résumé parsing + Q&A +<br/>cloud brain + tracker"] --> P1["Next<br/>Richer AI tailoring<br/>(JD-aware answers)"]
    P1 --> P2["Profile v2<br/>Multiple profiles · import/export"]
    P2 --> P3["Application copilot<br/>JD match reports · pre-submit review"]
    P3 --> P4["Reach<br/>ATS packs · more browsers · i18n"]
Loading

Known limits

  • Custom calendar / date-picker widgets may need a manual touch.
  • Custom JS repeaters with unusual "Add another" wording may still need a manual click.
  • Cross-origin iframe reporting can differ from top-frame counts.
  • Remote (non-localhost) Ollama endpoints may need server-side CORS configuration.
  • If the cloud brain is unreachable, detection falls back to the built-in offline engine (basic mode).
  • CAPTCHA is intentionally unsupported.

Author

Anurag Singh — AI & Data Engineer · Python / ML / NLP / LLM Systems

Website · Chrome Web Store · Demo · LinkedIn · GitHub


Automate repetition. Verify uncertainty. Keep the human in control.

Keywords: job application autofill · ATS automation · Chrome extension · Manifest V3 · local-first · cloud classification · Cloud AI · local LLM · Ollama · résumé parser · form understanding · field-intent detection · React-safe inputs · Shadow DOM · ARIA · application tracker · human-in-the-loop

About

A Chrome extension that fills any web form automatically using your saved profile and a locally running AI. You fill in your details once, and it handles the rest — whether it's a registration page, a survey, an application, or any other form. The AI part handles open-ended questions and text fields.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors