Timer, stopwatch and alarm in one tool
Set a duration above and press start: the countdown runs in your browser and announces the end with a sound and a visible alert. Next to it sit a stopwatch with lap times and an alarm for a fixed clock time. The remaining time stays in the tab title, so you can keep working in another tab. Nothing is uploaded.
Why do so many web timers fall behind in the background?
Because they count instead of calculating. A naive timer calls a function every 1,000 milliseconds and subtracts one second each time. That works exactly as long as the browser keeps that rhythm — and it does not. Chrome has throttled timers in hidden tabs to one call per second since version 57, and since version 87 (January 2021) its intensive throttling reduces them to one call per minute once a tab has been in the background for more than five minutes. Firefox and Safari apply comparable limits, and a sleeping device stops everything completely.
A counting timer therefore loses exactly the time during which it was not called. Five minutes in the background become five calls and therefore five subtracted seconds. This is not an edge case, it is the normal case: you set a timer precisely so that you can do something else.
How does this tool calculate instead?
It stores a timestamp when you press start and subtracts again on every redraw. The formula is simply remaining = duration − (now − started at), and it gives the same answer whether 50 milliseconds or two hours have passed since the last redraw. The interval in the background carries no information at all; it only triggers the drawing.
The second building block is pausing. Pause writes down the time measured so far, and start begins a new span with a new timestamp. Only spans that actually ran are ever added, which is why a measurement with ten pauses produces exactly the same total as an uninterrupted run of the same net length.
How does the sound arrive on time when the tab is asleep?
Through the audio clock. When you press start, the tone sequence is not played “some time later” but scheduled for an exact point on the AudioContext timeline. That clock is driven by the audio hardware and keeps running independently of the JavaScript rhythm, even while the tab is throttled. If you pause or reset, the scheduled tone is discarded again.
What none of this can rescue is a closed laptop lid or a closed tab: at that point the page no longer exists and nothing can ring. For wake-up times that have to survive a closed lid, the alarm clock in your phone is the right tool — we would rather say so plainly than make a promise the technology cannot keep.
Sound alone is not enough
A signal that is only audible misses everyone who is on silent, wearing headphones or standing in a noisy kitchen. So the end arrives three ways here: as a short tone sequence, as a clearly visible alert panel above the display, and as a change of the browser tab title that you can read from the tab strip without opening the page. On phones whose browser supports the vibration interface, a short vibration is added.
Countdown, stopwatch or alarm?
Countdown when the length matters: a quarter of an hour of break, five minutes for an egg, twenty-five minutes of pomodoro. The minute field is deliberately not capped at 59, so 90 minutes is a valid entry.
Stopwatch when you want to measure how long something took. It shows hundredths of a second and records a lap time and a running total per lap; the fastest and slowest laps are marked as soon as at least two exist.
Alarm when the moment matters: the train at 17:40, the call at 15:00. You enter the clock time and the tool works out the distance. If the time has already passed today, the next day is used — calculated over the calendar day, so that the result does not end up an hour off on daylight saving weekends.
Does the timer stay private?
Yes, without a footnote. There is no server that learns about your timer, no account, no cookie holding the duration and no outbound request. All of it is arithmetic against your device clock. The simplest way to check: load the page, switch on airplane mode, start the timer — it keeps running.