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
- 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
| Capability | Teacher | Clerical | Admin |
|---|---|---|---|
| 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.