Files
app-padel/docs/plans/2026-03-02-live-courts-crm-design.md
2026-03-02 03:41:49 +00:00

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