Project of the month

FocusRoom: An app to beat my own procrastination.

30 days of building, one bug that nearly defeated me, and a feature that changed everything. The honest story behind my most-used tool.

cover-focusroom-1600x900.jpg

I have a problem: I put things off. Not out of laziness — more because my brain turns even the smallest bit of friction into a reason to start later. Classic Pomodoro apps never worked for me, because they assume I'm already sitting down and working. FocusRoom was meant to close exactly the gap before that.

Most productivity apps solve the wrong problem. They help you focus — not start.

The problem I wanted to solve

The hardest moment is never the middle of a work session — it's the first minute. I wanted a tool that makes that transition as frictionless as possible: one click, a clear frame, no setup. Three principles were fixed from the start:

  • Zero configuration. Open it and go — no accounts, no setting up projects.
  • Gentle escalation. A friendly nudge instead of punishment when I drift off.
  • Offline-first. No internet, no excuses — runs entirely locally in the browser.
screenshot-onboarding.png
The onboarding: a single screen, three seconds to start.

How I built it

The core is surprisingly simple — a timer that watches tab focus. Switch away for too long and FocusRoom checks in with a calm reminder instead of an aggressive alarm. The whole logic fits in a few lines:

// Detects when focus leaves the tab document.addEventListener("visibilitychange", () => { if (document.hidden) startDriftTimer(); else clearDriftTimer(); });

Sounds trivial — it wasn't. This is exactly where the bug that cost me three evenings was waiting.

The bug that nearly defeated me

On mobile devices, visibilitychange also fires when the keyboard just pops up. FocusRoom kept thinking I was procrastinating — and interrupted me mid-work. The fix was a small threshold plus a check against the last real input. Unspectacular, but it saved the whole product.

What I learned

  • The smallest friction decides whether a tool gets used — or not.
  • “Gentle” beats “strict”: the friendly reminder had 3× higher acceptance than the original alarm.
  • Offline-first forces better decisions, because there's no server crutch to fall back on.

Done is better than perfect. ✦

FocusRoom is now my most-used tool — not because it's technically impressive, but because it reliably solves a real, small problem. That's exactly why I build these things.


Enjoyed this case study?

Every Sunday I send a new build with its story — short, honest, free.

Keep reading

More from the workshop.

Three projects that hit the same thematic note.