Product Architecture

How RoomLoop is built

A high-level view of the actors, services and rules that drive every reservation, every report and every account event.

System overview
Three-layer architecture: clients, application services, data plane
Clients
Teacher Web App
Clerical Console
Admin Console
Mobile (PWA)
Application Services
Auth (Google SSO)
Booking Engine
Rules Engine
Reports & Exports
Notifications
Data Plane
Accounts Store
Facilities Catalog
Reservations Ledger
Audit Log
Core flow — Reserve a Room
End-to-end sequence from search to confirmation
Teacher signs in (SSO)
Step 1
Search room + date
Step 2
Rules engine checks slot
Step 3
Confirm reservation
Step 4
Email + reminder
Step 5
Rules engine
Deterministic checks executed in order. First failure short-circuits.
R-01Active facilityRoom status must be 'active' (not maintenance)
R-02Within school hoursSlot is within 08:00–16:00 weekday window
R-03No overlapRequested period(s) must not overlap any confirmed booking
R-04Capacity vs class sizeOptional warning when class exceeds room capacity
R-05Teacher quotaMax 10 active future reservations per teacher
R-06Restricted equipmentMakerspace requires safety certification flag
Data model
Core entities and relationships
Account
  • id
  • name
  • email
  • role
  • teacher_id
  • department
Facility
  • id
  • name
  • type
  • building
  • capacity
  • amenities[]
  • status
Reservation
  • id
  • facility_id ↗
  • user_id ↗
  • date
  • start_slot
  • end_slot
  • purpose
  • status
↗ foreign key. Append-only Audit Log records every state transition.
Access control
Role-based capability matrix
CapabilityTeacherClericalAdmin
Search & reserve rooms
Manage own bookings
View all bookings
Export reports (CSV / Excel)
Manage facilities
Manage teacher accounts (CSV bulk)
Stack & guarantees
What runs where
Auth
Google Workspace OAuth 2.0 with school-domain restriction.
Engine
Stateless rules engine, evaluated per request, audit-logged.
Storage
Transactional reservations ledger with row-level locks per facility-slot.
Reports
Streamed CSV / XLSX generation, scoped by role.