CourtBook — Complete User Guide
Version 0.5.1 · A booking system for recurring classes
This guide assumes no technical knowledge. Everything is done from your WordPress dashboard.
Contents
- How CourtBook thinks
- First-time setup
- Creating your first class
- Putting booking on your website
- Your dashboard
- Managing bookings day to day
- Customer records
- Packs and passes
- Price tiers
- Discount codes
- Booking questions (e.g. Tennis Level)
- Emails your customers receive
- Moving from Amelia
- Common tasks
- Troubleshooting
1. How CourtBook thinks
Three ideas, and everything else follows:
A Class is a template. “Beginner Tennis, Tuesdays and Thursdays at 6pm, 6 people, $50.” You set this up once.
A Session is one dated instance of that class. Tue 4 Aug at 6pm. CourtBook generates these automatically from your class — you never create them one by one.
A Booking is one person in one session. With their contact details, what they paid, and any extra info you asked for.
Why this matters: the old system made you build every single date by hand. CourtBook asks for the pattern once and produces the whole season.
2. First-time setup
Payments
Go to CourtBook → Settings.
Choose Stripe (recommended to start), then paste in three keys from your Stripe dashboard:
| Field | Where it comes from | Notes |
|---|---|---|
| Publishable key | Stripe → Developers → API keys | Starts pk_ — safe, used by the booking form |
| Secret key | Same page | Starts sk_ — keep private, never share |
| Webhook signing secret | Stripe → Developers → Webhooks | Starts whsec_ |
For the webhook: in Stripe, add an endpoint pointing at the URL shown on the Settings page, and subscribe it to payment_intent.succeeded.
Use test keys first. Stripe gives you a test mode with a fake card (4242 4242 4242 4242, any future expiry, any CVC). Do a full practice run before switching to live keys.
Secret fields show blank after saving — that’s deliberate. Leave them blank when editing other settings and your saved keys stay untouched.
Check your emails work
CourtBook sends booking confirmations through your site’s normal email. If your site can’t send email reliably, customers won’t get confirmations. If you’re unsure, send yourself a test booking and check it arrives — including the spam folder.
3. Creating your first class
CourtBook → Classes → Add class
| Field | What to enter |
|---|---|
| Name | What customers see, e.g. “Beginner Tennis” |
| Capacity | Maximum people per session. Extras go on a waitlist automatically |
| Price | Standard price per session |
| Duration | Minutes |
| Location | e.g. “Court 1” — appears in confirmation emails |
| First class starts | Date and time of the very first session |
The recurrence section
This is the part that saves you hours.
- Repeats — One-off, Daily, Weekly, or Monthly
- Every N — 1 = every week, 2 = every other week
- On days — tick Tue and Thu for a twice-weekly class
- Repeat until — last date of the season
Monthly gives you two styles: the same date each month (“the 15th”), or the nth weekday (“second Tuesday”, “last Friday”).
Click Save & generate occurrences. You’ll see something like “Generated 13 occurrences.” That’s your whole season created.
Changing a class later
Edit and save again. Important: if you change the days or times, the old sessions stay put — CourtBook won’t delete sessions that might already have bookings. Cancel the unwanted ones manually from the Bookings screen.
4. Putting booking on your website
Create a page (e.g. “Book a Class”) and add this text into it:
Loading classes…
That’s it. The page will show your upcoming sessions with prices and spots remaining.
To show fewer classes:
Loading classes…
What customers see
- Any packs you’re selling, at the top
- Each upcoming session with date, price, and spots left
- Full sessions show “Full — join waitlist” rather than just failing
- A booking form asking for name, email, phone, plus any questions you’ve set up
- Card payment, if you’ve connected Stripe
5. Your dashboard
CourtBook → Dashboard is the first thing you see. It answers “what do I need to know right now?”
Next class — the very next session, with how many are booked out of capacity.
Bookings (next 7 days) — sessions running, bookings taken, and how many people are waiting.
Revenue (last 7 days), with last 30 days underneath. This counts money actually collected through Stripe — not bookings you comped or marked as pay-later, so it won’t flatter you.
Needs attention — the one panel worth checking daily. It lists only real problems:
- Someone promoted off a waitlist who still owes you money
- Classes that are full, where you might want to add a session
- Customer packs expiring within 14 days with credits unused — a good excuse to nudge them
If nothing’s wrong it says All clear.
Recent bookings — the last five, so you can see activity at a glance.
The dashboard refreshes as soon as anything changes. If a number looks stale, reload the page.
6. Managing bookings day to day
CourtBook → Bookings is the screen you’ll live in.
Pick a session from the dropdown and you get everything on one screen:
The roster — every person booked, with name, email, phone, their answers to your questions (like tennis level), and their status:
- 🟢 Confirmed — they have a spot
- 🟡 Waitlisted — waiting for someone to drop out
- ⚪ Canceled
Add a booking — put someone in yourself. Useful for phone bookings, or to make a class look fuller before it fills naturally. Choose Comp (free) or Drop-in.
Email everyone in this class — one message to the whole roster. This is your rain-cancellation button.
Print roster — a clean printable list with an Attended column, for taking to court.
Download CSV — the same roster as a spreadsheet file, including everyone’s answers to your booking questions. Opens in Excel or Numbers.
Editing one session
Sometimes a single date moves — a court’s double-booked, or you want to squeeze in extra people that week.
Click Edit session. You can change the start time and the capacity for that date only, leaving the rest of the season alone.
CourtBook won’t let you set a capacity below the number of people already booked into that session. If you try, it refuses and tells you why, rather than silently bumping someone.
Cancelling a whole session
Rain, illness, court closure — click Cancel this session.
Everyone booked is cancelled in one go, with pack credits returned and card payments refunded automatically. Nobody is promoted off the waitlist into a class that isn’t running.
You’ll get a summary afterwards: how many bookings were cancelled, how many credits and payments were reversed, and anything that needs your attention.
Cancelling a booking
Click Cancel on their row. CourtBook then automatically:
- Frees the spot
- Promotes the first person off the waitlist and emails them
- Returns their pack credit if they’d used one
- Refunds their card payment if they’d paid
- Emails them a cancellation notice
You don’t need to do any of that manually.
7. Customer records
CourtBook → Customers
Search anyone who has ever booked. Click through and you’ll see:
- Their contact details
- Upcoming classes they’re booked into
- Past classes they’ve attended
- Total spend with you
- Any packs they hold, and how many credits are left
Useful when someone emails asking “how many classes do I have left?” or when you want to know whether a regular has drifted away.
8. Packs and passes
This is how you sell “buy 4, save money” instead of one class at a time.
CourtBook → Packages & Passes → Add package
| Field | Example |
|---|---|
| Name | “Fall 4-Pack” |
| Price | 160 (i.e. $40 a class instead of $50) |
| Credits | 4 |
| Unlimited pass | Tick this instead of credits for a monthly all-you-can-book pass |
| Expiry | Months / 3 |
| Valid for | Leave all unticked = works on every class. Tick specific classes to restrict it |
How customers use it
- They buy the pack on your booking page
- When booking a class, they enter the same email
- CourtBook spots their credits and offers “use a pack credit” instead of paying
- One credit is used per class
If they cancel, the credit comes back. If they’re waitlisted, no credit is taken until they’re actually promoted into the class.
Multi-session courses
For “12 weeks split into three 4-week sessions,” create three packs of 4 credits each, priced however you like, and restrict them to the relevant class.
9. Price tiers
Lets drop-ins and members book the same session at different prices.
Inside the class editor, scroll to Price tiers and add:
- Drop-in — 50
- Member — 40
Customers pick their rate on the booking form. Leave tiers empty to just use the single class price.
10. Discount codes
CourtBook → Coupons → Add coupon
| Field | Notes |
|---|---|
| Code | e.g. FALL20 — customers type this at booking |
| Type | Percentage off, or fixed amount off |
| Amount | 20 = 20% (or $20 if fixed) |
| Max uses | Blank = unlimited. Set 50 to cap it |
| Expires | Valid through the whole of that day |
| Status | Set to Disabled to switch a promo off without deleting it |
Coupons stack with price tiers — a Member at $40 using FALL20 pays $32.
The usage count is exact: if you cap it at 50, the 51st person is refused, even if lots of people try at once.
11. Booking questions
Ask customers anything you need at booking time — and see the answers right on the roster.
CourtBook → Booking Fields → Add field
Example — tennis level:
- Label: Tennis Level
- Type: Dropdown
- Options:
Beginner, Intermediate, Advanced - Required: ticked
Now every booking form asks for it, and the answer shows in the Details column of your roster. No more digging through separate screens.
Other useful ones: emergency contact, racquet hire needed, how they heard about you.
12. Emails your customers receive
Sent automatically:
| When | What they get |
|---|---|
| They book | Confirmation with class, date, location, amount paid |
| Class is full | “You’re on the waitlist” |
| A spot opens for them | “A spot opened up — you’re booked in” |
| You cancel their booking | Cancellation notice |
| You use Email everyone | Your custom message |
All emails come from your site’s normal email address and include your site name.
13. Moving from Amelia
CourtBook → Import
If Amelia is installed, you’ll see how many classes, customers, bookings, and coupons can be brought across.
Always click “Preview import” first. It shows exactly what would move without changing anything.
When you’re happy, click Run import. It’s safe to run more than once — it won’t create duplicates.
⚠️ Back up your site first. Ask your host, or use a backup plugin. This is standard practice before any data migration, not a sign anything is wrong.
Your old bookings, customer records, and their tennis levels all come across.
14. Common tasks cheat sheet
| I want to… | Do this |
|---|---|
| Add a whole season of classes | Classes → Add class → set recurrence → Save & generate |
| See who’s coming Thursday | Bookings → pick the session |
| Book someone who phoned | Bookings → pick session → Add a booking |
| Cancel because of rain | Bookings → pick session → Email everyone in this class |
| Make a class look busier | Bookings → Add a booking (comp) a few times |
| Sell a fall 4-pack | Packages & Passes → Add package |
| Run a 20% promo | Coupons → Add coupon |
| Ask a new question at booking | Booking Fields → Add field |
| Give someone their money back | Bookings → find them → Cancel (refunds automatically) |
| Stop taking bookings for a class | Classes → edit → Status: Hidden |
| Take a register to court | Bookings → pick session → Print roster |
| Get the roster into a spreadsheet | Bookings → pick session → Download CSV |
| Move just one date | Bookings → pick session → Edit session |
| Call off a session entirely | Bookings → pick session → Cancel this session |
| Check how many credits someone has left | Customers → search their name |
| See what needs my attention today | Dashboard → Needs attention |
15. Troubleshooting
“Too many requests” on the booking page A safety limit that stops bots mass-booking: 8 bookings per 10 minutes from the same internet connection. Normal customers never hit it, but a family all booking from one home connection might. It clears itself after 10 minutes. You are never limited when adding bookings from the dashboard.
A customer says they didn’t get their confirmation Check spam first. Then check your site can send email at all — send yourself a test booking. Email delivery is a website setting, not a CourtBook one.
Class shows the wrong time Check Settings → General → Timezone in WordPress is set to your actual location.
“Set the first start date/time before generating occurrences” The class has no starting date. Edit it, fill in First class starts, save again.
Customer can’t see their pack credits They must use the exact same email they bought the pack with. For security, CourtBook emails them a 6-digit code before showing balances — that’s intentional, so nobody else can look up their passes.
Someone booked but the class was full Shouldn’t happen — capacity is strictly enforced even when many people book at the same instant. If you ever see it, tell your developer immediately.
Changed a class’s days but old sessions are still listed Expected. CourtBook won’t delete sessions in case they have bookings. Cancel the unwanted ones from the Bookings screen.
Getting help
When reporting a problem, include: what you were doing, what you expected, what happened, and the class/session involved. Screenshots help enormously.
CourtBook v0.5.1 — built for Rally Society