CruxDevCruxDev Tools Prompts
productivity Utility • Zero-Server Privacy • 100% Client-Side

Countdown Timer

Full-screen countdown with presets, progress bar, and a completion chime — for focus blocks and breaks.

Overview

A full-screen-friendly countdown timer with a big monospace readout, a progress bar, and one-click presets from 1 to 45 minutes. Give the countdown a label, start it, and when it hits zero it beeps once through your browser's audio and shows a completion toast.

How It Works

Type a label (the default is 'Focus block') and either press a preset — 1, 5, 10, 15, 25, or 45 minutes — or start from the default 5-minute value. Press Start to begin; the display counts down second by second with a shrinking progress bar. Pause freezes it, Reset rewinds to the full duration (the Start button turns into Restart once the countdown reaches zero), and at zero the timer plays a short 880 Hz tone and announces completion in a toast with your label.

Step-by-Step Usage Guide

  1. Name the timer so the completion toast makes sense.
  2. Pick a preset length or keep the default.
  3. Press Start and watch the progress bar drain.
  4. Pause or Reset as needed; a beep and toast mark zero.

Technical Specifications & Standards

The countdown is wall-clock based: it stores an end timestamp and a 250 ms interval recomputes the remaining time from Date.now(), so it cannot drift or run slow. If the browser heavily throttles a background tab, only the display refresh and the completion beep are delayed — the remaining time stays correct and catches up. The stopwatch uses the same timestamp approach. The completion beep is synthesised with the Web Audio API — an oscillator at 880 Hz for 0.4 seconds at low volume — wrapped in a try block so browsers with audio blocked fail silently rather than erroring; browser autoplay policies generally permit it because it follows a user gesture (pressing Start). The completion toast echoes your label, which is what makes multiple timers distinguishable if you run them in separate tabs. State is not persisted: refreshing resets the timer, and there is no saved history of completed countdowns.

Targeted Use Cases

  • Timing a presentation segment or a stand-up turn.
  • Pomodoro-adjacent focus sprints when you want a simple timer with a label.
  • Kitchen and chore timers on a laptop you keep in sight.
  • Timeboxing a difficult email or phone call.

Notes & Gotchas

  • A background tab stays accurate, but the beep and toast can arrive a little late if the browser throttles timers, so keep the tab visible for exact alerts.
  • Use the label field so you know which timer finished when several tabs run.
  • Remember the beep follows user interaction; do not rely on it from a never-touched tab.
  • Set the duration before pressing Start — Reset rewinds to whatever the preset set, and picking a preset while running stops the timer.

Frequently Asked Questions

Will the countdown stay accurate in a background tab?

Yes. The remaining time is recomputed from the clock on every tick rather than counted down, so throttling a hidden tab cannot make it run slow. The completion beep and toast may fire a little late in a throttled tab.

What happens when it reaches zero?

The timer plays a short 880 Hz tone generated with the Web Audio API and shows a toast with your label. If the browser blocks audio, the tone fails silently and the toast still appears.

Can I save a timer configuration or history?

No. The label, duration, and progress live in component state only. A refresh resets everything, and completed countdowns are not recorded.

What lengths are available?

One-click presets at 1, 5, 10, 15, 25, and 45 minutes; the tool starts at a 5-minute default. There is no custom-minute entry — the presets cover the common sprint and break lengths.