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.
  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