Skip to content
Things I make

Flowtime

Breaks that match how long you actually focused.

Offline-first interaction · 2026

Next.js, TypeScript, Service Worker

Flowtime focus timer showing 00:00:00 and a Start Focus Session button

Pomodoro kept cutting me off.

Twenty-five minutes in, the timer would cut me off mid-flow. Flowtime counts up while you focus, then sets a break in proportion. In a browser that has two catches: background tabs slow timers down, and closing the tab loses the session.

The problem, on paper.

Practitioners manually time sessions with phone stopwatches, calculate break durations mentally.

The spec’s test: finish a first full cycle within two minutes of landing.

The spec, 3 January 2026
  • 6timer states
  • 189unit tests
  • ⅕default break
  • 2-minutefirst cycle (the target)

Count from a fixed point, and ask instead of guessing.

  • Time comes from a timestamp, so a sleeping tab never loses minutes.
  • The break follows the focus: a fifth by default, adjustable from a third to an eighth.
  • Every state has a name: six of them, so the interface always knows what to show.
  • Ask, don’t assume: come back to an unfinished session and Flowtime asks what to do.

Everything stays in your browser.

Sessions, tags, notes, and settings live on your device, with a CSV export. A service worker keeps it working offline. It works from the keyboard and announces changes to screen readers.

Used, not launched.

I use it for my own focused work, and friends have used it too. I didn’t record what changed from what they said, and it isn’t launched or measured yet.

What I’d do next

  • Move between devices, keeping local storage as the default.
  • Show when you focus best, like the time of day you tend to focus longest.
Next projectThresholdA clearer view of what moving could cost.