Visual Pomodoro

Pick work/break times. Start. It will auto‑cycle and ping between phases. Accurate timing, no drift.

Ready
00:00
Cycles: 0

Tip: Use space to start/pause, s to skip, r to reset. Click “Sound test” once so the browser allows audio.

Why this stays accurate

It uses timestamps + requestAnimationFrame to compute remaining time each frame (not a drifting interval). The display is clamped to avoid showing negative values like -1:59 on phase switches.

Manual test cases
  1. Change Work to 15 → big clock shows 15:00 before starting.
  2. Press Space anywhere → timer starts; press again → pauses.
  3. Click Skip during Work → switches to Break and plays a different chime.
  4. Enable Subtle tick → faint 1Hz tick while running.
  5. Toggle Mini‑mode → floating mini timer shows and mirrors main time.
  6. Refresh page → your selections persist (localStorage).
Ready 00:00