Why the scheduler is built the way it is
The scheduler at Appointments is the screen most staff spend the majority of their working day in, so it's built around speed above almost everything else. Nearly every action — booking, moving, resizing, checking a patient in, cancelling a visit — happens directly on the calendar grid or in a lightweight drawer/modal layered over it. You're rarely asked to navigate away from the calendar to get something done, because every navigation away is a moment where the front desk loses track of what's happening in the waiting room.
That design goal shows up in specific details covered throughout this article: drag-and-drop instead of edit forms for moving a visit, a compact ticket-style modal instead of a full page for appointment details, and color and iconography carrying information (telehealth, home-visit, cancelled, completed) that would otherwise require reading text on a busy screen.
- The three calendar views and when each one earns its keep
- How to create an appointment, step by step
- How drag-and-drop moving and resizing work, including the safeguards built in
- What's inside the ticket-style appointment detail modal
- How status actions and telehealth-specific controls work
- What every color and badge on the grid means at a glance
- The conditional fields you'll only see in certain situations, and why
Three views for three different jobs
The scheduler doesn't try to force one layout to serve every situation. Planning next week's staffing calls for a different view than triaging who's sitting in the waiting room right now, so the scheduler gives you three distinct views and lets you switch between them freely.
- <strong>Week</strong> — the full week as a grid, one column per day. Best for forward planning: spotting gaps later in the week, confirming a recurring series lands where expected, or getting a sense of overall load. Includes a <strong>Hide weekends</strong> toggle to narrow the view to weekdays when your clinic doesn't open Saturday or Sunday.
- <strong>Day</strong> — a single day, with one column per practitioner instead of per day. Best when you need to compare practitioners side by side — for example, finding the next available slot with any of three practitioners this afternoon.
- <strong>Now</strong> — a triage-style list rather than a grid, grouped into buckets: Overdue, No show, Arrived-waiting, In session, Up next, Upcoming, Scheduled, and Cancelled. Best for the front desk during a live shift, where the question isn't "what does the week look like" but "who is sitting in front of me right now, and who's next."
In Now view, each bucket has a colored dot indicator and a clickable count "pill." Clicking a pill jump-scrolls the list down to that bucket, which is genuinely useful during a rush — a receptionist fielding a phone call can glance at the Arrived-waiting pill's count without scanning the whole list, and jump straight to it the moment they're off the phone.
Creating an appointment
Booking is designed to happen without leaving the calendar. The steps below are genuinely sequential — each field depends on a choice made in the one before it, which is why the drawer reveals fields progressively rather than showing everything at once.
Click an empty slot
Click any open slot on the calendar grid. The appointment drawer opens pre-filled with that date, time, and practitioner.
Choose or add a patient
If no patient is pre-selected, a searchable patient picker modal opens so you can find an existing patient or add a new one inline without leaving the flow.
Confirm the practitioner
The Appointment Type dropdown stays disabled until a practitioner is chosen, since types are scoped per practitioner.
Choose an appointment type
Once a practitioner is selected, the Appointment Type dropdown enables and its options are filtered to only that practitioner's types.
Review the Mode field
Once an appointment type is selected, a read-only Mode field appears, showing the mode derived from that type (for example, in-person or telehealth).
Set repeat, if needed
Choosing a repeat option other than "No repeat" reveals a Repeat Until date field to bound the series.
Save
Save the appointment. A toast confirms success or reports a failure so you're never left guessing whether the booking actually went through.
The progressive disabling of Appointment Type until a practitioner is picked isn't an arbitrary restriction — it prevents a specific, common mistake: booking a patient into a type of visit (say, a 60-minute initial consult) with a practitioner who doesn't actually offer that type, which would otherwise create a confusing booking that has to be caught and corrected later.
Moving an appointment with drag-and-drop
Click and hold an appointment block, then drag it to move it. For a front desk juggling a schedule that shifts constantly through the day — a patient calls to push their visit back thirty minutes, a practitioner runs long and everything behind them needs to shuffle — drag-and-drop turns what would otherwise be a multi-field edit form into a single fluid motion, which matters when you're doing it a dozen times a day.
- Dragging <strong>vertically</strong> changes the appointment's time, snapping to the clinic's configured slot size (for example, 15 minutes), so you can't accidentally drop an appointment a minute or two off-grid.
- Dragging <strong>horizontally</strong> changes the day in Week view, or the practitioner in Day view — useful for reassigning a visit to a colleague without reopening the booking.
- A "ghost" outline stays behind at the original slot while you drag, so you always have a visual reference for where the appointment is moving from, in case you change your mind mid-drag.
- Dragging near the edge of the grid auto-scrolls it, so you can move an appointment to a time or day beyond what's currently visible on screen without cancelling the drag first.
- Releasing on the same slot you started from doesn't move anything — it just opens the appointment detail modal instead, so an accidental click-and-release is never mistaken for an intentional move.
A toast confirms a successful move or reports a failure, so a dropped connection or a save conflict never leaves the schedule in a silently wrong state — you'll always know whether the move actually took effect.
Resizing an appointment
Each appointment block has a small resize handle at the bottom edge. Drag it to change the end time — like moving, it snaps to the clinic's grid size, so a visit that runs a little long can be extended to the nearest sensible increment rather than an arbitrary minute. As with moving, cancelled appointments can't be resized, for the same reason: a cancelled booking is frozen, not an active visit you're still adjusting.
Inside the appointment detail modal
Clicking an appointment block without dragging opens a ticket-style detail modal — deliberately compact, showing the time, patient avatar, and duration at the top, along with a row of icon buttons for the actions you're most likely to take next.
| Button | What it does |
|---|---|
| Book another | Duplicates the appointment to book a similar one quickly, useful for a patient booking a follow-up on the spot |
| Edit | Opens the appointment drawer to change details such as time, practitioner, or type |
| Cancel | Reveals an inline reason textarea and a confirm step, with an optional "cancel all future" checkbox for recurring series |
| Payment | Jumps to the related invoice, so you can take payment without leaving the appointment context |
| Notes | Jumps to treatment notes for the visit; hidden once notes are marked done, since there's nothing further to jump to |
| Archive | Archives the appointment, removing it from active views without deleting its history |
Moving an appointment through its status lifecycle
Below the icon buttons, status actions move the appointment through its lifecycle — from booked, to arrived, to in session, to completed. This lifecycle is what powers the Now view buckets described earlier: an appointment marked Arrived moves into the Arrived-waiting bucket automatically, without any separate step.
The relabeling and hiding of controls per appointment mode isn't cosmetic — it removes buttons that would otherwise be actively misleading. A telehealth visit has no "Start session" to click manually because the call itself is the session; showing that button anyway would invite staff to click something that does nothing meaningful.
Reading the grid at a glance: color and badges
During a busy morning, nobody has time to click into every appointment to know what it is. The grid is built so the answer to "what's this, and does it need my attention" is visible from across the room.
- Each appointment type has its own color, shown as a left accent bar and matching text on the block — so a New Patient Consult and a Follow-up are visually distinct without reading either label.
- Cancelled appointments render grayscale and faded, so they read instantly as "no longer happening" rather than needing a second look.
- Completed appointments show a checkmark badge and appear dimmed, distinguishing "done" from "still to come" without a status column.
- Telehealth appointments carry a small camera icon badge.
- Home-visit appointments carry a small house icon badge.
- A live line marks the current time across the grid, moving in real time so you always know where "now" sits relative to the day's bookings.
- Practitioner availability is shaded with hatched bands over non-working hours and breaks, so you can see at a glance where booking isn't expected, before you even try to drop an appointment there.
Because appointment type colors are configured once in Settings and then apply everywhere, getting your clinic's type list right up front pays off every single day afterward on the grid. See Appointment Types (Settings) for how to set colors and other type fields.
Common mistakes this design prevents
A few of the scheduler's behaviors exist specifically because they head off mistakes that were common on simpler calendar tools. Locking cancelled appointments from dragging or resizing prevents a cancelled slot from being accidentally reused as if it were a live booking. Filtering Appointment Type by the selected practitioner prevents booking a visit type a practitioner doesn't actually perform. The ghost outline during a drag prevents losing track of an appointment's original slot mid-move, which matters most when a phone rings in the middle of rescheduling something.
Availability shading is the quietest of these safeguards but arguably the most valuable day to day — it turns "did I just double-book someone's lunch" from a question you find out the hard way into something you can see before you click.