---
title: "Calendar"
description: "See every rental on a month, week, or day timeline, spot free and busy periods at a glance, filter by client or equipment, and open a booking from the calendar."
canonical_url: "https://requiply.com/docs/en/guides/bookings/calendar"
---
# Calendar

> See every rental on a month, week, or day timeline, spot free and busy periods at a glance, filter by client or equipment, and open a booking from the calendar.

The **Booking Calendar** page is the visual, time-based view of every booking in the organization. It is the schedule-at-a-glance counterpart to [Manage bookings](https://requiply.com/docs/en/guides/bookings/manage), useful when staff need to see what's happening on a given day, week, or month rather than scan rows.

You can find this page under **Bookings → Calendar** in the main navigation. The current view and date are reflected in the URL as `?mode=month|week|day&date=YYYY-MM-DD`, together with any [filters](#filtering-the-calendar), so a specific calendar state can be deep-linked or shared.

<figure>

![Month view of June 2026 in dark mode: the toolbar with the Filter button, Today, the month name, and the Month, Week, Day switch; booking bars with client initials, names, and times across the weeks of June 8 and June 15; and a tooltip reading Андріан Зафійовський · #12 · Jun 11 07:00 → Jun 13 07:00](https://requiply.com/docs/assets/booking/calendar/month-view.png)<figcaption>

Month view. Booking #12 runs from Thursday 07:00 to Saturday 07:00, and hovering it shows the summary. The blue booking starts on Friday at 15:30 and ends on Monday at 06:30, so its bar breaks at the end of the week with a chevron on each side.

</figcaption>
</figure>

<note>

Bookings are shown in a **visual calendar** with **month, week, and day** layouts — the same style you already know from Google Calendar. Each booking is labelled with its client and tinted with its status color, and the calendar can be narrowed to specific clients or items.

</note>

<note>

Access requires the **Bookings** permission. Users without it are redirected to `/access-denied`. The page also runs the `auth` and `store-refresh` middleware so the org context is fresh on entry.

</note>

## Why this page matters

The calendar answers questions the table cannot answer at a glance:

- **"What's on today / this week?"** — bookings are laid out across the time axis, with their length and overlap visible.
- **"When is this item out?"** — filter the calendar to one item and only its bookings remain.
- **"What does this client have booked?"** — filter by client to see all of their bookings in the month.
- **"What's the overall load this month?"** — the month view shows density at a glance, without scrolling through lists.
- **"Who is starting today?"** — the day view lists every booking running that day, with times, totals, and item counts.

Status colors carry over from the booking status configuration, so the calendar also doubles as a quick status snapshot.

## Who can use this page

- Any user with the **Bookings** permission.
- Not admin-only.
- The page is read-only at the calendar level — bookings cannot be created, dragged, or resized here. Status changes and edits happen on the booking detail page or the [Manage bookings](https://requiply.com/docs/en/guides/bookings/manage) table. Selecting a booking on the calendar is a navigation action (it opens the booking detail page), not an edit.

## What you'll see

The page is a single full-height card with a toolbar and the active view. The **Filters** panel sits to the left of the card. It is open the first time you visit the calendar, and you can close it with the **Filter** button.

**Toolbar (always visible at the top):**

- **Filter** button — opens and closes the [Filters](#filtering-the-calendar) panel. A badge on it counts the selected clients and items.
- **Previous** chevron — navigates back one month / week / day depending on the current view.
- **Today** button — jumps to today and stays in the current view.
- **Next** chevron — navigates forward.
- A locale-formatted **header label** that reflects the current view:

  - Month view: `Month YYYY` (e.g. **May 2026**).
  - Week view: `dd–dd Month YYYY` if the week is inside one month, otherwise `Mon dd – Mon dd, YYYY` across months.
  - Day view: `Weekday, Month dd, YYYY`.
- **View select buttons** on the right: **Month / Week / Day**.

### How a booking looks

A booking carries the same label in all three views:

- a round badge with the client's initials, or a person icon when the booking has no client,
- the client's full name, or the booking number such as **#128** when there is no client,
- a background tinted with the booking's [status color](#status-colors).

Hover a booking in Month or Week view for a one-line summary with the client, the booking number, and the times, plus the dates when the booking spans several days. When space is tight, the label drops the end time first, then the start time, then the name, so the initials stay visible.

### Month view

- A 7-column grid with weekday headers across the top (Monday-start). Today's date sits in a brand-red circle, and days outside the current month are dimmed.
- Every booking is a **bar across the days it spans**. The bar shows the pickup time where it starts and **→** the return time where it ends, unless that time is 00:00 or 23:59. A bar that continues from the previous week or into the next one has a square edge and a small chevron on that side.
- Bars are stacked into rows so overlapping bookings don't collide, up to six rows per week. When a week needs more, the sixth row shows **+N more** under each busy day.
- Clicking the day number or **+N more** opens that day in **Day view**. Clicking a bar opens the booking.

### Week view

Seven day columns under a header with the weekday and date. The view has two parts.

<figure>

![Week view of 22–28 December 2025 in dark mode: the day headers, a multi-day strip with a bar reading Gacob Sanders → 18:00 on Monday that continues from the previous week, and the time grid with a booking for Yaryna from 08:00 to 20:00 on Tuesday](https://requiply.com/docs/assets/booking/calendar/week-view.png)<figcaption>

Week view. Gacob Sanders' booking began the week before and ends on Monday at 18:00, so it sits in the multi-day strip with a chevron on its left. Yaryna's booking runs from 08:00 to 20:00 on Tuesday, so it sits in the time grid.

</figcaption>
</figure>

**The multi-day strip** runs along the top. It holds bookings that cross midnight or fill a whole day from 00:00 to 23:59, drawn as bars across their days, as in Month view. While collapsed, it stays pinned under the day headers as you scroll through the hours.

- Up to five rows of bars are shown. When more are needed, four rows stay and **+N more** appears under the busy days.
- Click **+N more**, or the chevron at the left of the strip (*Show all multi-day bookings*), to show every bar. Click the chevron again (*Collapse multi-day bookings*) to fold the strip back. Requiply remembers the choice in this browser.

**The time grid** below holds bookings that start and end on the same day, placed on a 24-hour scale. A red line marks the current time in today's column.

- Overlapping bookings share the day's width, up to four side by side, fewer on a narrow screen. The rest fold into a dashed **+N** block. Click it for a list of those bookings with their times and numbers, and click one to open it.
- Short bookings are drawn at least 30 minutes tall so they stay clickable.
- A booking that ends exactly at 00:00 belongs to the day before, so an evening rental returned at midnight stays in one column.

### Day view

A single wide column with the same 24-hour grid and current-time line, but no multi-day strip. A booking that runs across several days is drawn for the part that falls on this day, with the date added to any start or end on another day — for example *13:30 → Sep 18 08:30*.

Day view has room for more detail. A block of about an hour or longer adds a line with the booking number, the total cost, and the number of items, such as *#15 · $18.53 · 2 items*. Up to 16 bookings fit side by side before the **+N** block appears.

<figure>

![Day view of Tuesday, September 15, 2026 in dark mode: the red current-time line just after 12:00 and two overlapping bookings side by side. Olivia Bancroft, 13:30 → Sep 18 08:30, #15 · $18.53 · 2 items; William Hargreaves, 19:00 → Sep 17 07:00, #14 · $23.00 · 2 items](https://requiply.com/docs/assets/booking/calendar/day-view.png)<figcaption>

Today in Day view, with the red line at the current time. Both bookings start today and end on later days, so their end dates are spelled out, and they overlap, so they share the width.

</figcaption>
</figure>

The current date defaults to **today** if no date query param is present, and the default view is **Month**.

## Empty states

The page has three different empty placeholders depending on what's missing:

- **No inventory at all** — box icon, **"Empty inventory"** title, **"Before making bookings you need to have inventory"** subtitle, **"Add items"** action that navigates to the inventory add page. Takes priority over no-bookings.
- **Inventory exists but no bookings yet** — calendar icon, the manage-bookings empty title and subtitle, **"Add booking"** action that navigates to [Add booking](https://requiply.com/docs/en/guides/bookings/add-booking).
- **Bookings exist but none in the visible window** — the calendar still renders normally; only the cells / time-slots are blank. There is no full-page empty state for an empty week or month.

Filters that match nothing work the same way as an empty window: the calendar stays blank and the Filters panel reads *Matching bookings: 0*.

## Main actions

### Navigating between dates

Use the chevron buttons to step backward or forward. The step size matches the active view: one month for Month, seven days for Week, one day for Day. The **Today** button always returns to today's date in the current view.

### Switching views

Click **Month / Week / Day** in the segmented control on the right. The view change keeps the currently focused date and re-renders the layout. The selection is persisted to the URL query as `mode=...`.

### Filtering the calendar

The **Filters** panel is open by default. The **Filter** button at the left of the toolbar hides and shows it (tooltips *Hide filters* and *Show filters*), and stays highlighted while the panel is open. The panel has two fields:

- **Clients** — search by name, email, or phone. Each option shows the client's email and phone under the name.
- **Items** — search by product name, category, or SKU. Each option shows the product image with its category and SKU. Archived products are listed last with an **Archived** tag.

Selected values appear as chips in the field; click a chip's **×** to remove it, or **Clear all** at the bottom of the list to empty that field. **Clear** at the top of the panel removes every filter at once.

How the filters combine:

- Values in one field are alternatives: two clients show the bookings of either client.
- The two fields narrow each other: a client and an item show only that client's bookings that include the item.
- **Items** matches a booking whether the product was booked by quantity or as a specific unit.

The panel footer counts the result, *Matching bookings: 1*, or reads *Showing all bookings* when nothing is selected. Filters apply to all three views.

<figure>

![The calendar in Month view for September 2026 in dark mode with the Filters panel open on the left: Clients set to Olivia Bancroft, Items set to Rode PSA1, a Clear button, and Matching bookings: 1 in the footer. The Filter button in the toolbar shows a badge reading 2, and a single bar for Olivia Bancroft runs from 13:30 on Tuesday the 15th to 08:30 on Friday the 18th](https://requiply.com/docs/assets/booking/calendar/filters-panel.png)<figcaption>

Filtered to one client and one item. The badge on the Filter button counts both selections, and the footer confirms a single matching booking: Olivia Bancroft's, from Tuesday 13:30 to Friday 08:30.

</figcaption>
</figure>

The selection is kept in the page address as `clients` and `items`, so it survives opening a booking and going back, and a filtered calendar can be shared as a link. Whether the panel is open is remembered in this browser. When filters change, booking bars fade in and out and slide to their new place, unless your device is set to reduce motion.

### Deep-linking and sharing a calendar state

The current `mode` and `date` are kept in the URL query string, together with any filters, so any calendar state can be shared by copying the URL — for example `/reservations/calendar?mode=week&date=2026-05-04` opens the week of May 4, 2026 directly. Clicking **Today** or any navigation button updates the URL. Filters are stored as internal client and product IDs, so copy the address rather than typing it.

### Drilling into a specific day

In Month view, clicking the **day number** in any cell, or **+N more** under it, opens that day in **Day view** automatically — useful when scanning a busy month and wanting to see exact start/end times.

### Opening a booking

Click any booking in any view to navigate to its detail page. In Week and Day view, bookings folded into a **+N** block open from the list the block shows. The calendar itself does not edit bookings; the detail page is where actions happen.

## Status colors

Each booking's background is a light tint of its **booking status color**, taken from the booking status configuration. The mapping from status severity to the on-calendar color:

<table>
<thead>
  <tr>
    <th>
      Status severity
    </th>
    
    <th>
      Color used on the calendar
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        success
      </code>
    </td>
    
    <td>
      green
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        info
      </code>
    </td>
    
    <td>
      sky blue
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        warn
      </code>
      
       / <code>
        warning
      </code>
    </td>
    
    <td>
      orange
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        danger
      </code>
    </td>
    
    <td>
      red
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        contrast
      </code>
    </td>
    
    <td>
      near-black
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        secondary
      </code>
    </td>
    
    <td>
      slate
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        primary
      </code>
    </td>
    
    <td>
      brand primary color
    </td>
  </tr>
  
  <tr>
    <td>
      anything else
    </td>
    
    <td>
      falls back to a neutral surface color
    </td>
  </tr>
</tbody>
</table>

Any color customization done at the **booking status** level (system or organization) flows through here automatically.

## Settings that control this page

This page consumes settings configured elsewhere; nothing is configured here.

<table>
<thead>
  <tr>
    <th>
      Setting
    </th>
    
    <th>
      Where it's configured
    </th>
    
    <th>
      What it changes here
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Booking statuses and their colors
      </strong>
    </td>
    
    <td>
      Organization settings (or system defaults)
    </td>
    
    <td>
      Drives the color of every booking. Adding a new status or changing its severity automatically re-colors the calendar.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Locale
      </strong>
    </td>
    
    <td>
      User / organization locale
    </td>
    
    <td>
      Used for the toolbar header (month name, weekday name, year) and the times on bookings. Weekdays in the month view always start on Monday regardless of locale.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Inventory existence
      </strong>
    </td>
    
    <td>
      Inventory pages
    </td>
    
    <td>
      Determines whether the empty-inventory placeholder shows up before the calendar can render.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Clients and products
      </strong>
    </td>
    
    <td>
      <a href="https://requiply.com/docs/en/guides/clients/manage">
        Clients
      </a>
      
       and <a href="https://requiply.com/docs/en/guides/inventory/manage">
        Inventory
      </a>
    </td>
    
    <td>
      Every client is offered in the <strong>
        Clients
      </strong>
      
       filter and every product in the <strong>
        Items
      </strong>
      
       filter, archived products included.
    </td>
  </tr>
</tbody>
</table>

## How this page connects to the rest of Requiply

<table>
<thead>
  <tr>
    <th>
      Feature
    </th>
    
    <th>
      How this page affects it
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <strong>
        Booking detail
      </strong>
    </td>
    
    <td>
      Clicking any booking opens the detail page.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <a href="https://requiply.com/docs/en/guides/bookings/add-booking">
          Add booking
        </a>
      </strong>
    </td>
    
    <td>
      The empty-bookings placeholder's call-to-action and the inventory-empty subtitle both lead here.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <a href="https://requiply.com/docs/en/guides/bookings/manage">
          Manage bookings
        </a>
      </strong>
    </td>
    
    <td>
      Same underlying data, shown as a table instead of a timeline. Status changes made on the table or detail page flow through here on next render.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Booking statuses
      </strong>
    </td>
    
    <td>
      Colors and names configured on statuses are reflected in the calendar.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        Inventory
      </strong>
    </td>
    
    <td>
      Without inventory the calendar shows the empty-inventory placeholder. Products feed the <strong>
        Items
      </strong>
      
       filter.
    </td>
  </tr>
  
  <tr>
    <td>
      <strong>
        <a href="https://requiply.com/docs/en/guides/clients">
          Clients
        </a>
      </strong>
    </td>
    
    <td>
      Clients feed the <strong>
        Clients
      </strong>
      
       filter, and each booking shows its client's name and initials.
    </td>
  </tr>
</tbody>
</table>

## Common scenarios

### Morning ops scan

Open the calendar, switch to **Day**, click **Today**. The day's bookings are laid out by time, each with its total and item count. Click into any one to confirm or progress its status from the detail page.

### Spotting overlaps before approving a new booking

Open **Filters**, pick the item in **Items**, then switch to **Week** and navigate to the target week. Only bookings that include the item remain, and overlapping ones sit side by side. If the item is already saturated, that's the cue to either decline or pick different dates.

### Seeing everything booked by one client

A regular calls to extend a rental and cannot remember which one. Pick them in **Clients** and switch to **Month**: all of their bookings that month are on screen, and a click opens the one to change.

### Sharing a specific calendar window with a teammate

Navigate to the date and view you want, set any filters, then copy the URL — the `mode`, `date`, `clients`, and `items` query params let the recipient land on the exact same calendar state.

### Auditing a busy month

Switch to **Month** view to see the overall density. Use the brand-red highlight to anchor today, and click any day number or **+N more** to drill into Day view for that date.

## Tips and cautions

<note>

**Tip:** The calendar is read-only. It is fastest as a "what's happening?" view; for inline edits use the [Manage bookings](https://requiply.com/docs/en/guides/bookings/manage) table, and for booking-specific actions open the detail page.

</note>

<note>

**Tip:** In Week view, bookings that run past midnight live in the strip at the top, not in the hours. If a multi-day rental seems to be missing from the grid, look up.

</note>

<note>

**Tip:** If status colors look wrong, fix them on the **booking statuses** configuration — the calendar will pick up the change automatically. Don't try to override them here.

</note>

<warning>

**Heads up:** With the Filters panel closed, a filtered calendar does not look filtered at first glance. If bookings seem to be missing, check for a badge on the **Filter** button.

</warning>

<warning>

**Heads up:** The week view always starts on **Monday**. Locale changes only affect the format of the date label in the toolbar, not the week start.

</warning>

<note>

**Tip:** When linking teammates to a specific day or week, copy the URL after navigating — `?mode=` and `?date=` are persisted, so the link reproduces the exact view.

</note>


## Sitemap

See the full [sitemap](https://requiply.com/docs/sitemap.md) for all pages.
