Meeting Booking
R Raptool
Product overview — built 2026-09-08
Door panel · live state

One colour on the wall says whether the room is free.

A meeting-room system built end to end today: the tablet outside the door, the booking page people actually use, the console facilities runs it from, and the API underneath all three. Twelve rooms, named after the solar system, running on a real database with two months of booking history.

4 apps/ 12 rooms · 3 buildings/ 288 API checks/ 57 browser journeys/ zero build step
⌂ Floor map10:05
Terra
10:00–11:00 · Weekly marketing sync
Check in

The four states

The whole product hinges on this palette

Every surface — the door panel, the floor map, the day grid, the analytics — reads the same four colours. Learn them once outside one door and you can read every door in the building.

Available

Nobody's booked it, or the meeting inside ended. Walk in.

Waiting for check-in

The meeting has started but nobody's tapped Check in yet — the room releases itself if no one shows.

In use

Checked in, meeting running. Release room and Extend are the only two buttons that matter.

Closed

Outside the room's opening hours — the warehouse rooms shut earlier than HQ.


Screens

What each app actually looks like

Every screen below is a real screenshot of the running system — its own MariaDB database, seeded with two months of bookings, no mock data.


Inside the build

Four apps, one contract

Every front end talks to the same REST API and reads the same design tokens — change a colour once, it changes everywhere.

Door panel

  • Four state faces, 400ms cross-fade, no re-render flash
  • Check in, release, extend, ad-hoc booking from the tablet
  • Floor map overlay — tap a green room to jump to it
  • Installable PWA, keeps its last state offline

Web booking

  • Find a room now — duration, headcount, amenities
  • Day grid with drag-to-book and a live now-line
  • Recurring bookings — weekday picker, skipped clashes shown
  • My bookings — check in, release, cancel a whole series

Admin console

  • Utilisation, no-shows and ghost hours, by room and by day
  • Drag rooms into place on the floor plan
  • Pair a new tablet with a six-digit code
  • CSV staff import, CSV booking export

API

  • PHP 8 + MariaDB, no framework, no build step
  • Overlap-safe booking — a locked read before every write
  • Local wall-clock time throughout, so DST never moves a meeting
  • Private bookings masked in one place, never per-route

Room roster

Twelve rooms, three buildings, the solar system

Every room the seed data actually creates — HQ floors 2 and 3, and the warehouse.

RoomBuildingFitsNotable

Verified

Checked against a real database, not a mock

288/288
API assertions — auth, conflicts, recurrence, privacy, CSV export
57/57
Browser journeys — booking, double-booking race, panel life cycle, permissions
21screens
Shot against the live API, console clean on every one
~12.6klines
PHP, JS, CSS and SQL — no dependency beyond the two Google fonts on this page
PHP 8.4 MariaDB / MySQL 8 Vanilla JS, ES5-safe No npm, no composer Installable PWA panel utf8mb4, Europe/Stockholm