Day, Week, and Month — and how the calendar remembers your pick
The Calendar tab lives inside Schedules in the sidebar (Customer Flow → Schedules), sitting alongside the Employees, Tech queue, and Waitlist tabs. Once you're on Calendar, the Day / Week / Month toggle sits in the toolbar next to Today and the prev/next arrows. Whatever view you pick is saved to your browser (not the account) via local storage, so the next time you open the calendar it opens back to Day, Week, or Month — whichever you used last. You can also navigate with the keyboard: Left/Right arrow steps the visible range back and forth, and "T" jumps to today — these are disabled automatically while you're typing in a field or a dialog is open, so they won't hijack a note you're writing.
Month view has two different layouts depending on screen size. On a phone (below the small breakpoint) it renders as a scrollable agenda list — only days that actually have appointments, plus today even if it's empty — because a 7-column grid is unreadable at phone width. On a tablet or desktop, you get the full 7-column grid, and each day cell shows up to 7 appointments before collapsing the rest into a "+N Customers" pill. Each day cell also has two quick-action pills stacked next to the date: Book, which opens the same appointment-booking form as the toolbar's New Appointment button — headed "Schedule Appointment" on that screen — prefilled with that date, and Matrix, which launches a Sales Matrix kiosk session for that date. Clicking anywhere else on the cell opens a day-preview popup listing everything booked that day; clicking one of the individual appointment rows opens a Quick View panel next to it instead, so you can preview an appointment without leaving the day list. Day view is the simplest of the three: a plain chronological list for the single selected date, and clicking a row takes you to that appointment's full detail page rather than a popup.
Drag-to-reschedule only works in Week view
Week view is the only one of the three with drag-and-drop. Each appointment card has a small grip handle that appears on hover, vertically centered against the right edge of the card (hovering shows "Drag to reschedule") — you have to grab that handle, not the card body, since the rest of the card is a link to the appointment's detail page. Dragging a card to a different day column moves the appointment to that date at the *same time of day*, keeping its original duration; it does not let you change the time or reassign it to a different bay/installer from the drag itself. Dropping a card back on the day it started is a silent no-op — nothing happens, no error, no toast.
The server still checks for conflicts before committing the move: if the target slot would double-book the same installer/bay, the card snaps back to its original spot and you'll get a toast like "That bay is already booked for the new time." One thing to know if you rely on it: a plain drag-to-reschedule does not text the customer about the new time — the reschedule API supports an optional customer SMS heads-up, but the calendar's drag handler doesn't turn that on, so a dragged appointment moves silently on your end unless you separately notify the customer.
Coverage view: checking who's actually on the clock
Coverage is a separate toggle from Day/Week/Month — it's not a fourth view option, it's its own mode that replaces the whole calendar body when turned on. Clicking the Coverage button cycles through three states: off → Shifts → Overlay → back to off. Shifts shows one horizontal lane per employee with their scheduled shift blocks for the visible date range. Overlay adds a second layer: booked customer appointments are drawn as semi-transparent bars on top, so you can eyeball whether the hours you've got booked are actually covered by someone's shift — the header even flags "over capacity" in amber if total booked minutes exceed total scheduled shift minutes.
A few things worth knowing before you rely on it for staffing decisions: the appointment overlay isn't tied to a specific employee yet — every booked appointment is drawn on the *first* employee's row only, labeled "All appts · preview," as a shop-wide snapshot rather than "this tech's assigned jobs." If nobody has shifts entered for the visible range, you'll see an empty state pointing you to Installers & Bays in Settings — but the actual weekly shift grid you'd use to add hours lives in the Employees tab next to Calendar, not that settings page. And while Coverage is conceptually meant for managers checking staffing, the toggle itself isn't locked behind a role check — anyone who can open the Schedules tab can switch into it. Also note that switching Day/Week/Month while Coverage is on doesn't do anything visible until you turn Coverage back off — the calendar remembers which of the three you had selected and returns to it.
Other things on the calendar worth knowing
The "All installers & bays" dropdown in the toolbar filters every view down to one resource at a time. Status badges (Scheduled, Confirmed, Checked in, etc.) use plain-English labels even though the underlying data is a raw enum, and appointments flagged with meaningful no-show risk get a small badge or dot (a full chip on Week/Day cards, a compact colored dot in the tight Month grid) — this only appears for medium or high risk; low-risk appointments show nothing. That risk score is computed deterministically alongside the appointment list, so opening the calendar never triggers an AI call. Below the calendar, the Resources legend lists each installer/bay's color along with a "Clean up duplicates" button that permanently removes duplicate resource rows from your shop and re-points any appointments pointing at them — that action can't be undone, so it's worth knowing it's there before someone clicks it out of curiosity.