All ten
PointPal logo

PointPal

Real-time estimation for agile teams

Product, frontend, edge backend

Live

Planning poker that holds up in a real session: persistent rooms, owner and host controls, rounds with reveal and reset, reactions and an activity feed — and state that survives a refresh, a dropped connection or a laptop closing mid-vote.

Web appWorker API
1Durable Object per room
edgeno origin server
i18nmulti-language UI

Screens

Key engineering

Durable Object state machineWebSocket reconnectiontyped message protocoledge persistence on D1

Under the hood

Architecture

One durable coordinator per room makes each session a single-threaded authority, which removes distributed locking and split-brain votes from the problem instead of solving them.

Data & state

Room state lives in that coordinator and is persisted at the edge, so a refresh, a dropped socket or a closed laptop rejoins the same round. The message protocol is a shared package, so client and server cannot drift apart silently.

Runs on

Edge only. No origin server, and nothing left running between sessions.

Operational risk

The failure that matters is a vote counted twice or a reveal racing a late ballot. A single writer per room makes both structurally impossible rather than carefully handled.

Stack

Frontend
ReactVitei18nresponsive room UI
Backend
Cloudflare WorkersHonoDurable ObjectsD1WebSockets
Shared
typed message contractsgame constantsshared UI package

What it took

  • One Durable Object per room makes each session a single-threaded authority — no distributed locking, no split-brain votes, no race between a reveal and a late ballot.
  • The protocol is a package. Message contracts and constants are shared by client and Worker, so a change to the game rules fails at build time rather than in a sprint planning meeting.