cd /news/artificial-intelligence/siesta-the-anti-todo-list-that-runs-… Β· home β€Ί topics β€Ί artificial-intelligence β€Ί article
[ARTICLE Β· art-156660] src=dev.to β†— pub= topic=artificial-intelligence verified=true sentiment=↑ positive

Siesta: the anti-todo list that runs Gemma 3 1B in your browser and tells you to do less

A developer built Siesta, an open-source anti-todo list that runs Gemma 3 1B (q4, ~0.5 GB) entirely in the browser via Transformers.js v4 on WebGPU with a WASM fallback, requiring no account, server, or API key and working offline once the model is cached. The app takes a free-form pile of tasks and returns at most a few scheduled items, a parking lot, and a drop list, with a deterministic budget engine handling caps, breaks, and deadlines while the model only decides what matters. The developer reports that asking the 1B model for a single-letter verdict (A keep / B park / C drop) produced correct answers on 11 of 11 tasks every run, after batch, per-task, and free-text rationale prompts failed.

by read4 min views3 publishedOct 24, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady

I deleted eleven tasks and kept two. That was the whole feature.

Siesta is an anti-todo list. You paste everything on your mind β€” eleven lines, no order, half of them already late β€” and it returns the smallest possible day: at most a couple of things to do, a parking lot, a list of things you are officially allowed to forget, and a permission slip.

It runs Gemma 3 1B inside the browser tab. No account, no server, no API key, no bill. Once the tab has downloaded the model, it works with the Wi-Fi off.

The task list is arguably the most personal document a person owns after their resume: it is a map of what they are worried about. Siesta is built on the idea that this map should not be uploaded anywhere just to be told what to do with it.

Who gets to be lazier? Me, and anyone who has ever opened a to-do app and felt their chest tighten. The app does the deciding β€” which is the actual chore. Nobody procrastinates because writing "clean the cupboard" is hard. They procrastinate because deciding what deserves today is hard.

Live: https://4-thkind.github.io/siesta/

That screenshot is a real run, not a mock: eleven tasks in, two scheduled, eight parked, one let go, 3h 45m of tracked effort reclaimed. The permission slip is written by the model; the reasons under each task come from the facts in the line β€” "deadline is tomorrow", "two hours is too much for today", "didn't fit today's budget".

The eleven-line pile is my own test pile, built to have a mix of real deadlines and vague wishes. Every decision and every number in that screenshot came out of the app running on a laptop GPU.

https://github.com/4-thkind/siesta β€” MIT, no dependencies, no build step:

index.html      the whole UI skeleton
src/app.js      flow, progress, rendering, markdown export
src/parse.js    deadlines, estimates, priorities (pure, tested)
src/triage.js   verdict protocol, budget engine, scheduler, guards (pure, tested)
src/model.js    Transformers.js pipeline, prompts, fallbacks
src/store.js    weekly ledger in localStorage
test/run.mjs    28 assertions, run with: node test/run.mjs

The model: onnx-community/gemma-3-1b-it-ONNX at q4 (~0.5 GB), run through Transformers.js v4 on WebGPU with a WASM fallback. First load caches it; after that the tab is offline. One constant swaps the model.

The part I did not expect: teaching a 1B model to answer a question. I tried three formats before one worked, and all three failures are written up in AGENT_NOTES.md:

Attempt What I asked for What happened
1 numbered batch in, `3\ DROP\
2 one task per call, {% raw %}`VERDICT\ reason`
3 ask the model for the why platitudes: "Focus is key", "Time is a gift"
4 one letter: A keep / B park / C drop 11 of 11, every run

So the design rule became: the model decides what matters; the code decides what fits, what cannot be dropped, and what the reason is. Dates and arithmetic never touch the model. Reasons are derived from the facts the user actually typed, which is why they can say "didn't fit today's budget" instead of "Focus is key."

Two more things had to be fixed by using the app, not by reading it:

The budget engine is deterministic: a cap on things (1–4) and a cap on minutes, a five-minute break between items, deadlines inside 24 hours win over both caps (with an honest note that the day is over budget and why), and nothing due within three days can be dropped. Each rule has a unit test; node test/run.mjs runs 28 of them in under a second.

This was built in one session with an AI coding agent. I chose the product, the constraints (local, free, offline) and the design direction, and approved each change as it was tested live in the browser. The unedited log β€” four prompt strategies, the bugs that only appeared when the app ran, and the layout collision that only showed up in a screenshot β€” is in AGENT_NOTES.md.

The real payoff is not the minutes saved; it is the decision avoided. But the numbers are nice too: eleven tasks in, a 1h 55m day out, 3h 45m of tracked effort formally parked or dropped, and one genuinely dead task removed from the list for good.

My favourite part is the smallest: the "Let go" column contains exactly one entry β€” "Update resume β€” nobody is waiting on this one." That is not a productivity insight. It is permission, and it is the thing a normal to-do app would never give you.

Best Use of Gemma β€” Gemma 3 1B runs fully on-device (ONNX q4, WebGPU) and is the only component making judgement calls. The model is swappable via a single constant, and the app keeps working with no network after the first load.

── more in #artificial-intelligence 4 stories Β· sorted by recency
── more on @siesta 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/siesta-the-anti-todo…] indexed:0 read:4min 2026-10-24 Β· β€”