11-Mar-2026 — Lightweight Booking System, Maps cleanup unused components, mail & walks fixes #175

build 517commit 6edae09


Note that during the development of this ticket, it transpired that there was a sizeable amount of clean up work that was required following issue #12, as navigation from the walk summary → detail → edit and back was broken. The same issues were found with the same social event navigations. Several old components were deleted and the social-event* objects were renamed to group-event* in order to be more consistent with Ramblers data model.

Lightweight Booking System

Events can now accept bookings directly from any events page. When an event has bookingEnabled: true and a maxCapacity set on its fields, a Book a Place panel appears below the event details showing remaining capacity.

Admin — Booking (/admin/bookings)

To enable this feature, visit the above URL. A bookings button has also been added to the admin menu.

Booking flow

  1. Visitors enter their name and email (required) plus optional phone number
  2. Additional attendees can be added (up to maxGroupSize, default 3)
  3. Clicking Book Now creates a booking and confirms with a success message
  4. The capacity counter updates in real time — once all places are taken the panel shows Fully booked
  5. An email is sent to the visitor and optionally the BCC address specified within the email configuration for Bookings.

Cancellation flow

  1. After booking, a Need to cancel a booking? link appears
  2. The visitor enters their email to look up active bookings
  3. Each matching booking can be individually cancelled
  4. Cancellation is verified server-side: the email must match an attendee on the booking, preventing unauthorised cancellations
  5. An email is sent to the visitor and optionally the BCC address specified within the email configuration for Bookings.

Booking Follow-up Enhancements

Booking email notifications

Booking configuration defaults

Member priority and waitlist handling

Booking safeguards and lookup fixes

Booking email configuration and workflow alignment

Walk and event view integration

Migration consistency

Global booking configuration and admin controls

Per-event booking preparation

Booking UX refinements

GPX Parser: Support Route Elements

Map Viewport Hang Fix

Mail API Resilience (No API Key / Invalid Key)

CommonDataService Double HTTP Request Fix

Config Save: Allow Clearing Sensitive Fields

Mail Settings: Prevent Config Overwrite During Editing

Domain API URL Refactor

Walk Search Layout

Events

Server API for #175

Contact Us Persistence

Contact form submissions are now persisted to the database via ContactInteractionService and a new /api/database/contact-interaction endpoint. Each interaction records: name, email, subject, message, whether the sender was anonymous, the recipient role, and a status (new/read/archived).

Social → Group Events Rename

All social event components, services, models, and routes have been renamed from social-* to group-event-* to align with the Ramblers API naming convention. Key renames:

Removed Orphaned Code

Deleted components and services no longer referenced anywhere:

Event Navigation Fixes

Deep path dispatch (fixes wrong event for generic slugs)

For paths with 3+ segments (e.g. /walks/weekends-away/swanage/day-2), page content is now checked before event lookup. This prevents generic slugs like day-2 from regex-matching unrelated events. Two-segment paths (e.g. /walks/some-event-slug) still try event lookup first.

Walk card title links (fixes pre-existing non-navigation)

Edit/cancel navigation symmetry

Cleanup