| Metric | Value | Copy |
|---|---|---|
| Phase | {{ phase }} | |
| Round | {{ roundIndex }} | |
| Completed focus | {{ completed_pomos }} | |
| Elapsed (phase) | {{ elapsedDisplay }} | |
| Remaining (phase) | {{ remainingDisplay }} | |
| Ends (local) | {{ current_finish_time_local || '—' }} | |
| Next phase | {{ nextPhaseLabel }} | |
| Goal progress | {{ completed_pomos }} / {{ goal_pomos }} | |
| Goal ETA | {{ goal_eta_local }} |
| # | Phase | Start | Duration (min) | Copy |
|---|---|---|---|---|
| {{ r.idx }} | {{ r.phase }} | {{ r.startLocal }} | {{ r.durationMin }} | |
| No upcoming phases. | ||||
The Pomodoro method breaks work into repeated focus blocks with planned recovery in between. Its practical value is simple: a task that feels vague or endless becomes a sequence with a clear start, a clear pause, and a visible stopping point. This timer turns that structure into a working session plan instead of leaving it as a rough intention.
The package does more than count down twenty-five minutes. It tracks focus rounds, schedules short and long breaks, shows the current phase and next phase, estimates when the present phase will end, and can project a goal ETA when you set a target number of focus rounds. That makes it useful both for individual work blocks and for planning a larger stretch of the day.
A common use case is a deep-work session that alternates 25-minute focus blocks with 5-minute short breaks and a longer reset after every fourth round. Another is a shorter or more adaptive rhythm, such as 40 minutes of focus with a 10-minute break for writing, study, or administrative cleanup. The package lets you model either version and see the schedule unfold before you start.
The timer also exposes the operational details that usually get ignored in simpler tools. You can add a short countdown before the first phase begins, auto-start the next phase, enable tick and boundary cues, request a screen wake lock, use vibration where supported, and allow desktop notifications on phase changes. The schedule table, time-mix chart, and JSON export are there when you need more than a single countdown ring.
The boundary is that timing structure is not the same thing as productivity by itself. A perfectly tuned session length will not choose your priorities, prevent interruptions, or guarantee that a task was broken into the right units. The tool is best understood as a pacing aid that keeps the rhythm visible and repeatable, while the quality of the work still depends on how you use that rhythm.
Start with the session shape, not the alerts. Focus length, short break, long break, and long-break frequency determine the real workload pattern. If you are doing cognitively heavy work, a shorter focus block may protect quality. If you are doing steady production work, a longer focus block may reduce restart cost. Those timing choices matter more than whether the timer beeps.
The goal field changes how the session should be read. Without a goal, the timer is an open-ended phase tracker. With a goal, it becomes a forward plan: completed focus rounds are counted, the next phases are projected, and the estimated finish time becomes a meaningful pacing signal. That is especially useful when you want to decide whether four more rounds fit before a meeting or before the end of the workday.
The advanced options are best treated as environment controls. Auto-start next phase is convenient when you want the rhythm to keep moving without manual clicks. Tick, beep, vibration, and notifications matter when you may not be staring at the timer the whole time. Wake lock matters when the device would otherwise sleep and interrupt the countdown. Those settings should match the setting you work in, not just the features available in the browser.
The tab views answer different questions. Session Summary tells you what is happening right now. Pomodoro Schedule shows the projected order of upcoming phases and their local start times. The time-mix chart explains how one full long cycle divides time between focus, short breaks, and the long break. The JSON tab is useful when you want the full input and state bundle for documentation or automation.
If the timer feels unreliable, the first things to check are not the durations but the environment: background-tab throttling, notification permissions, audio restrictions, and wake-lock support vary across devices and browsers. The package does its work locally in the browser, which is good for privacy and responsiveness, but it also means browser policy and device behavior shape the user experience more than any server-side guarantee would.
The timer represents each phase in seconds and uses high-resolution timestamps while it is running. Focus, short-break, and long-break inputs are entered in minutes, converted to seconds, and then used as the duration source for each phase. When the timer is paused, elapsed time is frozen. When it resumes, the package rebuilds the remaining time from the frozen elapsed value rather than restarting the phase from zero.
The phase sequence follows a deterministic rule. Focus is the default work phase. After each completed focus round, the script decides between a short break and a long break by checking whether the completed round count is divisible by the configured long-break frequency. If auto-start is disabled, the next phase is staged but does not begin until you start it. If auto-start is enabled, the timer moves across boundaries automatically after the configured cues fire.
The schedule view is a forward projection built from the current state. If the timer is already running, the first schedule row starts with the remaining time in the active phase. If the timer is idle, the schedule begins with a focus phase. Goal ETA uses the same logic but stops once the requested number of focus rounds has been reached, adding the necessary breaks along the way. That is why the goal estimate can change materially when you alter long-break frequency even if the focus length stays the same.
The cue system is local and browser-dependent. Beeps are synthesized in the browser from the configured frequency, duration, and volume. Optional ticking uses the same audio path at one-second intervals while the timer runs. Vibration is only attempted when the device exposes the vibration API. Desktop notifications depend on permission state. Wake lock is requested only when that toggle is enabled and the browser supports the Screen Wake Lock API.
The exported surfaces are derived from the same session state. Session Summary can be copied or downloaded as CSV and DOCX. Pomodoro Schedule can be exported the same way and includes projected local start times and durations. The time-mix chart renders the relative focus, short-break, and long-break share for one long cycle, with image and CSV export options. The JSON tab records settings, current phase state, and the schedule projection in a structured payload.
| Input or toggle | Package behavior | Why it matters |
|---|---|---|
| Focus, short break, long break | Converted from minutes into per-phase second totals | Defines the core workload and recovery rhythm |
| Long break every | Switches every Nth completed focus round to a long break | Changes both schedule projection and goal ETA |
| Goal rounds | Counts completed focus phases and estimates total time to target | Turns the timer into a finite session planner |
| Countdown before start | Creates an initial countdown phase before the first focus block | Gives a setup buffer before the session begins |
| Auto-start next phase | Continues across phase boundaries without a manual restart | Useful for uninterrupted rhythm, but it reduces deliberate pause points |
| Tick, beep, vibration, notifications, wake lock | Enables local boundary cues and device-behavior requests where supported | Improves awareness away from the screen, but support varies by browser and device |
| Surface | What it shows | Exports available |
|---|---|---|
| Session Summary | Current phase, round, progress, remaining time, next phase, and goal ETA | CSV copy, CSV download, DOCX export, single-metric copy |
| Pomodoro Schedule | Projected sequence of upcoming phases with local start times and durations | CSV copy, CSV download, DOCX export, single-row copy |
| Time Mix chart | Relative focus, short-break, and long-break share for one long cycle | PNG, WebP, JPEG, and CSV |
| JSON | Inputs, current state, and schedule projection | Clipboard copy and JSON download |
The large timer display is the live phase truth. Round index, phase label, and progress bar only make sense in relation to that remaining-time number. If the timer is paused, the current phase has not failed or been skipped; it is simply holding the frozen elapsed value until you resume or stop.
The goal ETA is best read as a schedule estimate, not a promise. It assumes the configured structure continues exactly from the current state and that all future focus and break phases will happen at the chosen lengths. If you skip a phase, pause for longer than planned, or change the timing inputs mid-session, the estimate updates because the assumptions changed.
The time-mix chart is a structural view of one long cycle, not the current session history. If focus dominates the chart, that means the configured cycle spends most of its total time in focus work, not that you personally maintained that rhythm today. Use it for planning and explanation, not for retrospective productivity scoring.
A user sets 25 minutes of focus, 5-minute short breaks, a 15-minute long break, and a long break every fourth round. The schedule projects four focus blocks, three short breaks, and then the longer reset, while the time-mix chart shows how one full cycle divides attention and recovery.
Someone working in a shared office leaves tick disabled, keeps volume at zero, enables notifications, and skips vibration. The browser still surfaces phase changes visually and through system notifications, while the work environment stays quiet.
A user sets a goal of three focus rounds, starts with a short countdown, and watches the goal ETA update as the first round runs. That gives a better answer to "do I have time for this?" than a plain timer would, because the estimate includes the breaks required to finish the structure.
No. The package can request a screen wake lock, but support and behavior still depend on the browser, the device, and system policy.
Browsers often throttle background activity. The package keeps the timer state locally, but visual updates and cue timing can still feel different when the tab is not active.
The timer still runs normally, but goal ETA is disabled because the session no longer has a finite focus-round target.
Yes. When the timer is idle, the schedule is projected from a fresh focus phase using the current settings, which is useful for planning before you begin.