Dashboard

Total Summary

Profit by Day

Bookings

Votes

Schedule

Cost Management

🏛️ Monthly Fixed Costs — facility memberships / direct debits

Each entry is a recurring monthly amount (e.g. £30/month gym membership for an organizer). The total for the viewed month is divided evenly across that month's sessions and added to each day's expenses as Fixed Cost. Players do not pay it — the club absorbs it, so profit drops accordingly.

Viewing month (current month/year by default)
+ Add new member (label)
Monthly £

Record Costs

Date *
Court Cost (£)
Cost/Tube (£)
Per Tube
Used
Penalty (£)
Mode
Organizer (pre-paid court → gets credit)
Collected (£)
Notes

History

Players

Active Players

Payments

VIEW

Outstanding Dues — by Player

💳 Payments Made

All recorded payments, most recent first.

Reminders

📅 Scheduled WhatsApp (Twilio)
Automated messages are sent daily via Twilio. You can also trigger them manually below.
🕗 8 PM — Daily Game Post
🗳 Booking Vote Reminder
Sends to every active club member to cast their vote
🕚 11 PM — Payment Reminders
Sends to all players with outstanding dues
🛠️ IONOS Cron Setup
📜 Last Cron / Manual Sends
Most recent WHATSAPP_* entries from the audit log. If your IONOS cron is set up correctly, you'll see new WHATSAPP_DAILY and WHATSAPP_REMINDER rows every evening. No entries = cron isn't reaching the endpoint.
Loading…

Outstanding Dues (Manual WhatsApp)

💬 Feedback & Chat

Rate each session and chat with everyone who played. Pick a session date below.

Audit Log

Settings

💳 Stripe

Payment Link

📱 Digital Wallets

Paste payment links that support Google Pay / Apple Pay. These appear as branded buttons on the player Payments page. A single Stripe payment link works for both if your Stripe account has digital wallets enabled.

Google Pay Link
Apple Pay Link

🎮 Game

Default Players
Round Mins

🏦 Bank / UPI

Account Name
Account No
Sort Code
UPI Handle

🏋️ Leisure Club Booking

Save your Better Leisure login so the Court Finder can auto-fill your postcode and you can copy credentials when booking.

Venue / Club Name
Postcode
User ID / Email
Password (stored on server)

💬 Twilio WhatsApp

Required for automated WhatsApp messages. Get credentials at console.twilio.com. For testing, use Twilio's free WhatsApp sandbox — players join by sending join <sandbox keyword> to the sandbox number once.

Account SID
Auth Token
From Number (WhatsApp)
Cron Secret (use in scheduled tasks)
Test Message (sent when you press Send Test below)
WhatsApp Opt-In QR Link (wa.me link or any URL — shown as a QR for players to scan)
For Twilio Sandbox: https://wa.me/14155238886?text=join%20<your-keyword>. The SPA renders a QR for this URL in Reminders, Payments and after-booking confirmations.
Custom QR Image (optional — paste a data:image/... URI or a hosted image URL)
If set, this image is shown instead of generating a QR via api.qrserver.com — useful when you have a hand-crafted/branded QR you want to ship exactly as-is. Leave blank to auto-generate from the link above.

🛠️ Data Tools

One-shot setup tasks. Each is idempotent — safe to run multiple times.

🎾 Racket Re-String Orders

Live queue of players' racket re-string orders. Update status as you progress them.

Loading…

🩺 Diagnose User — resolve "session expired" loops

Enter a user's email to see why they may be hitting auth issues (inactive account, missing player record, duplicate rows, expired tokens, etc).

📋 Subscription Plans

Set the membership fee and per-game surcharge for each plan. The surcharge is added on top of each player's base split cost per game (e.g. 10% → player pays base split + 10%).

📅 Monthly
Subscription Fee (£/month)
Game Surcharge (%)
📆 Yearly
Subscription Fee (£/year)
Game Surcharge (%)
🎯 Pay as You Go

No membership fee — players only pay per game.

Game Surcharge (%)

🏢 Clubs

Create clubs so players can self-select during registration. Each club can have its own subscription pricing and prepay surcharge.

Loading…

⚙️ Per-Club Pricing

Override global subscription fees and prepay surcharge for a specific club. Leave at 0 to use global defaults.

Select Club

Daily Post

Date

Assessment

🎥 Training Library

Watch coaching tutorials and upload your own gameplay for review.

📚 Tutorials

🎯 My Gameplay

🔑 Saved Logins

These credentials are sent to the Python fetch service when you trigger a fetch using a specific account. Storage is base64-obfuscated, not strongly encrypted — only add credentials you have already shared with your fetch service.

My Bookings

My Payments