Read the master calendar
The Calendar is one horizontally-scrolling timeline of the whole portfolio: units down the left, grouped under their properties with a thumbnail; nights across the top. Every night of every unit is decided here - bookings from every channel, holds, blocks, and prep all land on the same grid.

The controls
Section titled “The controls”Across the top: a Property filter, the month / week / day / grid view switcher, and the ‹ Today › stepper. The unit column header carries a search box that narrows rows by code, type, or property. Day view expands one day into 24 hours, with bars running from each stay’s check-in time to its checkout time. The URL carries your position, so any view is a shareable deep link.
Reading a unit’s row
Section titled “Reading a unit’s row”Each unit row is two lanes, so an ops annotation never hides a stay:
- Top lane - bookings and holds. A booking bar is filled in its source brand color (Airbnb, WhatsApp, walk-in, …) with the guest label and a source badge; a thin left stripe adds the stay status - in-house, departing, ended, pending. A hold is an amber striped bar with a live countdown (what holds are).
- Bottom lane - blocks and prep. Blocks are slate bars with an icon per reason; the dotted teal underlay after each checkout is the prep buffer, derived automatically.
The on-screen legend names every treatment, including two easy to confuse:
- Blocked · not for sale - the night is withdrawn everywhere.
- Closed on channels · direct still OK - a hatched rate cell; the OTAs cannot sell the night, but you still can.
A red vertical line marks now, at your workspace’s local time. Hovering any bar shows a detail card - guest, dates, money, or the block’s reason and note - and clicking a booking opens its booking page. Rate cells show each night’s price: muted for the base rate, accented when someone set that date.
Moving things
Section titled “Moving things”Seats with booking-edit permission can drag a booking - sideways to new dates, up or down to another unit. The server re-checks availability; a conflicting target simply snaps back with a notice. Holds are never draggable - they belong to the funnel.