DEV Community

Cover image for Fill All: Generating E2E Tests and Automating Forms with Gemini Nano & TF.js
Marcus Paulo M Dias
Marcus Paulo M Dias

Posted on

Fill All: Generating E2E Tests and Automating Forms with Gemini Nano & TF.js

DEV Weekend Challenge: Community

The Community

Fill All was built for developers and QA engineers who spend their days filling out forms with locally valid data during testing and development. Every timezone, every locale, every country has its own data formats β€” CPF, CNPJ, RG, ID numbers, postal codes, phone numbers with regional codes β€” and most form-fillers don't understand them.

Standard auto-fill tools generate random strings or default to a single region's formats. Developers and QA engineers end up manually calculating valid check digits, hunting for correct postal code ranges, or switching between multiple generator websites. This happens dozens of times per sprint, across different environments and locales.

Fill All gives you a single, privacy-first tool that understands data validation natively β€” whatever your region β€” and goes further by using on-device AI to intelligently classify form fields without ever sending data to external servers.

The project is fully open source (MIT) and welcomes contributions from the dev and QA community.

What I Built

Fill All is a Chrome Extension (Manifest V3) that automatically fills web forms using a combination of:

  • πŸ€– Chrome Built-in AI (Gemini Nano) β€” local LLM that classifies fields contextually
  • 🧠 TensorFlow.js β€” a custom-trained MLP classifier that runs entirely in the browser
  • οΏ½ Locale-aware data generators β€” CPF, CNPJ, RG, CNH, PIS, CEP, phone numbers, PIX keys, credit cards, and more β€” all with valid check digits and regional formatting
  • πŸ“ Configurable rules engine β€” set fixed values or specific generators per URL pattern + CSS selector
  • πŸ’Ύ Saved form templates β€” fill once, reuse across sessions
  • πŸ” Smart field detection pipeline β€” HTML type β†’ Keyword β†’ TensorFlow β†’ Chrome AI, composable and immutable
  • 🎯 E2E script export β€” generates ready-to-use Playwright, Cypress, or Pest/Dusk test scripts from filled forms

Key Features Built This Weekend

Feature Description
i18n Full internationalization β€” PT-BR, English, Spanish
Fill Emptys Mode Only fills blank fields, preserving user-entered data
Improved Rule UX Live preview, auto-suggested generators, keyboard shortcuts
Enhanced DOM Watcher Configurable debounce, Shadow DOM support, smart refill for SPAs
Advanced Logging Timestamped, filterable, exportable logs with audit trail
AI Feedback Visual badges on AI-filled fields, configurable timeout, graceful fallback
E2E Script Export Record interactions β†’ export as Playwright/Cypress/Pest test code
Comprehensive Tests 70+ test files with Vitest + Playwright, merged coverage reports

How It Works (Priority Pipeline)

User triggers fill β†’ Background routes β†’ Content Script detects fields
                                              β”‚
                                    For each field:
                                    1. Ignored?      β†’ Skip
                                    2. Fixed value?  β†’ Use rule value
                                    3. Saved form?   β†’ Use template
                                    4. Chrome AI?    β†’ Gemini Nano (local)
                                    5. TensorFlow?   β†’ Classify + Generate
                                    6. Fallback      β†’ Default generator
                                              β”‚
                                    Fill + dispatch events
                                    (input/change/blur)
Enter fullscreen mode Exit fullscreen mode

Privacy First

Zero data leaves the device. No external APIs, no telemetry, no analytics. Both AI models (Gemini Nano and TensorFlow.js) run 100% locally. All user data is stored in chrome.storage.local only.

Demo

Quick Start Video

Real-World Usage Example

Watch real-world usage example on Loom β†’

Screenshots

Popup β€” Quick Actions & Generators

Popup

Floating Panel β€” In-Page Controls

Floating Panel

DevTools Panel β€” Real-Time Field Inspection

DevTools

Options Page β€” Full Configuration

Settings Saved Forms Training Dataset
Settings Forms Dataset

Add Rules Directly From Fields

Add Rule

Code

GitHub logo marcuspmd / fill-all

Fill All Γ© uma extensΓ£o Chrome de cΓ³digo aberto que preenche formulΓ‘rios automaticamente usando inteligΓͺncia artificial e geradores de dados brasileiros vΓ‘lidos. Combina Chrome Built-in AI (Gemini Nano), TensorFlow.js e um motor de regras configurΓ‘vel para classificar campos e gerar dados realistas β€” CPF, CNPJ, RG, CEP, telefone e muito mais.

Fill All

AI-powered Chrome extension for smart form filling, recording, and demo generation

Ask DeepWiki Chrome Extension Chrome Web Store Manifest V3 TypeScript TensorFlow.js License: MIT

Chrome Web Store Β· Features Β· Getting started Β· Documentation Β· Security Β· Contributing


Overview

Fill All is an open-source Chrome extension that fills web forms using a layered pipeline of:

  • rules and saved templates
  • built-in generators for valid Brazilian data
  • TensorFlow.js field classification
  • Chrome Built-in AI / Gemini Nano for contextual filling

It is built for developers, QA engineers, automation teams, and anyone tired of filling the same form repeatedly.

Everything runs locally in the browser. No external AI API is required for the built-in AI and machine-learning flows.

Install from the Chrome Web Store:

Screenshots

Popup

Popup

Field Icons and Rule Configuration

Field Icons

Configure Rules from Field Icon

Options Page

General Settings Language Rules
General Settings Language Rules
Saved Forms Form Creation Dataset
Saved Forms Form Creation Dataset
Detection Strategy Field Icons Learning
Detection Strategy Field Icons Settings Learning
Training Log
Training Log

DevTools Panel

Actions Fields
DevTools Actions DevTools Fields
Actions (Light Theme) Fields (Light Theme)
DevTools Actions Light DevTools Fields Light

Recording and Export

Recording
…

How I Built It

Tech Stack

Layer Technology Purpose
Build Vite 7.3 + @crxjs/vite-plugin Modern bundling with HMR
Language TypeScript ES2022 (strict) Full type safety
Native AI Chrome Prompt API (Gemini Nano) Local LLM classification
ML TensorFlow.js 4.22 Client-side field classifier
Validation Zod v4 Schema validation (two-layer: full Zod + light typeof)
Data @faker-js/faker Realistic data generation
Storage Chrome Storage API (local) Local-only persistence
Testing Vitest + Playwright Unit + E2E with merged coverage
Extension Manifest V3 Modern Chrome extension standard

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Popup UI   │────▢│    Background     │◀────│  Content Script  β”‚
β”‚             β”‚     β”‚  (Service Worker) β”‚     β”‚  (DOM + Forms)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                             β”‚                        β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Options    β”‚    β”‚         β”‚         β”‚    β”‚         β”‚         β”‚
β”‚   Page      β”‚    β–Ό         β–Ό         β–Ό    β–Ό         β–Ό         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  Storage   Rules    AI    Form     DOM        β”‚
                   β”‚       Engine  Modules Detector Watcher     β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚                β”‚                           β”‚
β”‚  DevTools   β”‚    β”‚       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”                  β”‚
β”‚   Panel     β”‚    β”‚       β–Ό                 β–Ό                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚   Chrome AI      TensorFlow.js             β”‚
                   β”‚  (Gemini Nano)    (Classifier)             β”‚
                   β”‚       β”‚                 β”‚                  β”‚
                   β”‚       └──► Learning β—„β”€β”€β”€β”˜                  β”‚
                   β”‚            Store                           β”‚
                   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
Enter fullscreen mode Exit fullscreen mode

Design Decisions

  • Immutable detection pipeline β€” classifiers are chained via DetectionPipeline that returns new instances on every transformation (.with(), .without(), .withOrder()). This makes the pipeline composable, testable, and free from side effects.

  • Two-layer validation β€” Full Zod schemas for background/options (correctness first), lightweight typeof checks in the content script (performance first on the hot path).

  • Atomic storage updates β€” updateStorageAtomically() uses a per-key write queue with pure updater functions (current: T) => T to prevent race conditions.

  • Continuous learning loop β€” Chrome AI predictions feed into a learning store (max 500 entries, FIFO). TensorFlow.js can retrain in-browser using these entries, creating a self-improving cycle.

  • Adapters pattern β€” UI component libraries (Ant Design, Select2) have dedicated adapters so the form filler handles custom selects, datepickers, and cascaders correctly.

  • E2E export via Strategy pattern β€” each framework (Playwright, Cypress, Pest) has its own code generator, registered in a strategy registry. Adding a new framework means adding one file.

What I Learned

Building a Chrome extension that bridges on-device AI with practical developer tools taught me that the real power of Gemini Nano isn't in replacing server-side AI β€” it's in enabling privacy-respecting intelligence for tools that handle sensitive data (like form fillers). The continuous learning loop between Chrome AI and TensorFlow.js creates a system that gets smarter over time without ever leaving the user's machine.


Fill All is open source and welcomes contributions. If you're tired of manually generating valid test data or filling the same form for the hundredth time β€” this one's for you.

GitHub logo marcuspmd / fill-all

Fill All Γ© uma extensΓ£o Chrome de cΓ³digo aberto que preenche formulΓ‘rios automaticamente usando inteligΓͺncia artificial e geradores de dados brasileiros vΓ‘lidos. Combina Chrome Built-in AI (Gemini Nano), TensorFlow.js e um motor de regras configurΓ‘vel para classificar campos e gerar dados realistas β€” CPF, CNPJ, RG, CEP, telefone e muito mais.

Fill All

AI-powered Chrome extension for smart form filling, recording, and demo generation

Ask DeepWiki Chrome Extension Chrome Web Store Manifest V3 TypeScript TensorFlow.js License: MIT

Chrome Web Store Β· Features Β· Getting started Β· Documentation Β· Security Β· Contributing


Overview

Fill All is an open-source Chrome extension that fills web forms using a layered pipeline of:

  • rules and saved templates
  • built-in generators for valid Brazilian data
  • TensorFlow.js field classification
  • Chrome Built-in AI / Gemini Nano for contextual filling

It is built for developers, QA engineers, automation teams, and anyone tired of filling the same form repeatedly.

Everything runs locally in the browser. No external AI API is required for the built-in AI and machine-learning flows.

Install from the Chrome Web Store:

Screenshots

Popup

Popup

Field Icons and Rule Configuration

Field Icons

Configure Rules from Field Icon

Options Page

General Settings Language Rules
General Settings Language Rules
Saved Forms Form Creation Dataset
Saved Forms Form Creation Dataset
Detection Strategy Field Icons Learning
Detection Strategy Field Icons Settings Learning
Training Log
Training Log

DevTools Panel

Actions Fields
DevTools Actions DevTools Fields
Actions (Light Theme) Fields (Light Theme)
DevTools Actions Light DevTools Fields Light

Recording and Export

Recording
…

Top comments (0)