Schedule grid & coach shifts
The schedule grid at /coach/schedule is a spreadsheet view spanning
many events at once. Use it to:
- Plan headcount across upcoming events (which weeks are light, which are heavy?)
- See who’s RSVP’d across multiple groups/calendars side-by-side
- Assign coaches to cover events (admin only)
Every coach gets a personal My shifts view at /coach/my-schedule
showing only events they’ve been assigned to.
The grid layout
-
Left column — athletes, banded by group with a header row per cohort, then below the divider, coaches.
-
Top row — events in chronological order, each labeled with day, time, type, and group(s). Hover an event header and you get its full name — U16 GS — Copper — plus the calendar. Tap to jump to its edit page.
The hover carries the full title because staffing depends on it: what kind of session, and where, decides who you need on it.
-
Cells in the athlete section — show the RSVP status:
Y(green) — YesN(red) — No—(gray) — No response
-
Athlete cells are read-only by design. To change an RSVP, open the event from the column header.
-
Cells in the coach section — show availability and assignment. Tap to cycle (admin only), or use the bulk tools below:
·(gray) — Not asked✓(green) — Assigned, i.e. rostered?(amber) — Available (maybe), the bench✗(red) — Not available
Assigning staff in bulk
Tapping cells one at a time is fine for a fix-up, but not for staffing a season. Three ways to go faster, all admin-only:
- Fill a row — the
+allbutton next to a coach’s name assigns them to every event currently visible. Clear empties the whole row. - Fill a column — the
+allbutton under an event header assigns every visible coach to that event. Clear empties it. - Select a block — click one cell, then shift-click another. Every cell in the rectangle is selected and an Assign selected / Clear selected bar appears at the top of the grid.
The filters are what bound “visible” — set the date range, calendar and group first, then fill. Every action confirms with the exact number of coach-shifts it’s about to change before it does anything.
A block selection is applied as a cross product of the rows and columns it touches. For a clean rectangle that’s exactly what you picked; if you shift-click something ragged, the confirmation count tells you what will actually change. Check that number.
Headcount + coverage totals
- Per group — each band ends with its own
Yes / totalrow, so a mixed Ability window shows U16 and FIS separately instead of one undifferentiated number. - All groups — the row under the last band totals every athlete in view.
- Bottom of coach section — count of assigned coaches per event.
Filtering the grid
-
Date range — starts today and runs eight weeks. Quick buttons sit beside it: This week, 4 weeks, 8 weeks, Season. Or type your own From and To — picking a From moves the To with it, so a single day is two taps.
Season isn’t the default because events are columns here: a whole season is a very wide table. It’s one button when you want it.
-
Calendars — pick one or more to combine. Ticking a calendar also ticks its groups, so you can see exactly what you’ve selected. Untick individual groups afterwards to narrow further.
-
Groups — narrow further. If you skip this, you get every group in the selected calendars.
-
You’ll always see yourself. Admins stay on the coach list whatever the filter, so you can roster yourself on any group.
-
Filter selections are stored in the URL — bookmarkable, shareable.
Assigning a coach to an event
-
Go to
/coach/scheduleas an admin. -
Filter to the date range and calendars you’re planning.
-
In the coach section, find the coach + event cell.
-
Tap the cell to cycle it: not asked → available → assigned → not available → not asked.
Promoting someone off the bench is a single tap —
?straight to✓— because that’s the move you make most when coaches have already filled in their availability. Assigning someone who never answered takes two taps, or use+all/ block-select to do it in bulk.
Staffing a season
The workflow this is built for:
- Put the events in.
- As part-timers tell you their availability, mark them maybe or not available.
- Coaches can answer for themselves on My availability — their answers land in these cells. You can still set them by hand for anyone who tells you by text.
- When you need bodies, select the block and hit Promote maybes — every maybe in the selection becomes assigned, in one action.
- Leave the remaining maybes alone. They’re your bench if someone drops out.
- Mark not available for anyone you’d never call on, so they stop appearing as an option.
Only a roster change pushes to the coach. Moving someone to maybe or not available is your own bookkeeping — nobody gets “you have been moved to maybe” on their phone. Promoting them does push, because that’s a real shift.
When you assign:
- The coach gets a phone push (if they have push enabled and haven’t
opted out at
/coach/settings → Phone notifications → "Shifts I'm added to or removed from"). - The event shows up on their
/coach/my-scheduleview. - A chip on their
/coach/todayshows “Your shifts today & tomorrow”.
When you un-assign, they get a “shift removed” push (same opt-out applies).
Coaches: where you’ll see your shifts
/coach/my-schedule— full list of your assigned events for the next 4 weeks.- Chip on
/coach/today— when you have a shift today or tomorrow, an orange chip appears at the top with a count and a link to the full list. - Phone push — fires the moment an admin adds or removes you (if
enabled). Opens straight to
/coach/my-schedule.
Tips for season planning
- Tap 4 weeks for a month-at-a-glance, or set From to a Sunday and let To follow, then push it out to four weekends.
- Tick both Ability and Age Class if you’re staffing across both — an athlete in more than one group still shows once (their home group is the determinant).
- Tap an event header to open that event’s page; Edit is a button there.
What this isn’t (yet)
- No recurring availability templates — a coach can’t declare “I’m always free Tue/Thu evenings”; they answer event by event on My availability.
- Nothing tells you when a coach answers — their maybe/can’t shows up in the grid, but no notification fires. Check the grid when you’re staffing.
- No coach attendance — the grid shows who’s assigned to cover an event but doesn’t track whether they actually showed up. (If we ever need that, we’d add a separate roster like for athletes.)
- No notes on assignments — a cell holds a state, not a sentence. If you need context (“Sarah covering for Bob”), use the event’s coach note or Telegram for now.