<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Marcus Paulo M Dias</title>
    <description>The latest articles on DEV Community by Marcus Paulo M Dias (@marcus_paulomdias_e2a09).</description>
    <link>https://dev.to/marcus_paulomdias_e2a09</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2744689%2F84e7dbd2-cf95-4f21-b8c1-b8146ef1b36e.png</url>
      <title>DEV Community: Marcus Paulo M Dias</title>
      <link>https://dev.to/marcus_paulomdias_e2a09</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marcus_paulomdias_e2a09"/>
    <language>en</language>
    <item>
      <title>Fill All: Generating E2E Tests and Automating Forms with Gemini Nano &amp; TF.js</title>
      <dc:creator>Marcus Paulo M Dias</dc:creator>
      <pubDate>Mon, 02 Mar 2026 00:08:52 +0000</pubDate>
      <link>https://dev.to/marcus_paulomdias_e2a09/fill-all-generating-e2e-tests-and-automating-forms-with-gemini-nano-tfjs-57a8</link>
      <guid>https://dev.to/marcus_paulomdias_e2a09/fill-all-generating-e2e-tests-and-automating-forms-with-gemini-nano-tfjs-57a8</guid>
      <description>&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fill All&lt;/strong&gt; was built for developers and QA engineers who spend their days filling out forms with &lt;strong&gt;locally valid data&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Fill All gives you a &lt;strong&gt;single, privacy-first tool&lt;/strong&gt; that understands data validation natively — whatever your region — and goes further by using &lt;strong&gt;on-device AI&lt;/strong&gt; to intelligently classify form fields without ever sending data to external servers.&lt;/p&gt;

&lt;p&gt;The project is fully &lt;strong&gt;open source (MIT)&lt;/strong&gt; and welcomes contributions from the dev and QA community.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fill All&lt;/strong&gt; is a Chrome Extension (Manifest V3) that automatically fills web forms using a combination of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🤖 &lt;strong&gt;Chrome Built-in AI (Gemini Nano)&lt;/strong&gt; — local LLM that classifies fields contextually&lt;/li&gt;
&lt;li&gt;🧠 &lt;strong&gt;TensorFlow.js&lt;/strong&gt; — a custom-trained MLP classifier that runs entirely in the browser&lt;/li&gt;
&lt;li&gt;� &lt;strong&gt;Locale-aware data generators&lt;/strong&gt; — CPF, CNPJ, RG, CNH, PIS, CEP, phone numbers, PIX keys, credit cards, and more — all with valid check digits and regional formatting&lt;/li&gt;
&lt;li&gt;📏 &lt;strong&gt;Configurable rules engine&lt;/strong&gt; — set fixed values or specific generators per URL pattern + CSS selector&lt;/li&gt;
&lt;li&gt;💾 &lt;strong&gt;Saved form templates&lt;/strong&gt; — fill once, reuse across sessions&lt;/li&gt;
&lt;li&gt;🔍 &lt;strong&gt;Smart field detection pipeline&lt;/strong&gt; — HTML type → Keyword → TensorFlow → Chrome AI, composable and immutable&lt;/li&gt;
&lt;li&gt;🎯 &lt;strong&gt;E2E script export&lt;/strong&gt; — generates ready-to-use Playwright, Cypress, or Pest/Dusk test scripts from filled forms&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Features Built This Weekend
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;i18n&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full internationalization — PT-BR, English, Spanish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fill Emptys Mode&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Only fills blank fields, preserving user-entered data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Improved Rule UX&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Live preview, auto-suggested generators, keyboard shortcuts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enhanced DOM Watcher&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Configurable debounce, Shadow DOM support, smart refill for SPAs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Advanced Logging&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Timestamped, filterable, exportable logs with audit trail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AI Feedback&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Visual badges on AI-filled fields, configurable timeout, graceful fallback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E2E Script Export&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Record interactions → export as Playwright/Cypress/Pest test code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Comprehensive Tests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;70+ test files with Vitest + Playwright, merged coverage reports&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  How It Works (Priority Pipeline)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Privacy First
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Zero data leaves the device.&lt;/strong&gt; No external APIs, no telemetry, no analytics. Both AI models (Gemini Nano and TensorFlow.js) run 100% locally. All user data is stored in &lt;code&gt;chrome.storage.local&lt;/code&gt; only.&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Quick Start Video
&lt;/h3&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/wdaN6umPc5w"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;
&lt;h3&gt;
  
  
  Real-World Usage Example
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.loom.com/share/3b725143febc4bbc803f7959b76222f4" rel="noopener noreferrer"&gt;Watch real-world usage example on Loom →&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;
&lt;h4&gt;
  
  
  Popup — Quick Actions &amp;amp; Generators
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq87wd53cz4dbetkf7ceu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq87wd53cz4dbetkf7ceu.png" alt="Popup"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Floating Panel — In-Page Controls
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4t1wd2m5y4k66wlc9wzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4t1wd2m5y4k66wlc9wzw.png" alt="Floating Panel"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  DevTools Panel — Real-Time Field Inspection
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6483idmczokibq87cot.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6483idmczokibq87cot.png" alt="DevTools"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Options Page — Full Configuration
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Settings&lt;/th&gt;
&lt;th&gt;Saved Forms&lt;/th&gt;
&lt;th&gt;Training Dataset&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff46842q0el03ivp5o9jx.png" alt="Settings"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4sa4iqigjewgjuc47rx.png" alt="Forms"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qk6qia252zvpivkfm3z.png" alt="Dataset"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h3&gt;
  
  
  Add Rules Directly From Fields
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0injz4osbtqsdckrpig1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0injz4osbtqsdckrpig1.png" alt="Add Rule"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/marcuspmd" rel="noopener noreferrer"&gt;
        marcuspmd
      &lt;/a&gt; / &lt;a href="https://github.com/marcuspmd/fill-all" rel="noopener noreferrer"&gt;
        fill-all
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      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.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Fill All&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;AI-powered Chrome extension for smart form filling, recording, and demo generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://deepwiki.com/marcuspmd/fill-all" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0f5ae213ac378635adeb5d7f13cef055ad2f7d9a47b36de7b1c67dbe09f609ca/68747470733a2f2f6465657077696b692e636f6d2f62616467652e737667" alt="Ask DeepWiki"&gt;&lt;/a&gt;
&lt;a href="https://developer.chrome.com/docs/extensions/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/564c4a20d7a0f08fa44e22cf42fddb6072c9aa93ae566728ed7cbd3d9e36decb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d652d457874656e73696f6e2d3432383546343f6c6f676f3d676f6f676c656368726f6d65266c6f676f436f6c6f723d7768697465" alt="Chrome Extension"&gt;&lt;/a&gt;
&lt;a href="https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13e768f02469f23fdf752b493b033e4b06f40197fd24c0131dbb1a195a06750c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d6525323057656225323053746f72652d496e7374616c6c253230457874656e73696f6e2d3161373365383f6c6f676f3d676f6f676c656368726f6d65266c6f676f436f6c6f723d7768697465" alt="Chrome Web Store"&gt;&lt;/a&gt;
&lt;a href="https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cc0d2c971a21906c9fd22d65e2fb3545f51333962d250edfdf24fdbed7fbb356/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616e69666573742d56332d333441383533" alt="Manifest V3"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7808986a538e157183a5d8b501604fe63aa055e60b1d0ba22fd0cf67b83b2e5e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d5374726963742d3331373843363f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://www.tensorflow.org/js" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/67d3b48f814e33a5b7ece17ad5fe8dce0d7fef78104ef7d24503cd508120c0da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54656e736f72466c6f772e6a732d342e32322d4646364630303f6c6f676f3d74656e736f72666c6f77266c6f676f436f6c6f723d7768697465" alt="TensorFlow.js"&gt;&lt;/a&gt;
&lt;a href="https://github.com/marcuspmd/fill-all/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh" rel="nofollow noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all#getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all#documentation" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all/SECURITY.md" rel="noopener noreferrer"&gt;Security&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all/docs-md/contributing.md" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Fill All is an open-source Chrome extension that fills web forms using a layered pipeline of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;rules and saved templates&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;built-in generators for valid Brazilian data&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TensorFlow.js field classification&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chrome Built-in AI / Gemini Nano for contextual filling&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is built for developers, QA engineers, automation teams, and anyone tired of filling the same form repeatedly.&lt;/p&gt;
&lt;p&gt;Everything runs &lt;strong&gt;locally in the browser&lt;/strong&gt;. No external AI API is required for the built-in AI and machine-learning flows.&lt;/p&gt;
&lt;p&gt;Install from the Chrome Web Store:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh" rel="nofollow noopener noreferrer"&gt;https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshots&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Popup&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/popup.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fpopup.png" alt="Popup"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Field Icons and Rule Configuration&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/form_icons.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fform_icons.png" alt="Field Icons"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/form_icons_configure_rules.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fform_icons_configure_rules.png" alt="Configure Rules from Field Icon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Options Page&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;General Settings&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Rules&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_general.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_general.png" alt="General Settings"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_general_language.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_general_language.png" alt="Language"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_rules.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_rules.png" alt="Rules"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Saved Forms&lt;/th&gt;
&lt;th&gt;Form Creation&lt;/th&gt;
&lt;th&gt;Dataset&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_forms.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_forms.png" alt="Saved Forms"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_form_creation.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_form_creation.png" alt="Form Creation"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_dataset.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_dataset.png" alt="Dataset"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detection Strategy&lt;/th&gt;
&lt;th&gt;Field Icons&lt;/th&gt;
&lt;th&gt;Learning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_detection_strategy.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_detection_strategy.png" alt="Detection Strategy"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_field_icons.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_field_icons.png" alt="Field Icons Settings"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_learning.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_learning.png" alt="Learning"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Training&lt;/th&gt;
&lt;th&gt;Log&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_training.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_training.png" alt="Training"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_log.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_log.png" alt="Log"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;DevTools Panel&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actions&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_actions.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_actions.png" alt="DevTools Actions"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_fields.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_fields.png" alt="DevTools Fields"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actions (Light Theme)&lt;/th&gt;
&lt;th&gt;Fields (Light Theme)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_actions_ligth.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_actions_ligth.png" alt="DevTools Actions Light"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_field_ligth.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_field_ligth.png" alt="DevTools Fields Light"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Recording and Export&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recording&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/marcuspmd/fill-all" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

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

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐     ┌──────────────────┐     ┌──────────────────┐
│  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                           │
                   └────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  Design Decisions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Immutable detection pipeline&lt;/strong&gt; — classifiers are chained via &lt;code&gt;DetectionPipeline&lt;/code&gt; that returns new instances on every transformation (&lt;code&gt;.with()&lt;/code&gt;, &lt;code&gt;.without()&lt;/code&gt;, &lt;code&gt;.withOrder()&lt;/code&gt;). This makes the pipeline composable, testable, and free from side effects.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Two-layer validation&lt;/strong&gt; — Full Zod schemas for background/options (correctness first), lightweight &lt;code&gt;typeof&lt;/code&gt; checks in the content script (performance first on the hot path).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Atomic storage updates&lt;/strong&gt; — &lt;code&gt;updateStorageAtomically()&lt;/code&gt; uses a per-key write queue with pure updater functions &lt;code&gt;(current: T) =&amp;gt; T&lt;/code&gt; to prevent race conditions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Continuous learning loop&lt;/strong&gt; — 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.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adapters pattern&lt;/strong&gt; — UI component libraries (Ant Design, Select2) have dedicated adapters so the form filler handles custom selects, datepickers, and cascaders correctly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;E2E export via Strategy pattern&lt;/strong&gt; — each framework (Playwright, Cypress, Pest) has its own code generator, registered in a strategy registry. Adding a new framework means adding one file.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;Building a Chrome extension that bridges &lt;strong&gt;on-device AI with practical developer tools&lt;/strong&gt; taught me that the real power of Gemini Nano isn't in replacing server-side AI — it's in enabling &lt;strong&gt;privacy-respecting intelligence&lt;/strong&gt; 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.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Fill All&lt;/strong&gt; 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.&lt;/p&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/marcuspmd" rel="noopener noreferrer"&gt;
        marcuspmd
      &lt;/a&gt; / &lt;a href="https://github.com/marcuspmd/fill-all" rel="noopener noreferrer"&gt;
        fill-all
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      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.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Fill All&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;AI-powered Chrome extension for smart form filling, recording, and demo generation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://deepwiki.com/marcuspmd/fill-all" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/0f5ae213ac378635adeb5d7f13cef055ad2f7d9a47b36de7b1c67dbe09f609ca/68747470733a2f2f6465657077696b692e636f6d2f62616467652e737667" alt="Ask DeepWiki"&gt;&lt;/a&gt;
&lt;a href="https://developer.chrome.com/docs/extensions/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/564c4a20d7a0f08fa44e22cf42fddb6072c9aa93ae566728ed7cbd3d9e36decb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d652d457874656e73696f6e2d3432383546343f6c6f676f3d676f6f676c656368726f6d65266c6f676f436f6c6f723d7768697465" alt="Chrome Extension"&gt;&lt;/a&gt;
&lt;a href="https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/13e768f02469f23fdf752b493b033e4b06f40197fd24c0131dbb1a195a06750c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4368726f6d6525323057656225323053746f72652d496e7374616c6c253230457874656e73696f6e2d3161373365383f6c6f676f3d676f6f676c656368726f6d65266c6f676f436f6c6f723d7768697465" alt="Chrome Web Store"&gt;&lt;/a&gt;
&lt;a href="https://developer.chrome.com/docs/extensions/develop/migrate/what-is-mv3" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/cc0d2c971a21906c9fd22d65e2fb3545f51333962d250edfdf24fdbed7fbb356/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d616e69666573742d56332d333441383533" alt="Manifest V3"&gt;&lt;/a&gt;
&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/7808986a538e157183a5d8b501604fe63aa055e60b1d0ba22fd0cf67b83b2e5e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d5374726963742d3331373843363f6c6f676f3d74797065736372697074266c6f676f436f6c6f723d7768697465" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://www.tensorflow.org/js" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/67d3b48f814e33a5b7ece17ad5fe8dce0d7fef78104ef7d24503cd508120c0da/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54656e736f72466c6f772e6a732d342e32322d4646364630303f6c6f676f3d74656e736f72666c6f77266c6f676f436f6c6f723d7768697465" alt="TensorFlow.js"&gt;&lt;/a&gt;
&lt;a href="https://github.com/marcuspmd/fill-all/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh" rel="nofollow noopener noreferrer"&gt;Chrome Web Store&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all#getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all#documentation" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all/SECURITY.md" rel="noopener noreferrer"&gt;Security&lt;/a&gt; · &lt;a href="https://github.com/marcuspmd/fill-all/docs-md/contributing.md" rel="noopener noreferrer"&gt;Contributing&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Overview&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Fill All is an open-source Chrome extension that fills web forms using a layered pipeline of:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;rules and saved templates&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;built-in generators for valid Brazilian data&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TensorFlow.js field classification&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chrome Built-in AI / Gemini Nano for contextual filling&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It is built for developers, QA engineers, automation teams, and anyone tired of filling the same form repeatedly.&lt;/p&gt;
&lt;p&gt;Everything runs &lt;strong&gt;locally in the browser&lt;/strong&gt;. No external AI API is required for the built-in AI and machine-learning flows.&lt;/p&gt;
&lt;p&gt;Install from the Chrome Web Store:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh" rel="nofollow noopener noreferrer"&gt;https://chromewebstore.google.com/detail/fill-all/djnkgmelgfdjpeacmolelikhgioendjh&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Screenshots&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Popup&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/popup.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fpopup.png" alt="Popup"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Field Icons and Rule Configuration&lt;/h3&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/form_icons.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fform_icons.png" alt="Field Icons"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/form_icons_configure_rules.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fform_icons_configure_rules.png" alt="Configure Rules from Field Icon"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Options Page&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;General Settings&lt;/th&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Rules&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_general.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_general.png" alt="General Settings"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_general_language.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_general_language.png" alt="Language"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_rules.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_rules.png" alt="Rules"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Saved Forms&lt;/th&gt;
&lt;th&gt;Form Creation&lt;/th&gt;
&lt;th&gt;Dataset&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_forms.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_forms.png" alt="Saved Forms"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_form_creation.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_form_creation.png" alt="Form Creation"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_dataset.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_dataset.png" alt="Dataset"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detection Strategy&lt;/th&gt;
&lt;th&gt;Field Icons&lt;/th&gt;
&lt;th&gt;Learning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_detection_strategy.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_detection_strategy.png" alt="Detection Strategy"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_field_icons.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_field_icons.png" alt="Field Icons Settings"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_learning.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_learning.png" alt="Learning"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Training&lt;/th&gt;
&lt;th&gt;Log&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_training.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_training.png" alt="Training"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/settings_log.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fsettings_log.png" alt="Log"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;DevTools Panel&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actions&lt;/th&gt;
&lt;th&gt;Fields&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_actions.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_actions.png" alt="DevTools Actions"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_fields.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_fields.png" alt="DevTools Fields"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Actions (Light Theme)&lt;/th&gt;
&lt;th&gt;Fields (Light Theme)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_actions_ligth.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_actions_ligth.png" alt="DevTools Actions Light"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;&lt;a rel="noopener noreferrer" href="https://github.com/marcuspmd/fill-all/docs-md/images/devtools_field_ligth.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fmarcuspmd%2Ffill-all%2Fdocs-md%2Fimages%2Fdevtools_field_ligth.png" alt="DevTools Fields Light"&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Recording and Export&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recording&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/marcuspmd/fill-all" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
