A court booking platform that replaced double-booked WhatsApp threads with real-time availability, instant confirmations, and a single admin view for operators.
Client
Bounce Sports · Colombo
Engagement
Mobile app + admin dashboard
Timeline
10 weeks · Q2–Q3 2025
Status
Court availability — today
3 courts · 6am–10pm
Court A · Padel
Court B · Tennis
Court C · Badminton
Booking confirmation
< 3minutes
Double-bookings since launch
0incidents
Courts live
3venues
Bounce Sports came to us with a growing player base and a booking system held together by WhatsApp messages and a shared spreadsheet. Players called to check availability. Operators manually confirmed slots. Double-bookings landed weekly. The only thing missing was a real platform.
Before · The mess
Court bookings managed over WhatsApp and phone — double-bookings a weekly frustration.
Before · The mess
Players had no way to check court availability without calling the operator directly.
Before · The mess
Operators tracking all bookings in a spreadsheet with no payment confirmation trail.
The hard problem isn't booking a court — it's making sure two players can't book the same slot at the same time. Real-time slot locking is the spine. Everything else — the mobile app, the admin dashboard, the payment flow — sits on top of that guarantee.
Principle 01
If availability isn't live, the whole system breaks. Every booking update propagates instantly across the mobile app and admin dashboard.
Principle 02
Browse, pick a slot, pay. Three steps. No account required for the first booking — reduce drop-off, increase conversion.
Principle 03
Court owners see every booking, can block time, manage pricing, and push notifications — without needing us to change anything.
A two-surface system — mobile app for players, admin dashboard for operators — on a shared React Native + Next.js API backed by Supabase Realtime.
Surface 01 · Player
Mobile app (React Native)
Surface 02 · Booking
Slot selection + payment
Surface 03 · Operator
Admin dashboard
Surface 04 · Comms
Notifications + receipts
The spine · React Native + Next.js API
Booking events, availability slots, payments, confirmations, operator alerts
Database
Supabase · Postgres
Payments
Stripe · local rails
Real-time
Supabase Realtime
Notifications
Expo Push · Email
Out · For the player
Instant booking confirmation · Live slot availability
Out · For the operator
Full booking calendar · Revenue dashboard
Metrics tracked from pilot launch · Q3 2025. Baseline: pre-platform WhatsApp ops.
2surfaces
One mobile app for players, one admin dashboard for operators — one shared API.
< 3minto book
From opening the app to confirmed booking, including payment.
0double-books
Real-time slot locking prevents overlapping reservations by design.
Discovery first, design second, code third. Every week we shipped something tangible and asked one direct question.
Wk 1–2 · Discovery
Interviewed 6 court operators and 12 regular players. Documented every friction point. Signed a fixed-scope SOW.
Wk 3–4 · Design
Booking flow, availability grid, and admin calendar locked before development started.
Wk 5–9 · Build
Mobile app (Expo/React Native) and Next.js admin dashboard. Supabase real-time wired to both.
Wk 10 · QA + launch
Stress-tested slot locking, payment flows, and push notification delivery. Operator training completed.
Mobile
React Native (Expo)
Admin
Next.js, Tailwind
API
tRPC, Zod
Data
Supabase, Postgres
Payments
Stripe
Notifications
Expo Push, Resend