Tennis Courts to Batting Cages: Online Booking for Small Sports Facilities
A practical playbook for tennis clubs, batting cages, padel courts, golf bays, and small sports facilities moving from phone-and-paper booking to a real online system — without the overhead of a full club-management platform.
If you run a small sports facility — a tennis club with four courts, a couple of batting cages, a padel court, a few indoor golf bays, a basketball half-court for hourly rental — you’ve probably already decided you want online booking. The question is what to install. The big club-management platforms are expensive ($100+/month) and built for a much bigger operation than you. The cheap appointment plugins assume you’re booking a person for a service. Neither fits.
What you actually need is a facility booking system: a calendar per court, peak-hour aware pricing or just plain peak/off-peak slot allocation, member-vs-guest distinction, and a no-show policy that has teeth. This post is the practical version of how to set that up on your own WordPress site, without paying a SaaS a percentage of every booking.
What’s distinct about facility booking
Sports facilities have their own pattern of failure modes:
- Peak-hour demand crushes you. Saturday morning and weekday evenings get booked out weeks in advance; Tuesday afternoons sit empty. Your booking system needs to handle this without falling over.
- Members vs. guests pricing. Members pay $X per hour; guests pay $Y. Members should get priority on prime-time slots.
- No-shows kill utilization. A member books Saturday 9 AM “just in case” and doesn’t show. The slot was unrecoverable; the next member who actually wanted it gave up at 9:15 and went home.
- Pickleball is taking the courts. Tennis courts get converted to pickleball; pickleball courts get converted back; the booking system needs to handle “this court is whatever it’s marked as today.”
- Lighting fees on outdoor courts. Evening bookings cost extra because the lights are on. The booking system needs to make this clear at booking time.
- Group lessons and pros teaching. Some hours aren’t open for member booking because a coach has reserved the court for a clinic.
A real facility booking system handles all six. Let’s walk through how.
Mapping a facility into pages
The mental model that works:
One page per court / cage / bay. “Court 1,” “Court 2 (clay),” “Cage A,” “Bay 3.” Each is a separate booking surface with its own:
- Operating hours (matching the facility’s open hours, possibly with day-of-week variation)
- Slot length (60 minutes is standard for tennis; 30-minute bays for batting cages; 90-minute blocks for golf bays)
- Member-vs-guest rules
- Lighting surcharge after a certain hour
- Maintenance windows for resurfacing or grooming
A “facility” page that links them all. A landing page on your site listing all your bookable surfaces with current availability for the next few days. Members find their court fast; guests see what’s available without poking through every page.
Member access via organization email-domain. If your members have a @yourclubname.com email (or you assign one at onboarding), the member-pricing pages are restricted to that domain. Non-members see guest-pricing pages. The verification is the email itself.
OTP verification on every booking — applies to members and guests alike. Stops drive-by spam, stops the “I never got the confirmation” disputes, stops members from booking on behalf of a friend with a typo’d address. (More on the mechanics: What is OTP-verified booking.)
Peak-hour handling without a complex pricing engine
The temptation is to build a pricing engine that varies the cost by hour. Reality is most small facilities don’t need that level of complexity, and the customers don’t either. Two simpler patterns that work:
Pattern A: Different pages for different prices.
- “Court 1 — Member, peak hours” (Mon-Fri 5-9 PM, Sat-Sun all day) — one rate
- “Court 1 — Member, off-peak” (everything else) — different rate
- “Court 1 — Guest, peak” — guest-rate variant
- “Court 1 — Guest, off-peak” — guest-off-peak
The same physical court is one or another booking page depending on time. Customers see the rate before they book; the rate isn’t dynamically calculated, it’s printed on the page they’re on. Simpler to maintain, less prone to confusion.
Pattern B: Add-on fees as custom fields.
- One page per court with a single base rate.
- Custom checkbox: “Lights on (after 6 PM, +$10)” — customer self-declares; staff verify on arrival.
- Honor system + staff verification beats a complex automated pricing engine for a 50-court business.
Most facilities run B for lighting and similar surcharges, A for the member-vs-guest distinction. Keeps configuration manageable.
No-show policy that actually works
This is where most small facilities lose money. The mechanics that protect utilization:
- Cancellation window. Cancel by X hours before the booking, free; cancel inside the window, charged a no-show fee.
- No-show flag in the audit log. Member doesn’t show, doesn’t cancel? Staff marks the booking “no-show” in the maintainer dashboard. The audit trail tracks no-show rate per member.
- Auto-suspension after N no-shows. Members with 3+ no-shows in a quarter get auto-flagged for staff review; staff can pause their booking privileges or require manual approval on future bookings.
- Card on file for no-show charges. Most facilities handle the actual charging through their existing payment system, not the booking plugin. The plugin records the no-show; staff process the charge separately.
The booking system’s job is the audit trail and the policy enforcement; the actual money movement happens through your normal payment flow.
Group lessons and pro reservations
Most facilities run a mix of open booking and reserved hours for coaches and clinics:
- The facility manager (admin role in booknslot terms) blocks out the relevant hours on the relevant courts as “unavailable for member booking.” Could be a recurring weekly block (Tuesday 4-5 PM clinic) or one-off (private lesson next Saturday).
- Members see those slots greyed out — booked, but not bookable.
- Coaches don’t book through the same flow; they’re added as maintainers on their assigned courts and the schedule is managed by staff directly.
This pattern keeps coaches and members on the same calendar without giving members a confusing “is the pro booking through the same form I use?” experience.
A typical small-facility setup
A tennis club with 4 courts (2 hard, 2 clay), open 7 AM to 10 PM, with member and guest pricing and lighting after 6 PM:
- 8 booking pages (4 courts × 2 prices = 4 member-pages + 4 guest-pages).
- Operating hours: 7 AM-10 PM, Monday through Sunday.
- Slot length: 60 minutes; 15-minute buffer between bookings.
- Member access: org-email allowlist matching members’ assigned email domain.
- OTP verification: mandatory on every booking.
- Lighting surcharge: custom checkbox at booking, honor-system verified on arrival.
- Maintenance windows: weekly Wednesday 6-9 AM blocked out for court grooming.
- No-show tracking: full audit trail; staff review monthly.
- Coach reservations: blocked by the facility manager directly; not member-bookable.
Setup, for someone who knows WordPress, is roughly a day. Most of it is writing court descriptions, taking photos for the listings, and configuring the lighting-surcharge text per page. After that, daily operation is the manager checking the no-show queue weekly and the pending-approval queue (if you run manual approval for new guest bookers) twice a day.
Padel, pickleball, and convertible courts
A specific note for facilities running convertible courts (pickleball-on-tennis, multi-sport spaces): the right model is separate booking pages per sport, even if it’s the same physical court. Reason: members search for “tennis court” or “pickleball court,” not “convertible court 3 booked as pickleball.” The two pages share a real-world surface, and your maintenance workflow needs to manage the conversion (set up nets, change lines, etc.) — but from the booker’s view, they’re picking the sport, not the court.
The maintainer dashboard handles the conflict: when a tennis booking is confirmed, the equivalent pickleball page’s slot greys out automatically (configured as an overlap rule). One physical court; two booking views; no confusion.
Where to start
Walk through the live demo — about 90 seconds on mock data. The fictional resource is a lab oscilloscope rather than a tennis court, but the workflow is identical: pick a slot, OTP confirmation (123456 is the demo code), see the confirmation, see the maintainer’s approval queue.
If you want the broader feature breakdown of what booknslot ships, see What makes booknslot different. For the underlying case for a real online booking system instead of a spreadsheet, see Why your WordPress site probably needs a booking plugin.