Skip to main content
A shift is a named time window within an event that needs to be filled with volunteers. Shifts carry group-based staffing requirements that the auto-assign engine uses to match the right people to the right roles.

Shift fields

FieldTypeDescription
namestringA human-readable label such as Gate A – Morning or Medical Standby.
start_timetimestampStart of the shift window (stored as UTC, displayed in the event timezone).
end_timetimestampEnd of the shift window.
required_groupsJSON objectMaps group names to required headcount. See example below.
allowed_groupsstring arrayIf set, only volunteers in these groups may be assigned.
excluded_groupsstring arrayVolunteers in these groups cannot be assigned to this shift.

required_groups format

{
  "Medical": 2,
  "Security": 1,
  "General Volunteers": 4
}
This tells the scheduler to fill exactly 2 Medical, 1 Security, and 4 General Volunteer slots on this shift. The auto-assign engine respects these counts when distributing volunteers.
allowed_groups and excluded_groups act as filters on top of required_groups. An empty array means no restriction is applied.

Creating shifts manually

1

Open the Shifts page

From the event Command Center, click Shifts, or navigate to /events/[id]/shifts.
2

Click Add Shift

Click the blue Add Shift button in the top-right area. A form expands inline.
3

Fill in the fields

Enter the shift name, start time, and end time. Optionally select a template to pre-fill group requirements.
4

Set group requirements

Enter the required_groups JSON to specify how many volunteers per group are needed. You can also set allowed_groups or excluded_groups as comma-separated values.
5

Save

Submit the form. The shift appears in the list sorted by start time.

Inline editing

Click the edit icon on any shift row in the list to open the Edit Shift modal. You can update the name, times, and all group fields without leaving the page.

Shift templates

Templates are reusable blueprints stored at the account level (not per-event). They capture a shift’s duration and group requirements so you can create consistent shifts across multiple events.

Creating a template

1

Open Templates

From the Shifts page, click Manage Templates in the top-right. This opens /events/[id]/shifts/templates.
2

Click Add Template

Click Add Template and fill in the form.
3

Set template fields

Provide a name, duration in hours, an optional description, and the required_groups JSON. You can also set allowed_groups as a JSON array.
{"Medical": 2, "Security": 1}
["Medical", "Security"]
4

Save

Click Save Template. The template is now available in the shift creation form for all your events.

Using a template

When creating a new shift manually, select a saved template from the template picker in the shift form. The duration and group requirements are pre-filled. You can override any field before saving.
Templates are user-scoped, not event-scoped. A template you create for one event is available when building shifts for all your other events.

Recurring shifts

Recurring shifts let you generate a batch of identical shifts that repeat on a schedule — useful for multi-day events where the same staffing pattern repeats each day.
1

Click Recurring

On the Shifts page, click the Recurring button. The recurring shift form expands.
2

Configure the pattern

Choose a base shift (or select a template) and set the recurrence parameters — start date, end date, and the repeat frequency (daily, weekly, etc.).
3

Generate shifts

Submit the form. The system calls generateRecurringShifts which creates one shift per recurrence instance. All generated shifts appear immediately in the list.
Events themselves can also carry a recurrence_rule (WEEKLY, BIWEEKLY, or MONTHLY) used for the “generate next occurrence” flow when cloning events on a recurring basis.

Bulk import via CSV

You can import many shifts at once by uploading a CSV file instead of creating them one by one.
1

Click Import

On the Shifts page, click Import (the upload icon). A file upload modal appears.
2

Prepare your CSV

Your CSV should include columns that map to shift fields. The expected format is:
name,start_time,end_time,required_groups
Gate A Morning,2026-06-01T08:00:00Z,2026-06-01T12:00:00Z,"{""Security"": 1, ""General Volunteers"": 3}"
Medical Standby,2026-06-01T08:00:00Z,2026-06-01T16:00:00Z,"{""Medical"": 2}"
3

Upload and confirm

Drag your file into the upload zone or click to browse. The system parses the file and calls bulkAddShifts. All valid rows are inserted.
Uploading a CSV does not replace existing shifts. New shifts are appended. Use Delete All Shifts (the trash icon in the toolbar) before importing if you want a clean slate.

List view and timeline view

The Shifts page offers two display modes, toggled with the buttons in the search bar:
  • List view — A tabular list of all shifts sorted by start time. Supports search by name. Each row has inline edit and delete actions.
  • Timeline view — A visual Gantt-style chart showing shifts plotted against a time axis, useful for spotting gaps and overlaps across a long event day.
Switch between views at any time; your shift data is the same in both modes.

Deleting shifts

To delete a single shift, click the delete icon on its row in the list view and confirm the prompt. To remove all shifts for an event at once, click the trash icon in the Shifts toolbar and confirm. This is permanent and cannot be undone.

Volunteer groups

Define the groups referenced in required_groups and allowed_groups.

Bulk import

Learn more about the CSV import format for volunteers and shifts.

Assignments

Assign volunteers to shifts manually or with Auto-Assign.

Dashboard

Monitor fill rates and shift coverage in real time.

Build docs developers (and LLMs) love