Skip to main content
Bookings

A booking grid that fills itself in.

One grid for every court at every site. Recurring series, weather alerts, partner invites and refunds in one place. Conflict-free at the database level — your front desk gets their evening back.

Slot conflicts· 0 since launch
Recurring rules· RRULE-style
Refunds· via Stripe
Weather alerts· opt-in per court

Five courts. One grid. Every sport.

Tennis, padel, pickleball, squash, badminton — all rendered on the same grid with sport-coloured booking blocks. Members book it, staff manage it, the database keeps it honest.

Mon 4 May · Riverside Sports Club
5 of 6 courts visible · evening peak
DayWeekMonth
Court 1
Court 2
Padel A
Padel B
Pickle 1
17:00
17:30
18:00
18:30
19:00
M. Lopez ↻
Tennis · 60 min
A. Knight
Awaiting partner
J. Reyes
Tennis · 45
Coach Ravi
Lesson · Mira
Sam +3
Padel · 90
Tara R.
Padel · 30
Pat G. +3
Padel · 60
Open
1 spot · partner
Lin · Wong
Pickle · 45
Open play
Drop‑in · 6

The mechanics, by the numbers.

0
Cross-booking races possible — the constraint is at the DB layer.
0 min
Average front-desk time per recurring series.
0 hr
Default booking window (configurable per court).
0 days
How long a refunded booking stays in soft-delete.

Six things the spreadsheet didn't do.

Recurring

"Every Tuesday at 7am, until July."

Block league nights, coaching slots and ladder rounds in one flow. Members can opt out of a single date without breaking the whole series. Cancellations are visible in the audit log so committee meetings have a paper trail.

Weather aware

Outdoor courts get rain alerts.

When the forecast turns, members with a booking on an affected outdoor court get an email with a one-click reschedule link. The forecast feed is Tomorrow.io and only fires if a club opts in to weather alerts.

Conflict-free

Double-bookings can't happen.

A unique database constraint rejects any overlapping booking on the same court before the row is written. The UI translates the rejection into a friendly "that slot was taken just now" message and refreshes the grid.

Check-in

No-show sweep on autopilot.

Members self check-in via a QR. Anyone who hasn't checked in 10 minutes after the slot starts gets flipped to no-show by the end-of-day sweep. Auto-suspension policy kicks in if someone hits the threshold.

Refunds

Refund the booking, not the relationship.

Full or partial refunds happen from the booking detail. Stripe handles the reverse; the booking lands in the audit log as booking.refund with the amount and the reason field.

Audit

Every change recorded.

Create, update, refund, cancel, no-show — all land in the audit log with a before/after diff. Owners filter by actor, action or entity. Soft-delete on every booking, so an accidental cancellation is recoverable.

Members do their own bookings, so you don't.

A booking app that looks like your club, on your subdomain, with your colours. Members manage profiles, partners, payments and notifications themselves.

  • 1
    Book

    Pick a court, slot, partner. Pay if your tier requires it.

  • 2
    Confirm

    Email confirmation lands in seconds, with a one-tap calendar add.

  • 3
    Check in

    QR on arrival, or staff mark them in from the day roster.

Today, 14:12
Hi Mira 👋
Up next · Today
Court 1 · 18:00
with Alex T. · in 4h
Check inInviteCancel
+Book
Repeat
Tournament
£Pay
Free Saturday at 09:00 — book now?

Frequently asked.

Can two members book the same court at the same time?

No. The conflict check is a database-level unique constraint on (court, time range), not just a UI check. If two browser tabs race to book the same slot, exactly one wins; the other sees a friendly "just booked" message and a refreshed grid. More detail in the double-bookings article.

Can I set different rules per court?

Yes. Slot length, minimum and maximum booking length, advance window, and buffer between bookings — all set per court. Per-tier pricing and peak/off-peak are on the roadmap.

Do members pay at the time of booking?

Configurable per court. Stripe handles the charge if pay-on-booking is set; otherwise it's free for members in good standing.

Ready to retire the booking spreadsheet?

14-day trial, no demo call, your subdomain goes live the moment you sign up.

Start a trial