The problem
A to-do list says what to do, not how long it will take, so a day can be overbooked before it starts. I liked Timely, a note-taker that sizes each line, and wanted my own version: a different design, with the estimates in a column on the right.
What I did
- Rebuilt the idea from scratch in React, with an estimate column beside every line.
- Sent each line to Claude with the whole note as context. It returns the most likely minutes, an 80% range, a confidence level, and one of seven categories.
- Built the Ledger: remaining vs. done, a finish-by time, a capacity meter, where the time goes, quick wins under 15 minutes, and deep-work blocks over 90.
- Added a Day view. Drag items from an Unscheduled tray onto the calendar, resize a block to change how long it takes, or do all of it from the keyboard.
- Kept the user in charge. Click any estimate to override it, write "(1h)" in a line and it's honored exactly, and ⌘B splits a big line into 3 to 7 estimated sub-tasks.
- Made it work with no key at all. Estimates fall back to a keyword heuristic, marked with ~. A visitor's own key always pays for their use, and the server key needs an access code.
Results
Notes live in the browser. Requests are capped at 50 lines and 64 KB per call, so a runaway loop can't run up a bill.
What I'd do differently
Test against the deployed runtime, not just the dev server. Vite and the type checker accepted imports that Node rejected once deployed, so I added a check that loads every function the way Vercel does. Next on the roadmap: an agent that does the task, not just sizes it.
Artifacts
Try Tally ↗ · Source on GitHub ↗


