← Mobile App Development
Case study · My product

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.
Live on the App Store iPhone + Apple Watch 14 languages
Center court14:32
Game score
40/AD
Set 1 of 3
Live match
64
Set 1 · Set point
30your serve
Architecture

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.

01

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.

02

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.

03

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.

04

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.

05

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.

Tech stack

What Padelyst runs on

SwiftSwiftUIwatchOSWatchConnectivityHealthKitCloudflare WorkersHonoZodDrizzle & D1Durable ObjectsCloudflare KVFirebase AuthOAuth 2.1 / MCPReact Router 7App Store Connect

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.

Start a project
Contact

Tell me about your project

Goes straight to me, Alex — no ticket queue. Prefer email? info@mavenslab.tech

Protected by Cloudflare Turnstile. Limited to 3 messages per day.