Skip to content

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.

Screen /calendar · Roles: all operational seats

The master calendar - units down, nights across, states color-coded

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.

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.

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.