DEV Community

王冲
王冲

Posted on

I built a body-doubling focus app: no camera, no booking, no signup to look around

I kept noticing that the thing stopping me wasn't what to do — I knew that. It was the act of starting. So I built Dopastep, and the whole design is about removing reasons not to start.

(Disclosure up front: this is my own project. Feedback, including the harsh kind, is why I'm posting.)

The two things it does

Breaks the task down. You name the thing you've been circling for three days, and it gets split into steps small enough that the first one isn't a decision.

Puts other people in the room. You drop into a live focus room and work in synced focus/break cycles alongside whoever is there. That's body doubling — the effect where someone else working nearby makes it easier to begin.

What I deliberately left out

I used Focusmate for a while and it genuinely helped, but two things eventually killed it for me: the camera, and the booking. By the time a session was scheduled, the window where I could actually have started had closed.

So Dopastep has no camera, no chat, no booking and no partner matching. You open a room, see how many people are in it and which phase the shared timer is in, and start. No account needed to look around.

Two implementation notes

The timer is derived, not synced. Everyone in a room has to agree on which phase they're in, including people who joined late or just refreshed. Rather than broadcasting ticks, the phase is computed from a single server-held start time. Late joiners and refreshes land in the right phase for free, and a whole category of "my timer says 3 minutes, yours says 5" bugs never exists.

Occupancy has to be honest, including when it's zero. The entire value proposition is "someone else is actually here", so an inflated number would poison the one thing the product is for. Presence runs over Supabase Realtime, and an empty room says it's empty. This is commercially the wrong choice and I'm keeping it.

Stack, if useful: Next.js 16, React 19, Supabase, Tailwind v4, deployed on Vercel.

Where it actually is

Launched in July 2026. Outside one scheduled session a day the rooms are usually empty — which, for a product whose point is other people, is the problem rather than a problem. That's the part I'd most like to hear ideas on: how do you bootstrap something that only works when someone else shows up?

https://dopastep.com/

Happy to answer anything about the presence setup or the timer derivation.

Top comments (0)