1.8 KiB
1.8 KiB
Live Courts + CRM Clients - Design Document
Overview
Consolidate Bookings + Players into a "Live Courts" real-time status board. Replace the current Players page with a CRM-style Clients page focused on memberships, expirations, and visit history.
Navigation
Before: Dashboard | Bookings | Players | Memberships | Reports | Settings After: Dashboard | Live Courts | Clients | Memberships | Reports | Settings
Live Courts Page (/live)
Real-time dashboard showing all 6 courts. 3x2 grid of court cards.
Court States
- Available (green) — empty, can check in players
- Active (blue) — players on court, shows player list
- Open Play (amber) — dedicated free courts, group scheduling
- Booked (purple) — upcoming booking in next 30 min
Actions
- Check In — add player (search existing or walk-in name)
- End Session — clear all players
- Schedule Group (open play only) — name/note + time, no cost
Auto-populate
Bookings for current time auto-show as active players.
Open Play Courts
Settings > Courts toggle: "Open Play Court" (boolean).
- Amber badge on Live Courts
- No pricing on bookings
- Group scheduling: name/note + time slot, no client/payment
Clients CRM Page (/clients)
Stats Row
Total Clients | Active Memberships | Expiring This Month | No Membership
Table Columns
Name | Phone | Email | Membership | Status | Expires | Last Visit | Actions
Features
- Membership status badges (Active=green, Expiring=amber, Expired=red, None=gray)
- Filters: All / Active Members / Expiring Soon / Expired / No Membership
- Search by name, email, phone
- Client detail modal with membership + visit history
Schema Changes
Court model: add isOpenPlay Boolean @default(false)
New CourtSession model:
- id, courtId, clientId (optional), walkInName (optional)
- startTime, endTime, isActive
- Relations to Court and Client