Stop Double-Booking Your Spaces
Shared spaces — halls, studios, equipment, vehicles — are some of the most fought-over resources in any organization.
The pain it solves: Manual booking (a shared calendar, a whiteboard, a group chat) inevitably leads to double-bookings and last-minute scrambles.
How it helps:
- Rooms and bookable resources are modeled the same way as any other bookable item — with availability, capacity, and scheduling rules enforced automatically.
- Bookings tie directly into the Events and Orders system, so a room booking can be a simple reservation or a paid booking (e.g., renting a hall) using the same underlying engine.
- Conflicts are checked automatically at booking time, preventing the same space from being double-booked.
- Booking activity can trigger Automation rules — reminders, confirmations, and follow-ups — without staff needing to manually track every reservation.
The happy workday: Book a room in seconds, trust that the system has already checked for conflicts, and never discover a double-booking the day of the event.
Why This Matters for Your Organization
A dedicated booking engine removes the manual conflict-checking burden from staff, and because it ties into automation, reminders and confirmations happen without anyone needing to remember to send them.
Technical Details
Booking functionality is implemented in BookingService (ExireNexus.Services/Services/BookingService.cs), working alongside the Event model (ExireNexus.Shared/Models/Event.cs) — the platform's calendar entity, covering room bookings, public events, appointments, and recurring events under one type.
Key implementation points:
- Bookable resources (rooms, equipment) are represented as
Event-linked entities with capacity and time-slot constraints, allowing the same booking logic to serve a simple internal room reservation or a public paid booking. BookingAutomationProcessor(ExireNexus.Services/Services/Automation/BookingAutomationProcessor.cs) plugs into the sharedAutomationBackgroundService, so booking confirmations, reminders, and follow-ups are handled by the same automation engine used across the rest of the platform — no bespoke scheduling code for bookings.- Where a booking involves payment (e.g., renting a hall), it flows through
ShopOrder/ShopOrderItem, which can link to anEventfor the booked time slot — reusing the commerce engine instead of building a parallel payment path for bookings. - Conflict detection is enforced at the service layer before a booking is persisted, ensuring double-bookings are rejected consistently regardless of which UI (Backstage or public site) initiated the request.
This reuses the platform's existing Event (calendar) and Order (transaction) entities rather than introducing a separate booking-specific data model, consistent with the platform's core design principle of multi-purpose entities.