Step 01 of {{ String(steps.length).padStart(2,"0") }}

Pick your
court time

Courts run {{ openLabel }} to {{ closeLabel }} every day. Booking closes {{ cfg.cutoffHours || 1 }} hour before start time.

Date

{{ monthLabel }}
{{ d }}
Open Filling up Fully booked Booking up to {{ cfg.dates.length }} days ahead

{{ prettyDate(selectedDate) }}

{{ openTotal }} of {{ slotTotal }} court hours open
Open Yours Taken Closed Peak hours cost more · price shown per hour
Time {{ c.code }} {{ c.name }} {{ freeCount(c.courtId) }} open
{{ hhmm(row.hour) }} {{ row.peak ? 'Peak' : 'Off-peak' }}

Tap any open slot — mix courts freely if your group needs two, and they don't have to be back to back. Up to {{ cfg.maxHours }} court hours in one booking, held for {{ cfg.holdMinutes }} minutes once you continue.

Step 02 of {{ String(steps.length).padStart(2,"0") }}

Who's on
the court?

We only need enough to reach you if something changes. No account, no password.

{{ errors.name }}
{{ errors.mobile }} You'll need this number to look the booking up later.
{{ errors.email }}
Step 03 of {{ String(steps.length).padStart(2,"0") }}

Anything
else?

All optional, except the waiver. Your total updates as you choose.

Add-ons

Tap to add

{{ errors.addons }}

{{ cfg.extras.waiver.title }}

Version {{ cfg.extras.waiver.version }}
{{ cfg.extras.waiver.body }}

{{ errors.waiver }}

Step {{ String(payStep).padStart(2,"0") }} of {{ String(steps.length).padStart(2,"0") }}

Lock it
in

Send {{ peso(quote.total) }} using any option below, then enter the reference number so we can match it. The court is held once your payment lands.

Don't send payment

{{ lostWhileAway }} went while you were away, so this booking can't go ahead as it is. If you've already paid, keep the receipt and call us — don't send anything more.

Payment method

Send {{ peso(amountDueNow) }}

{{ errors.method }}

GCash QR code
Send to
{{ cfg.payment.gcash.number }}

Account name: {{ cfg.payment.gcash.name }}

{{ errors.reference }}
Transfer to
{{ cfg.payment.bank.account }}

{{ cfg.payment.bank.bank }} · {{ cfg.payment.bank.name }} · InstaPay or PESONet both work.

{{ errors.reference }}
Proof of payment

Attach a screenshot of your {{ payMethod==='gcash' ? 'GCash' : 'transfer' }} receipt. This is how the desk confirms your booking, so it is required.

{{ proofError }} {{ errors.proof }} Only you and the desk ever see this.

We hold the court for {{ cfg.payment.venueHoldMinutes }} minutes past your start time. Arrive later than that and the slot goes back on the board.

{{ errors.agreeHold }}

Booked

You're on
the board

Booking reference

{{ booking.ref }}

{{ payLabel(booking.payment.status) }}
Name
{{ booking.guest.name }}
Date
{{ prettyDate(booking.date) }}
{{ item.courtCode }} {{ item.courtName }}
{{ hhmm(h) }}
Paid via
{{ methodName(booking.payment.method) }}
Reference
{{ booking.payment.reference }}
Court total
{{ peso(booking.amounts.total) }}
Sent now
{{ peso(booking.payment.dueNow) }}
Balance at the desk
{{ peso(booking.payment.balance) }}

Show this reference at the desk when you arrive. The court is held for {{ booking.payment.gracePeriodMinutes }} minutes past your start time.

Manage

Your
bookings

This device remembers what it booked. You can cancel yourself up to {{ cfg.cancelCutoffHours }} hours before your first hour.

On this device

{{ savedBookings.length }} saved

{{ savedBookings.length ? 'On another device?' : 'Find your booking' }}

Booking reference

{{ found.ref }}

{{ found.status==='cancelled' ? 'Cancelled' : payLabel(found.payment.status) }}
Name
{{ found.guest.name }}
Date
{{ prettyDate(found.date) }}
{{ item.courtCode }} {{ item.courtName }} {{ peso(item.subtotal) }}
{{ hhmm(h) }}
What you booked
Court time {{ found.amounts.courtHours }} court {{ found.amounts.courtHours===1 ? 'hour' : 'hours' }}
{{ peso(found.amounts.subtotal) }}
{{ a.name }}{{ a.qty }} × {{ peso(a.unitPrice) }}
{{ peso(a.amount) }}
Coaching with {{ found.amounts.coach.name }}
settled with the coach
Booking fee
{{ peso(found.amounts.fee) }}
Total {{ peso(found.amounts.total) }}
To pay on arrival
{{ peso(found.amounts.total) }}
We could not confirm your payment. {{ found.payment.rejectedReason }} Your courts are still held. Send a clearer screenshot below and the desk will check again.
{{ resendError }}

The desk is checking your payment. We will email you as soon as it is confirmed.

Too close to your start time to cancel online — call the venue and we'll sort it out.

This booking is cancelled and the hours are back on the board.

{{ hasPicks ? courtHours + ' hr' + (courtHours>1?'s':'') + ' · ' + courtsLabel : 'Nothing picked yet' }}
{{ quote.total.toLocaleString() }}
{{ toast }}