Open models in the browser
Seven small apps where the model runs inside the browser tab.
- State
- Shipped
- Category
- AI / ML
- Year
- 2026
- Role
- Solo
- Deployment
- LiveSeven apps, each linked in the write-up
Open-weight model
Whisper, CLIP, Gemma, Kokoro, Donut
transformers.js in the tab
WebGPU, or WASM where it is missing
Code around the model
checkers and rules decide what ships
npm test
reproduces each measured number
GitHub Pages
no server, no API key, nothing uploaded
In October 2026 I entered DEV's Hacktoberfest open-source AI challenge every week for four weeks, with two apps a week. Each one runs an open-weight model inside the browser tab, so it is a static page with no server, no API key, and nothing uploaded. Already Filed came out of the same run and has its own entry. These are the other seven.
Why the browser
Running in the tab takes away the usual fix for a weak answer, which is a bigger hosted model. The models here are small: Gemma 3 1B, the 300M EmbeddingGemma, bge-small, Whisper base. What is left to work on is the code around the model, and a test that says whether a change helped.
So six of the seven ship with an npm test that runs the real model on labelled data, and the numbers below come from those runs.
The seven
- Lazy Susan. Photograph a receipt, tap who had what, paste the split. Donut reads the receipt, and Florence-2 OCR takes a second look when the lines do not add up to the total. On 436 receipts it had never seen, the green "adds up" tick was exactly right 93% of the time. OpenSource
- Fine Print. Finds the clauses in a freelance contract that cost you money, with EmbeddingGemma and 14 small classifiers trained on lawyer-marked contracts. On 102 held-out contracts it found 66% of the highlighted clauses with 4.6 false alarms each. Ctrl+F found 49% with 10.5. OpenSource
- Backlist. Turns a book you wrote into an audiobook on your own laptop. Kokoro narrates and Whisper listens back to every line. On books it was never tuned on, it caught 97% of 296 planted faults with one false alarm in 80 clean lines. OpenSource
- Proof of Grass. A daily outdoor bingo card that only a real photo can fill, judged by CLIP on the phone. The shipped judge fills the right square for 99 of 102 outdoor photos and for none of 29 indoor ones. OpenSource
- Sidequest. Turns the OpenStreetMap around you into a short walking quest. Code picks the stops and the route, and Gemma 3 1B only writes one small mission per stop. A checker that rejects invented names and dates, with a retry and a plain template as the last resort, took clean missions from 16 of 24 to 24 of 24. OpenSource
- SafePlate. An allergy-aware meal planner that compares what an ingredient means instead of how it is spelled, with bge-small in the tab. On its 54-ingredient test set it flags 29 of 30 real allergens, with one false alarm in 24 safe ones. OpenSource
- Nani's Kitchen. Turns voice memos of spoken recipes into a printable recipe book, with Whisper transcribing in the tab. Its tests cover the recipe parser, not the transcription, so there is no accuracy number to quote. OpenSource
What carried over
- The code around the model moved the numbers.In Sidequest, better prompts went from 8 to 16 clean missions out of 24, and the checker did the rest. In Lazy Susan, checking the receipt's own arithmetic took fully right receipts from 3% to 21% before a second model was added.
- Bigger was not better.A CLIP model with four times the compute scored 98 of 102 against the small one's 99, so the small one ships.
- Test the trap, not only the result.Proof of Grass's second design beat the first on outdoor photos. Then photos of rooms and screens went into the test set, and every one of them filled a square.
- Report the bad number too. Lazy Susan reads receipts worse in Chrome than in Node, 23% fully right against 36% on the same 50 receipts, and its README says so.