All work
Browser Extension

SurvSay Chrome Extension

A Chrome extension that fills forms by voice, and rewrites the ones that are hard to read.

2 months
Build time
Solo
Full-Stack Developer
SurvSay Chrome Extension, Voice-Driven Form Filling with On-Device AI

The problem

Web forms assume two things about you: that you can type quickly, and that you can parse a dense label at a glance. Plenty of people can do neither, and the form is the last thing standing between them and whatever they came to do.

Dyslexia is the clearest case. The barrier there is usually not the typing, it is the wording. Labels written for the person who built the form rather than the person filling it in, unexplained jargon, and instructions that take three readings.

The constraint

On-device AI you cannot rely on being there

Chrome's built-in Gemini Nano is the right model for this job. It runs locally, so nothing typed into a form ever leaves the machine, and there is no per-request cost to worry about as usage grows.

It is also not guaranteed to be present. Availability depends on the user's Chrome build, their platform and their free disk space, and even where it is supported the model may still be downloading the first time the extension runs.

So the extension could not be written as though the model were always there. Every AI-backed feature needed a second path that works without it, and the interface had to look identical either way, because a feature that silently disappears is worse than one that was never offered.

What I built

  1. 01

    On-device first, hosted fallback second

    Every model call goes through one interface. It tries Gemini Nano, and falls through to a Firebase-hosted model when the local one is unavailable or still downloading.

    Keeping the branch behind a single boundary meant the UI never had to know which path served a request, and the privacy story stays honest: on-device whenever the platform allows it.

  2. 02

    Voice as an input method, not a mode

    Speech writes into whichever field has focus, rather than launching a separate voice flow that owns the whole form. You can dictate one awkward field and type the rest, which is how people actually fill forms.

  3. 03

    Rewriting happens at the field

    Rewrite controls are injected inline next to each input instead of living in a popup. The text you are changing stays on screen while you change it, and there is no context to rebuild after each edit.

  4. 04

    Simplify Mode

    A page-level toggle that rewrites labels and instructions into plainer language, built with dyslexia in mind. It changes the form's copy, not its structure, the fields, order and validation stay exactly where the site put them.

Open channel

Got something
like this to build?

Happy to talk through how any of this was put together, or what it would take to do something similar.