Manual assignment
Find the shift
Use the search bar to filter by shift name, date/time, or assigned volunteer name. Shifts with conflicts or unfilled slots are automatically sorted to the top.
Select a volunteer
In the shift card, open the + Add Volunteer dropdown and select a name. The volunteer is assigned immediately and the card updates without a page reload.
The app prevents assigning the same volunteer to the same shift twice. If you attempt a duplicate, an error message is shown and no record is created.
Swapping assignments
To swap two assigned volunteers between shifts:- Click Swap next to the first volunteer. Their row is highlighted in blue.
- Click Swap next to the second volunteer in any shift. The two volunteers exchange positions.
Removing assignments
- To remove a single volunteer from a shift, click Remove next to their name.
- To remove all volunteers from one shift, click Unfill shift in the shift card header.
- To clear all assignments across every shift in the event, click Clear All in the page toolbar.
Auto-Assign
Auto-Assign sends your event’s full volunteer and shift data to the external Go Scheduler API, which returns an optimized assignment plan in milliseconds.How it works
Click the Auto Assign button. The app:- Fetches all volunteers and shifts for the event from Supabase.
- Builds a JSON payload and sends it to
POST /api/schedule. - Deletes all existing assignments for the event.
- Inserts the new assignments returned by the API.
Request payload
max_hours value are sent with max_hours: 999, which the API treats as unlimited.
API response
| Response field | Description |
|---|---|
assigned_shifts | Map of shift_id → [volunteer_ids] for all filled slots. |
unfilled_shifts | List of shift IDs that could not be fully staffed. |
fairness_score | Workload distribution score (see below). |
conflicts | Reasons why specific shifts could not be filled. |
Fairness score
After Auto-Assign completes, a Schedule Fairness panel appears at the top of the Assignments page showing thefairness_score returned by the API.
The fairness score is a variance-based metric where lower is better — a score near 0 means every volunteer has been assigned roughly equal hours, while a higher score indicates an uneven workload distribution. The UI renders the raw score as an equivalent percentage (0–100%) for readability:
| Score range | Rating |
|---|---|
| > 90% | Excellent — workload is perfectly balanced. |
| 70–90% | Good — minor variations. |
| 50–70% | Fair — some volunteers are working significantly more. |
| < 50% | Imbalanced — review assignments immediately. |
Conflict insights
Anyconflicts entries returned by the API are displayed in the Global Scheduling Insights panel alongside the fairness score. Similar reasons (e.g. multiple “max_hours” violations) are aggregated and de-duplicated into a compact list.
Viewing assignments by shift
The Assignments page groups all assignments under their parent shift cards, sorted by:- Shifts with scheduling conflicts (highest priority)
- Partially filled shifts
- Completely empty shifts
- Chronological order, then alphabetical by shift name
Conflict detection
The page performs client-side conflict detection on every render:- Double-booking: if a volunteer appears in two shifts whose time windows overlap, both shift cards show a yellow warning with the volunteer’s name and the word “Overlap”.
- Max hours exceeded: if a volunteer’s cumulative assigned hours across all shifts exceeds their
max_hours, all shifts they are assigned to show a warning with their name, actual hours, and limit.
Volunteers
Manage volunteer profiles, groups, and max hours.
API overview
Technical details on the Go Scheduler API, authentication, and endpoints.