Skip to main content

Waitlist System

Get notified when your preferred tee time becomes available.

Last updated: 2026-01-26 Where to find it: Any fully-booked tee time slot Who can use it: All players Prerequisites: DigiWedge account Help link: /booking/waitlist

Overview

A slot-level waitlist system with timed offers, cascade logic, and automated notifications for managing oversubscribed tee times.

Features

Core Waitlist

  • Per-slot queues: Each tee time slot maintains its own waitlist
  • Priority ordering: First-come-first-served with optional priority tiers
  • Queue size limits: Configurable max waitlist size per course
  • Auto-cleanup: Expired entries automatically removed

Slot Offers

  • Timed offers: When a slot becomes available, offer is sent to first in queue
  • Offer duration: Configurable time to accept (default: 15 minutes)
  • Cascade logic: If declined or expired, automatically offer to next player
  • Notification limits: Max offers before slot goes public

Waitlist Settings (Per-Course)

  • Queue size limits
  • Offer duration
  • Auto-cascade toggle
  • Auto-expiry rules
  • Notification channel preferences

Data Model

WaitlistEntry
├── id, tenantId
├── slotId (references TeeTimeSlot)
├── playerId
├── priority
├── status (WAITING, OFFERED, ACCEPTED, EXPIRED, CANCELLED)
├── position
├── requestedAt
├── expiresAt
└── notes

WaitlistOffer
├── id, waitlistEntryId
├── offeredAt
├── expiresAt
├── status (PENDING, ACCEPTED, DECLINED, EXPIRED)
├── respondedAt
└── cascadedToId (next entry if declined)

WaitlistSettings (per-course)
├── courseId
├── maxQueueSize
├── offerDurationMinutes
├── maxOffersBeforePublic
├── autoCascadeEnabled
├── autoExpiryDays
└── notificationChannels (EMAIL, SMS, PUSH)

Notification Flow

1. Slot becomes available (cancellation, no-show, block removal)

2. System checks waitlist for that slot

3. If entries exist:
- Create WaitlistOffer for first entry
- Send notification (EMAIL/SMS/PUSH)
- Start expiry timer

4. Player response:
- ACCEPT → Convert to booking, remove from waitlist
- DECLINE → Cascade to next entry
- TIMEOUT → Auto-cascade if enabled

5. If max offers reached or queue empty:
- Slot becomes publicly available

Integration Points

  • Tee Sheet: Listens for slot availability changes
  • Booking Service: Converts accepted offers to bookings
  • Notifications: Multi-channel offer delivery
  • Scheduler: Periodic expiry processing

Configuration

// Default settings
{
maxQueueSize: 10,
offerDurationMinutes: 15,
maxOffersBeforePublic: 3,
autoCascadeEnabled: true,
autoExpiryDays: 7,
notificationChannels: ['EMAIL', 'PUSH']
}

Admin UI

Status: Implemented (December 2025)

The admin UI is accessible via TeeSheets → Select Course → Waitlist Tab and includes:

ComponentDescription
WaitlistSettingsTabConfigure queue size, offer duration, cascade rules
WaitlistAnalyticsTabView waitlist metrics and trends
WaitlistQueuePanelReal-time queue management per date

Location: apps/teetime/teetime-admin/src/app/waitlist/


Player UI

Status: Implemented (December 2025)

  • Mobile: WaitlistAcceptView at libs/ui/tee-time-ui-mobile/.../WaitlistAcceptView.tsx
  • Web: WaitlistAcceptPage at libs/tee-time-ui/.../WaitlistAcceptPage.tsx
  • Deep Link: /waitlist/accept?id=OFFER_ID wired in both apps
  • Link Router: Full handler at apps/link-router/src/routes/waitlist.ts
  • Public API: GET/POST /api/waitlist/offers/:id (no auth required)

Screenshot / Callout

Waitlist

Expected outcome

  • You can join the waitlist for fully-booked times.
  • You receive notifications when a slot becomes available.
  • You can accept or decline offers quickly.

Troubleshooting

  • Offer expired? Offers have a time limit (typically 15 minutes). Check notifications promptly.
  • Didn't get notification? Check app notification settings and spam folder.
  • Can't join waitlist? The queue may be full. Try a different time.