Padelyst: live padel scoring, built watch-first
Padelyst is my own product: the fastest way to score a padel match. It’s built Watch-first, so players keep score from their wrist without breaking the rhythm of a game. I designed and built the iOS and watchOS apps, the Cloudflare Workers API behind them, and the companion web app for running live tournaments.
- Score from the wrist: tap who won the point on Apple Watch, and Padelyst tracks games, sets and the match.
- Every common ruleset: golden point, advantage, limited deuces, tiebreaks and a super tiebreak.
- Finished matches sync to iPhone automatically, with point-by-point stats and set scores.
- Run a live Americano, Mexicano or round-robin tournament. Players join from any phone, no app required.
- Private by default: no account needed to score or keep history; optional sign-in to back up and sync.
How it's built
No servers to manage: the whole backend is Cloudflare Workers, and live match state is handled by a purpose-built real-time layer rather than a generic database poll.
API: Hono on Workers
The API is a Hono app on Cloudflare Workers. Routes are organized by domain (sessions, matches, leagues, players, billing), validated with Zod, and sit behind a middleware chain that resolves device identity, checks entitlements, enforces per-device rate limits, and dedupes retried writes with idempotency keys.
Data: D1 + Drizzle
Accounts, match history, and league standings live in D1, SQLite at the edge, through Drizzle ORM with versioned migrations. It's the durable record; a live session only writes to it once, when it's archived.
Live mode: one Durable Object per session
Every live tournament session gets its own Durable Object, addressed by its shareable code. It holds the authoritative state, recomputes standings on every point, and pushes the update to every connected phone over a hibernatable WebSocket, so an idle session costs nothing while it waits. A one-time host token, not a login, gates scoring and admin actions; anyone with the link can join, follow along, or claim their name.
Lifecycle: alarms that clean up after themselves
Durable Object alarms do the housekeeping: a session idle for 48 hours is auto-finished and archived to D1; a finished session stays live and editable for 7 days for late corrections, then the room is wiped. Per-socket rate limiting and a per-room connection cap keep one abusive client from ruining a session for everyone else.
Auth & AI access
Sign-in is optional and device-scoped by default; Apple, Google, Facebook, or email links it to an account when someone wants history synced across devices. A full OAuth 2.1 provider also fronts an MCP endpoint, so AI agents, not just phones, can create and query live sessions.
What Padelyst runs on
Want an app like this built for your business?
Tell me what you’re building, and I’ll help you scope and ship it, from Swift to the App Store.
