DEV Community

OnePassApps
OnePassApps

Posted on

Pomodoro Cycle in the Browser: What Happens When a Focus Block Ends

I work on OnePassApps, so this is our own build, measured on our own site on 7 November 2026.

There is already a post here about the Focus Timer's two modes, its tab-title countdown and the keyboard shortcuts. That one states its own limits plainly: the full Pomodoro cycle was not run to completion, so what the panel does at the end of a focus block was not measured, and "Start the next phase automatically" was left off.

So this post runs the cycle to the end, with every phase turned on.

What I set up

I opened the Focus Timer in a signed-out tab and shortened every duration to one minute, so a whole cycle would fit in one sitting:

  • Focus: 1 minute
  • Short break: 1 minute
  • Long break: 1 minute
  • Long break every: 1 session
  • "Start the next phase automatically": on
  • "Play a chime when time is up": on - that tick ships ticked on a fresh load
  • "Show a browser notification": off

A fresh load otherwise reads Focus 25 min, Short break 5 min, Long break 15 min and "Long break every 4 sessions". I left the notification tick off, so no permission prompt appeared and the notification path is still untested.

The cycle, second by second

I polled the panel once a second and recorded every distinct state.

Elapsed Phase Readout Session counter Panel message
0 s Focus 01:00 No sessions yet this visit Focus started.
60 s Short break 01:00 1 session this visit Focus session complete. Short break started.
121 s Focus 01:00 1 session this visit Short break over. Focus started.
181 s Long break 01:00 2 sessions this visit Focus session complete. Long break started.
240 s Focus 01:00 2 sessions this visit Long break over. Focus started.
301 s Short break 01:00 3 sessions this visit Focus session complete. Short break started.

That is the whole loop: focus, short break, focus, long break, focus, short break. Each phase names itself in the tab title as well - "01:00 · Short break · Focus Timer" - and the title changes with the phase.

Five things the run showed

The counter counts finished focus blocks, not phases. It reads "No sessions yet this visit" until the first block ends, then "1 session this visit" - and the wording flips to the plural "2 sessions this visit" from the second one on. It does not move when a break ends: the break at 121 s still reads "1 session this visit", and the count moves on at 181 s.

The long break is never closer than two sessions. I typed 1 into "Long break every" and the panel's own summary line still read "Long break every 2 sessions"; with 0 in the field it read 2 as well, while 5 gave "Long break every 5 sessions". The text field keeps whatever you type, the panel line does not go below 2 - and the run agrees with the panel line, not with the field: the long break came after the second focus block, not the first.

The readout changes shape past an hour. 45 minutes shows "45:00". 90 minutes shows "1:30:00" - hours, then minutes, then seconds.

The duration fields lock while the timer runs. With the clock running, all four inputs are disabled and the panel shows "Pause the timer to change these." The Start button becomes Pause.

Nothing survives a reload. After the full cycle above, a reload gave back Focus 25:00, the state "Ready", "No sessions yet this visit" and "Long break every 4 sessions". The panel's own line "Nothing is stored. Closing this tab clears the timer." is accurate: the only keys in localStorage belong to the surrounding site shell - the recently-visited list, the theme preset and Clerk's environment blob - and sessionStorage holds one feature-subject id. No timer, no session count, no phase.

One thing I could not catch

The readout never displayed 00:00 in my one-second polling. It went from 00:01 straight to the next phase at 01:00, so the zero frame is either shorter than a second or never rendered. I am not claiming what the panel looks like at exactly zero.

Limits

One browser, one signed-out session, one build on 7 November 2026. The notification path is untested, because I left the tick off. The chime tick was on, but this box has no audio output, so I did not verify a sound. The long break in my run was one minute because I set it to one; the shipped default is 15. I changed the durations and that one setting, and did not vary the rest.

Cost

Standard is free right now: $0 / month, 100,000 credits every 30 days, no card required and no automatic paid subscription. Existing paid subscriptions keep their terms. The step-by-step version, with the same key map, is on the Focus Timer guide.

I work on OnePassApps. The tool is ours, which is why the numbers above came out of a tab rather than off a marketing page.

Top comments (0)