Countdown / Pomodoro Timer
A countdown you can throw on the big screen so a meeting actually ends on time, and a pomodoro cycle for when it is just you and the work. Drift-free timing, a proper alert, and a session log you can paste into the notes. Nothing leaves your machine.
When would I use this?
Timeboxing the standup so it does not become the hour-long one. Putting a fifteen-minute countdown on the shared screen during a workshop, so nobody has to be the person who says “we should wrap up”. Running a demo to a hard stop. Or, on your own: twenty-five minutes of focus, five minutes off, repeat — with the browser doing the counting instead of you glancing at the clock. Everything happens inside this page: no account, no notifications permission, no network requests, and nothing written to disk. Close the tab and the timer forgets it existed.
01 Set up the timer
countdown · 10:0002 Options
03 Run it
Not startedReady
Every segment that finishes lands here with the time it finished. Close the tab and it is gone — nothing is written to disk.
How the timing actually works
- One monotonic clock, read every time. The remaining time is recomputed from
performance.now()? against the moment you pressed start. Nothing subtracts a second from a running total, so a slow frame or a busy machine cannot make the timer lose time. - Ticks land on the boundary. Each redraw is scheduled for the exact moment the displayed number changes, rather than every 1000 ms and hoping. The digits neither stutter nor skip a second.
- A hidden tab is caught up, not guessed at. Browsers slow timers right down in a background tab. When the tab comes back the applet asks the clock what time it is now and works out everything that should have happened — including several pomodoro segments in a row — logging each with the time it really finished, and firing the finish alert exactly once.
- Sleep is detected. If the monotonic clock and the wall clock disagree by more than two seconds, the machine was suspended; the wall clock wins, the gap is added on, and the page tells you it happened rather than quietly being wrong.
- Pause is exact. Paused time is accumulated as a real measured duration, not read back off the digits, so pausing does not shave or add fractions of a second.
- No notifications, on purpose. The Notification API needs a permission prompt and hands the page a persistent identifier-shaped capability. A sound, a colour change, a word and the tab title do the same job with nothing to grant.
- Nothing leaves the browser. No network requests, no analytics, no cookies, and nothing written to browser storage — not even your settings. Refresh the page and it forgets everything.