Skip to content

G.5: Public Booking

Summary

Guests book a counselor session through a public booking page. The booking can be confirmed immediately or submitted as a request depending on widget settings.

Role

  • Primary: Guest
  • Secondary: Counselor, System

Entry Point

  • URL: /book/:slug

Preconditions

  • Counselor has a published booking widget.
  • Session type and availability are configured.

Steps

  1. Guest opens /book/:slug.
  2. Frontend loads widget, services, and available slots.
  3. Guest selects a session type, date, and slot. Only the types the counselor published are listed — see CO.27.
  4. Guest enters contact details and submits.
  5. Backend validates availability and creates the booking.
  6. System sends booking emails and notifications.
  7. Guest sees confirmation or request-received state.

Diagram

Edge Cases

  • Slot conflict: Backend rejects overlapping bookings.
  • Unavailable widget: Page shows not-found or unavailable state.
  • Guest client: Email delivery works without an in-app notification recipient.

Current Implementation Notes

  • Frontend: frontend/src/features/booking/components/public-booking-page.tsx
  • Backend: backend/internal/services/booking_service.go

Screenshot Status

  • Captured with Playwright on 2026-04-17 using mocked public booking API responses.
  • Session selection: session-select.png
  • Date and slot picker: slot-picker.png
  • Guest details form: details.png
  • Instant confirmation: confirmed.png
  • Request received: request-received.png
  • No available sessions: no-sessions.png
  • Not found: not-found.png