Hotel front office

Housekeeping (mark rooms cleaned)

After a guest checks out, the room enters needs-cleaning state until housekeeping marks it cleaned. Cleaning gets the room back into the bookable pool — without it, the calendar still shows 🧹 on the room name and the room can't be re-allocated to a new guest.

Where the state comes from

When a guest checks out, the most-recent checked-out billing row is flagged dirty automatically. The system reads that flag (along with the other room states — occupied, blocked, vacant) to derive the room's calendar status. The flag clears when you (or another operator) mark the room cleaned.

Where to mark a room cleaned

You can do it from two places:

1) The dedicated Housekeeping page

Front Office → Housekeeping.

The page lists every room currently needing cleaning, grouped by floor. For each row:

  • Room — the room number (sortable inside its floor group)
  • Type — room type
  • Last guest — who just left
  • Checked out — exact timestamp
  • Aged — colour-coded (green ≤ 3h, amber 3–6h, red ≥ 6h or yesterday)
  • Mark cleaned — one-click flip

The page also shows three at-a-glance tiles at the top: total rooms to clean, rooms aged > 6 hours, and how many floors have work outstanding.

Print the page for the cleaning supervisor — the toolbar and Mark buttons hide; the floor-by-floor list prints clean.

2) The Booking Calendar

On any vacant room cell that's currently marked CleanUp (you'll see 🧹 by the room name), right-click → Mark cleaned 🧹. Same action, just closer to where you already are.

What "marking cleaned" actually does

  • Flips HasBeenCleaned = true on the room's most-recent checked-out billing row.
  • If the room had its persistent SpaceStatus = CleanUp flag set (legacy state), that flips back to Vacant.
  • The room shows up immediately in the calendar without 🧹, and is bookable for any-of-type lookups again.
  • The room moves to the Awaiting inspection queue on this page — the supervisor confirms it's ready by clicking Mark inspected.

Inspect step (soft gate)

After a room is marked cleaned, it appears in the Awaiting inspection queue. This is a soft gate — the room is already bookable; inspection is a separate workflow step that lets the supervisor walk the room and confirm it's truly ready.

Clicking Mark inspected flips HasBeenInspected = true and the room drops off the queue entirely.

Tiles at the top of the page show the split:

  • Dirty — cleaner hasn't worked the room yet.
  • Awaiting inspection — cleaner finished, supervisor hasn't signed off.
  • Occupied + dirty — guest still in the room, but the prior stay's flag is still showing as dirty (coordinate access with the front desk).

What it doesn't do

  • It doesn't post a charge.
  • It doesn't notify anyone (no SMS / email integration in v1).
  • It doesn't track who cleaned the room (assignment / accountability is on the v2 backlog).
  • It doesn't have a separate Inspected state — the room is either dirty or clean. A supervisor-inspection step would be a future addition.

Common problems

  • The room isn't in the list → the most-recent billing row may already have HasBeenCleaned = true. If you re-cleaned the room (or cleaned it before this page was built), it's already showing as Vacant on the calendar.
  • The room is in the list but I just cleaned it → click Mark cleaned. If you've been on the page for a while, hit Refresh first — the page caches for 30 seconds.
  • "Could not mark room as cleaned" → the API returns this when the room has no prior checkout row (brand-new room never used). Safe to ignore.

See it working on your own business

Start a 45-day free trial — no card needed — and follow this guide in your own practice company.