Shifts and templates
How the roster works: scheduled and ad-hoc shifts, reusable templates, and scheduling a whole team in one pass.
A shift is one block of working time belonging to one driver. It is the record the clock, the hours-of-service rules and the no-show detector all hang off, so everything on this page eventually shows up somewhere else in the product. The roster lives on the Shifts screen in the admin dashboard.
Who can do this
- Role
- Administrators
- Permission
shifts:readshifts:writeshift-templates:read
The whole roster surface is admin and super-admin only. Drivers never reach it — they see their own shifts through the driver app or the driver web portal, on endpoints scoped to their own account.
Two kinds of shift
Every shift is either scheduled or ad-hoc, and the difference is not cosmetic: it decides whether the shift can be planned in advance, whether it can be missed, and whether it counts in the no-show figures.
| Scheduled | Ad-hoc | |
|---|---|---|
| Created | In advance, by you | At the moment someone clocks in |
| Starts life as | Scheduled | Active — it is already running |
| Needs start and end times | Yes, both, and end must be later | No — it has no planned window |
| Can be missed | Yes, once the grace period passes | No — nobody can fail to attend it |
| Counts in the no-show rate | Yes | No, in neither half of the ratio |
The roster screen
The Shifts screen is a grid of drivers down the side and time across the top. A period control switches it between daily, weekly, monthly and a custom range; the range you pick is what gets queried, so a wide range is slower and warns you when it passes 31 days. Blocks are coloured by status, and a legend under the filters says which colour is which.
Above the grid:
- A status strip — the count of scheduled, active, completed, missed and cancelled shifts. Each cell is also a filter: click one to narrow the roster to that status, click the total to clear it.
- Four measures — late start rate, no-show rate, average lateness and overtime hours. They are computed against your tenant’s own grace and overtime settings, not a fixed number.
- Filters — driver and status, plus any custom fields you have defined on shifts, plus quick views for On duty, Scheduled and Missed.
Clicking a block opens it for editing. Clicking an empty slot opens the create form with that driver and time already filled in. A second tab, Compliance Log, shows the hours-of-service events behind the numbers — see Licences and compliance. Export CSV and Export PDF both act on the shifts currently loaded, so the export follows the period and filters you are looking at.
Creating a single shift
Use this for one driver on one day. For a whole team over a date range, use bulk scheduling below.
- 1
Open the create form
Shifts → Create shiftOr click an empty slot in the grid, which pre-fills the start from where you clicked.
- 2
Pick the driver
Type to search. The driver cannot be changed later — editing a shift only exposes its times, notes and custom fields.
- 3
Choose scheduled or ad-hoc
Scheduled asks for a start and an end. Ad-hoc does not: it is created already running, as though the driver had just clocked in.
- 4
Optionally apply a template
Only active templates are offered. Picking one fills the start and end from the template’s hours; you can still edit them before saving.
- 5
Add notes and custom fields, then save
Notes are capped at 500 characters. Any custom fields you have defined for shifts appear beneath, and are validated on save.
Shift templates
A template is a named pair of times — an early shift of 06:00 to 14:00, say — with an optional description and an active flag. It carries no driver and no date. Its only job is to stop you retyping the same hours, and to give the roster something to group by: the shift stats can break down by template, so naming your shift patterns is what makes "which pattern runs late" answerable.
Both times must be HH:MM, and the start must be earlier than the end, which means a template cannot currently describe a shift that runs past midnight. Deactivating a template hides it from the pickers without touching the shifts already created from it.
There is no dedicated screen for managing templates. They appear as a picker in the create form and in the bulk scheduling wizard; creating, renaming and deactivating them is done through the API or by asking the assistant.
Bulk scheduling
A three-step wizard that creates one scheduled shift per selected driver per matching day.
- 1
Select the drivers
Shifts → Bulk ScheduleTick them individually or select all. Every selected driver gets the same pattern.
- 2
Set the pattern
Pick a template, or enter start and end times directly. Then choose the date range and which days of the week apply — weekdays are the default. The range cannot exceed 31 days.
- 3
Check the preview and confirm
The preview multiplies drivers by matching days so you can see the total before committing. On confirmation you get back a created count and a skipped count.
Editing and removing shifts
Only a shift still in scheduled status can be edited, and only its times, notes and custom fields. Once a driver clocks in, the shift is a record of what happened rather than a plan, and the product stops letting you rewrite it. Deletion is narrower still: a shift can be deleted only while it is scheduled or cancelled. A shift that ran, or one the no-show detector marked as missed, stays on the roster permanently.
Terminology
Your organisation can rename these. If your screens say something else, this is what they mean here.
- Shift
- One block of working time for one driver. Some tenants call these duties, tours or blocks.Rename it in Customize → Terminology
- Driver
- The person the shift belongs to. Some tenants call these operators, couriers or crew.Rename it in Customize → Terminology
- Clock in, clock out, no-showsWhat happens to a shift from the moment it is rostered to the moment it closes.
- Licences and complianceHours-of-service limits, the compliance log, and driver document expiry.
- Driver status is derivedWhy an active shift changes a driver’s status, and why you cannot set it directly.