Rainodoro
Every timer a distracted student has met ends in an alarm. This one ends when a bucket finishes filling.
- Vanilla JavaScript
- Web Audio API
The classroom problem
A buzzer lands on a distracted student as an emergency. Pomodoro timers are built for offices, and the countdown is the loudest part of them: twenty-four minutes left is a number to watch tick down. The harder it is to sit still, the more the tool intrudes.
The design decision
A bucket fills with water as you work. The session ends when the bucket is full, so finishing looks like something completing.
Rain plays underneath at a level you set. It holds flat until the last five minutes, then rises — the change itself carries the cue. It stays off until you switch it on. A student who finds a rising sound stressful is who this was built for.
How it works
Everything runs client-side: no build step, no server, no account. Tasks and timer state live in the browser and save to a file you keep. A full-screen mode leaves the water and the time.
The public version ports a larger private build, with Google sign-in and cloud sync stripped out. That strip-out also broke storage: the helper that namespaced each key per signed-in user went with the auth code, and eighteen call sites kept calling it. Nothing persisted for months. Fixed.