Pomodoro timer and session planner
A focus timer that runs pomodoros and breaks in sequence, and publishes the whole plan before it starts: every interval, the clock time each one begins, how much of the session is work, and what time you finish. It runs in this browser tab and keeps nothing.
Focus — interval 1 of 15
25:00
Interval by interval
| 1 | Focus | 25 | 09:00 | 25 |
| 2 | Short break | 5 | 09:25 | 30 |
| 3 | Focus | 25 | 09:30 | 55 |
| 4 | Short break | 5 | 09:55 | 60 |
| 5 | Focus | 25 | 10:00 | 85 |
| 6 | Short break | 5 | 10:25 | 90 |
| 7 | Focus | 25 | 10:30 | 115 |
| 8 | Long break | 15 | 10:55 | 130 |
| 9 | Focus | 25 | 11:10 | 155 |
| 10 | Short break | 5 | 11:35 | 160 |
| 11 | Focus | 25 | 11:40 | 185 |
| 12 | Short break | 5 | 12:05 | 190 |
| 13 | Focus | 25 | 12:10 | 215 |
| 14 | Short break | 5 | 12:35 | 220 |
| 15 | Focus | 25 | 12:40 | 245 |
One bar per interval. The tall bars are pomodoros, the short ones between them are breaks, and the middling one is the long break.
How it works
What this works out
A pomodoro session is not a timer, it is a sequence: work, break, work, break, and a longer break at the end of each set. The question people actually have is what that sequence costs — how much of the afternoon it takes, how much of it is work rather than rest, and what time it puts you at the other end.
That is arithmetic, and it is easy to get wrong in the direction that matters. Eight pomodoros sounds like three hours and twenty minutes of work, and it is, but it occupies four hours and five minutes of the day. This publishes the whole plan before the first interval starts, so the collision with the meeting at one o’clock is visible now rather than at one o’clock.
The method
Three decisions in the formula are worth stating, because a reasonable person would guess at least one of them the other way.
The break belongs after the pomodoro, and the last one has none. Breaks are counted between pomodoros, so N pomodoros give N - 1 breaks and 2N - 1 intervals in total. Scheduling a break after the final pomodoro would add time to the session that nobody spends in it.
The long break replaces the short one. At the end of a set — every R-th pomodoro — the break that would have been short is long instead. It is not appended to a short break, so a set of four costs one long break, not one of each. With N = 8 and R = 4 the long break falls after the fourth pomodoro and not after the eighth, because the eighth is the last one and gets no break at all.
Clock times are integer arithmetic, not dates. Minutes since midnight,
added, then divided by 1,440 for the day and the remainder for the face. Parsing
09:00 into a Date would attach it to today, in the host timezone, with
whatever daylight-saving transition that day happens to carry — three ways for
the same input to produce two different answers on a page whose whole claim is
that the arithmetic is checkable. A session that runs past midnight is labelled
(next day) rather than being wrapped silently, because five past one tonight
and five past one tomorrow morning are not the same answer.
The cue at the end of each interval is a short tone synthesised with the Web Audio API rather than a sound file, so nothing is downloaded and nothing is requested when it plays. The countdown reads the clock rather than counting its own ticks, which is why a throttled background tab delays when the end of an interval is noticed but does not make the timer slow.
Before you read on
Eight pomodoros, with a long break every fourth. How many long breaks does the session contain?
One, after the fourth pomodoro. Breaks are counted between pomodoros, so eight give seven breaks and fifteen intervals in total; of those seven, floor(7 / 4) = 1 is long. Scheduling a break after the final pomodoro would add fifteen minutes to a session nobody spends in it. Both halves of that catch people out — a reasonable person would guess at least one of them the other way.
- Focus20081.6%
- Break4518.4%
A worked example
Twenty-five-minute pomodoros, five-minute short breaks, a fifteen-minute long break, sets of four, eight pomodoros, starting at 09:00.
1 Focus 25 min 09:00 25 elapsed
2 Short break 5 min 09:25 30
3 Focus 25 min 09:30 55
4 Short break 5 min 09:55 60
5 Focus 25 min 10:00 85
6 Short break 5 min 10:25 90
7 Focus 25 min 10:30 115
8 Long break 15 min 10:55 130
9 Focus 25 min 11:10 155
10 Short break 5 min 11:35 160
11 Focus 25 min 11:40 185
12 Short break 5 min 12:05 190
13 Focus 25 min 12:10 215
14 Short break 5 min 12:35 220
15 Focus 25 min 12:40 245
Checked against the closed form: seven breaks, of which floor(7 / 4) = 1 is long, so 6 x 5 + 1 x 15 = 45 minutes of break against 8 x 25 = 200 minutes of focus. The session is 245 minutes and finishes at 09:00 + 4h 05m = 13:05.
These are the same numbers asserted in this tool’s test file, so if the formula ever changes without this page changing with it, the build fails.
What it does not do
It does not model the session you will actually have. It assumes no interruption, no pomodoro abandoned halfway, no break that runs long, and no task that finishes early — and every one of those moves the finish time later except the last. Cirillo’s own method spends as much attention on recording interruptions as on the timer, and none of that is here.
It does not know about your calendar, so it will happily plan a session straight through a meeting. It keeps no history: close the tab and the plan and the countdown are both gone, because there is nowhere for them to be kept. And it takes no position on whether twenty-five minutes is the right length for you — that number comes from the technique as published, not from anything measured about your work.
The formula
Given
F minutes in one pomodoro
S minutes in a short break
L minutes in a long break
N pomodoros in the session
R pomodoros in a set
the session is 2N - 1 intervals:
interval 2k - 1 = pomodoro k for k = 1 … N
interval 2k = the break after pomodoro k for k = 1 … N - 1
long when k mod R = 0
short otherwise
There is no break after pomodoro N.
longBreaks = floor((N - 1) / R)
shortBreaks = (N - 1) - longBreaks
focusTime = N x F
breakTime = shortBreaks x S + longBreaks x L
totalTime = focusTime + breakTime
Clock times are whole minutes since midnight:
start = 60 x hour + minute
finish = start + totalTime
clockFace = finish mod 1440
daysLater = floor(finish / 1440)
What it assumes
- No break is scheduled after the final pomodoro, because the session is over. A plan that padded the end would overstate the finish time by five to thirty minutes every time.
- A long break replaces the short break at the end of a set. It is not added to it, so a set of four costs one long break rather than a short break and a long one.
- Every interval is a whole number of minutes. The countdown itself runs in seconds, but a plan cannot express a ninety-second break.
- The plan assumes nothing is paused, skipped or overrun. Every interruption in a real session pushes the finish time later and none of them pull it earlier, so the figure here is the earliest you will finish rather than the likeliest.
- Clock times are arithmetic on minutes since midnight, with no timezone and no daylight-saving transition. A session that straddles a clock change will finish an hour away from the time shown.
Common questions
Why is there no break after the last pomodoro?
Because the session has ended, and a break you are not going to take is not time you have spent. Counting one would make every finish time on this page five to thirty minutes too late. If you plan to rest afterwards anyway, add the rest yourself — it is not part of the work.
Why is my session longer than the pomodoros add up to?
The breaks. Eight pomodoros of twenty-five minutes is 200 minutes of work, but the seven breaks between them add another 45, so the session occupies 245 minutes — a little over four hours — for three hours and twenty minutes of focus. That gap is the number most plans get wrong.
Does the timer keep running accurately if I switch tabs?
The remaining time is worked out from the clock rather than by counting ticks, so a background tab cannot make the timer drift — whenever you look at it, the figure shown is the true time left, and coming back to the tab corrects the display within a quarter of a second. What a background tab does delay is the moment the end of an interval is noticed. The HTML Standard already clamps nested timers to at least four milliseconds, and browsers go a great deal further to save power: Chrome runs timers in a tab that has been hidden and silent for five minutes only about once a minute. So the cue can arrive late — a second in a tab you just switched away from, up to a minute in one you left alone — even though the countdown behind it is never wrong.
Is anything sent anywhere?
No. The plan is arithmetic done in this tab and the cue is a tone synthesised by the browser, so there is no audio file to fetch and no figure to report. There is no server to send anything to.
Can I use fifty minutes instead of twenty-five?
Yes. Every length is a setting, up to two hours for a pomodoro. Twenty-five is the length the technique was written around rather than a limit, and 52/17 and 50/10 are both common. The set size is a setting too, so you can have a long break after every second pomodoro or after every twelfth.
Why does the plan show a time of day at all?
Because "how long is this" and "when am I done" are different questions and people ask the second one. Give it the time you are starting and every interval gets a clock time, which is what makes it possible to see that a session collides with a meeting before you commit to it.