Case 02 / Selected work / 2025

Bounce
killed the WhatsApp
booking.

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

In development
bounce.lk / courts / book
Live

Court availability — today

3 courts · 6am–10pm

Court A · Padel

6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00

Court B · Tennis

6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00

Court C · Badminton

6:00
7:00
8:00
9:00
10:00
11:00
12:00
13:00
14:00
15:00
Booked
Available

Booking confirmation

< 3minutes

Double-bookings since launch

0incidents

Courts live

3venues

Court booking·Real-time availability·No double-bookings·Operator dashboard·Shipped from Colombo·Court booking·Real-time availability·No double-bookings·Operator dashboard·Shipped from Colombo·
01 / The brief

Six courts.
One WhatsApp group managing them all.

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.

02 / Our take

Two users. One shared truth. Zero race conditions.

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

Real-time or nothing.

If availability isn't live, the whole system breaks. Every booking update propagates instantly across the mobile app and admin dashboard.

Principle 02

Frictionless for the player.

Browse, pick a slot, pay. Three steps. No account required for the first booking — reduce drop-off, increase conversion.

Principle 03

Full operator control.

Court owners see every booking, can block time, manage pricing, and push notifications — without needing us to change anything.

03 / The system

What we actually shipped.

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

04 / The outcomes

What it replaced.

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.

05 / How we shipped it

10 weeks. Two surfaces. Zero scope creep.

Discovery first, design second, code third. Every week we shipped something tangible and asked one direct question.

Wk 1–2 · Discovery

Mapped the booking flow.

Interviewed 6 court operators and 12 regular players. Documented every friction point. Signed a fixed-scope SOW.

Wk 3–4 · Design

48-hour wireframes, approved in round 2.

Booking flow, availability grid, and admin calendar locked before development started.

Wk 5–9 · Build

Two surfaces in five weeks.

Mobile app (Expo/React Native) and Next.js admin dashboard. Supabase real-time wired to both.

Wk 10 · QA + launch

Tested across 3 court venues.

Stress-tested slot locking, payment flows, and push notification delivery. Operator training completed.

06 / The stack

Mobile

React Native (Expo)

Admin

Next.js, Tailwind

API

tRPC, Zod

Data

Supabase, Postgres

Payments

Stripe

Notifications

Expo Push, Resend

Cross-platform mobileReal-time availabilityNo double-bookingsOwned by client