Heads up — where the data comes from: this dashboard is a downstream consumer. In production, every value here is fed in from elsewhere on the Tripshepherd platform.
From the platform / roster (static, set once and maintained):
- Tours — pulled from the product catalog.
- Guides — pulled from the guide roster on the platform.
- Certifications — granted by lead guides through BOAT.
- Onboarding availability — full-timers default to "every day, every block"; part-timers' preferred days/blocks are captured during onboarding (see the small badge / profile line in Guides & certs). Guides do not change this from the app — it's set once at sign-up.
- Configure blocks — pulled from operating-hours / block templates.
From the guide app (the only weekly variability):
- Time-off requests — full-day or block-specific. Approved requests are hard unavailability and the suggester excludes that guide on those days. Pending requests stay scheduled but appear as a soft warning.
Because availability is mostly static, week-to-week schedules are highly predictable. The Out this week strip above the calendar shows the only delta you usually need to react to.
Overview
This dashboard turns a roster of guides, a catalog of tours, and a week of guide-availability into a published schedule. It works in three loops:
- Configure — define your blocks (AM/PM/EVE), tours, guides, and certifications. Done once per city, then maintained.
- Build — for each upcoming week, request availability, auto-populate or copy from a previous week, then resolve any flagged issues.
- Publish — release the schedule to guides. Edit later if needed; the dashboard tracks unpublished changes for you.
A "section" is the smallest unit of work — one tour type (Walking or Driving) on one day in one block. Every KPI in the dashboard counts sections.
Setup (one-time per city)
The four buttons in the subheader each open a configuration modal. Set them up in this order for a new city:
0 · Add a city (and optionally import its catalog)
Open the city picker (top-right) and click Add city at the bottom. The modal walks through up to three steps:
- Name. Type the city. If the typed name matches a city already registered on the platform's product catalog (currently Toronto, others as the catalog grows), a Pull from product list CTA appears.
- Source. Clicking the CTA shows every city the platform has products for. Pick one.
- Products. All of that city's tours show with checkboxes — all selected by default. Each row shows tour type (Walk / Drive), start time, duration, and the block it'll fall into. Deselect anything you don't want scheduled, then click Add city with N tours.
What import does for you:
- Pre-fills the Tours catalog with the selected products.
- Auto-generates three time blocks (Morning / Afternoon / Evening) and computes each block's window from the imported tours — earliest start to latest end across that bucket. Buckets without any imported tours fall back to default windows (08:30–13:30 / 13:30–18:00 / 18:00–22:00).
- Bucketing rule — tours starting before 12:00 land in AM, 12:00–17:00 in PM, 17:00 onward in EVE.
If the typed name doesn't match a catalog (or you skip the CTA), the city is created blank and you go straight to step 1 below.
The product catalog is platform-wide data — these tours come from the same source you'd see in Tripshepherd's product/tour records. The Add City flow is a shortcut so you don't have to retype them here.
1 · Configure blocks
Defines your AM / PM / EVE windows. Each block has a name ("Morning"), time ("08:30 – 13:30"), and short key ("AM") used in pills.
2 · Tours
Your product catalog. Each tour belongs to a tour type (Walking or Driving), a start time and duration, and one or more blocks it can run in. The dashboard infers offered tour types for the city from this list — if you have only Walking products, Driving sections never appear in the calendar.
3 · Guides & certs
Your roster, plus a checkbox matrix of which guide is certified for which tour. Only certified guides count as primary coverage for that tour's products. Editing certs is the single biggest lever — it changes Product Gaps and Primary Uncertified KPIs immediately.
Each guide row also carries an FT or PT badge plus a read-only Availability profile (e.g. "Mon, Wed, Fri · AM/PM"). Full-timers are assumed available every day, every block; part-timers' profile is captured during onboarding on the platform's roster page and read here. The schedule feature uses these as a deterministic input — there is no weekly "ask the team" step.
4 · Priorities
Color and label each priority rank. Three ranks ship by default (P1 blue, P2 green, P3 orange). Add more ranks if you run a deeper backup bench; remove ranks you don't use. Colors propagate to every pill, badge, and modal.
Changing Priorities mid-cycle re-colors live cells. Pick your palette before you publish a schedule.
P1, P2, P3 explained
Every cell in the schedule holds a stack of guides ordered by priority. The rank means how the section is run if the schedule is challenged on the day:
Rank pills (one stacked section)
P1 Lena P.
P2 Marco B.
P3 Sarah C.
- P1 — Primary lead. Runs the tour. Must be certified for the product. If a P1 is missing the cell is Unfilled.
- P2 — Backup. Steps in if P1 calls out. Missing P2 is a soft warning ("Missing P2 backup") — the tour still runs, but you have no fallback.
- P3+ — Bench. Further fallbacks. If the only certified guide in the stack is P3+, the cell triggers the Primary uncertified KPI: the schedule technically has a guide, but your front-line P1 isn't certified.
How to change a rank
- Click the cell section (Walking or Driving) to open the side panel.
- On a guide row, use Replace to swap a different guide into that rank, or Remove to delete and re-index the stack.
- Use + Add backup (Pn) to push a new guide onto the next available rank.
Removing P1 promotes P2 to P1 automatically. Ranks are always contiguous (no P1 + P3 with no P2).
Auto-suggester logic
The suggester fills every section using the roster, certifications, onboarding-availability profiles, and the per-guide signals below. Because all of those inputs are static, schedules are highly predictable week-to-week — the suggester runs silently when you navigate to an unpopulated future week so you start with a draft to review rather than a blank grid.
Inputs the suggester looks at
| Signal | What it does |
| Roster availability | Read directly from the platform. Full-timers = every day, every block. Part-timers = the days/blocks captured at onboarding. |
| Approved time-off | Hard unavailability. Guide is excluded from the listed days entirely. |
| Pending time-off | Soft warning. Guide stays in the schedule but appears in the Out this week strip flagged "pending" so you can react if approved. |
| Certification | Hard requirement for P1. Uncertified guides can only land on P3+. |
| Score (70–95) | Hidden quality score. Higher score → more certifications and a stronger P1 candidate. |
| Hours balance | Targets even distribution. Guides with negative hours (under-booked) get prioritized first. |
| Preferred ⭐ | Guides marked preferred are nudged toward higher-visibility blocks (e.g. Saturday morning). |
| Tour-type variety | Tries to keep each guide on a healthy mix of Walking + Driving where they're certified for both. |
| Cross-tour conflict | The suggester never puts one guide on Walking and Driving in the same block. Same-guide assignments across tours are flagged in the Cross-tour conflicts KPI. |
How ranks get assigned
- P1: the most-qualified, most-available certified guide for the section.
- P2: the next certified guide available, ideally distinct from P1's day-pattern (so a sick-day doesn't take both out).
- P3+: remaining bench, regardless of certification — the suggester will surface a flag if there's no certified P1 or P2.
What "Primary uncertified" means
A section where the highest-ranked certified guide is P3 or lower. The tour can technically run, but you'd be promoting a bench guide to P1 on the day. Resolve by adding a certified guide at P1, or by adding the certification to an existing P1.
Auto-populate vs Copy from previous vs Re-run suggester
- Auto-populate (publish-bar) — fills the current week from the roster + time-off inputs. Runs automatically the first time you navigate to a future week; click again to overwrite manual edits with a fresh draft.
- Copy from previous (publish-bar) — clones a prior week's cells into the current week. Often the closest-to-final starting point for a non-event week.
- Re-run suggester (subheader) — soft refresh that re-applies suggester logic to the current week without discarding manual edits.
How to override the suggester
Any cell change (Replace, Remove, Add backup, drag-reorder) overrides the suggester for that section. Re-running the suggester later will respect those manual edits.
KPI cards
The strip above the calendar is your at-a-glance health check for the week. Cards turn yellow when they need attention and red when they block publishing.
| KPI | What it counts | Goal |
| P1 filled | Sections with at least one guide assigned at P1. | 100% before publishing. |
| P2 backup filled | Sections with a P2 assigned. | ≥ 80%. |
| Unfilled sections | Sections with zero guides — tour cannot run. | 0. |
| Cross-tour conflicts | Same guide assigned to Walking and Driving in the same block. One person can't run both — always flagged. | 0. |
| Product gaps | Sections where no guide in the stack is certified for any product the section runs. Hard fail. | 0 — must clear before publish. |
| Primary uncertified | Sections where only P3+ are certified — see "Auto-suggester logic". | 0; soft warning otherwise. |
| Imbalance flags | Guides whose week-over-week hours fall outside ±6h of the city target. | 0; soft warning otherwise. |
Issues panel
The right rail (when no cell is selected) lists every flagged issue from the KPIs, grouped by severity, with a one-click action on each.
- Unfilled sections → Assign P1
- Missing P2 backup → Add P2
- Cross-tour conflicts → Resolve (opens the section so you can swap one of the two guides)
- Product coverage gaps → Find certified guide
- Primary uncertified → Open (opens the section's side panel)
- Imbalance flags → Open (opens the guide in Signals tab)
Each group caps at 6 visible items with a "+N more…" overflow. Resolving an issue removes it live — no save step.
Week states
Because availability is no longer collected weekly, the old four-state dance (pending → requested → ready → populated) is gone. Now every week is either populated (cells have data) or empty.
- Past / current week — populated by default (data shipped with the publish).
- Future week, first visit — the suggester runs silently using the roster + time-off inputs, so you land on a draft to review rather than an empty grid.
- Future week, returning visit — your edits are preserved.
If you want a fresh draft, click Auto-populate on the publish-bar to overwrite the current week. To use a prior week as a starting point, click Copy from previous.
Publish lifecycle
The badge on the publish bar tells you exactly where the current week is. Each state corresponds to a specific button label and disabled-state.
Cycle 11 · Phase 1 review
Published · 2025-05-01 16:20
Unpublished changes
| Badge | Button | Behaviour |
| Cycle · Phase 1 review | Publish → | Schedule built but never released. Click to publish. |
| Published · timestamp | Disabled | Live for guides. Nothing to do until you edit. |
| Unpublished changes | Publish changes → | You edited a published schedule. Re-publish to push the diff. |
Any cell edit on a published week (Replace, Remove, Add backup, reorder) automatically flips the badge to Unpublished changes. There is no separate "save" step before publishing.
Drafts & copy from previous
Save draft
Save draft snapshots the current week without releasing it. Use it before risky edits or to keep a "Plan B" version. Reopen any saved draft from the Drafts button.
Copy from previous
Copy from previous (in the publish-bar) opens a list of populated past schedules (released or in-review). Pick one to clone all of its cells into the current week — overwriting any auto-populated draft. Useful for repeating weeks (off-season) or cycling a known-good template forward.
Copy is a one-shot clone — there's no live link between source and destination. Edit the new week freely; the source isn't touched.
Blocks vs Guides view
Blocks view (default)
Rows are blocks (AM/PM/EVE). Cells show every guide stacked on that block per day. Best for spotting holes — empty sections, missing P2, conflicts. KPIs and Issues panel are calibrated to this view.
Guides view
Rows are guides. Cells show what that guide is running each day. Best for guide-level checks — fairness of hours, who's overworked, who's idle. The hours-balance ("+5h", "−3h") next to the name is your week-over-week target delta.
Both views read the same underlying data; switching is purely visual.
Happy path — building next week's schedule
1
Open the upcoming week
Click › until the subheader shows the week you're scheduling. Confirm the city in the city picker. The suggester runs silently — you start with a draft based on roster + approved time-off.
2
Glance at "Out this week"
The strip above the calendar shows approved and pending time-off requests. Approved guides have already been excluded; pending ones are still scheduled but flagged.
3
Adjust if needed
If the auto-draft is off, click Auto-populate to re-run from scratch, or Copy from previous to clone a past week.
4
Resolve issues
Work top-down through the Issues panel. Aim for: 0 Unfilled, 0 Product gaps, 0 Cross-tour conflicts. P2 below 80% and Primary uncertified above 0 are acceptable but should be intentional.
5
Save a draft (optional)
Click Save draft if you want a safe-point before more edits. Drafts are city- and week-scoped.
6
Publish
Click Publish →. Badge flips to Published · timestamp; the button disables until your next edit.
Edge cases & how the dashboard handles them
Brand-new city with no guides
Both views show an empty-state with a direct shortcut to Guides & certs. KPIs all read 0 / 0 until guides are added.
City offering only one tour type
If the Tours catalog has only Walking products, Driving sections never render. The opposite is also true. Add a product of the missing type to unlock those rows.
Approved time-off after the schedule was published
The guide stays on the published schedule (we don't silently delete from a live release). The Out this week strip flags them; resolve by editing the affected sections (Replace), then re-publishing — the badge flips to Unpublished changes.
Pending time-off that overlaps assignments
The guide stays in the schedule (placed but flagged). If approved later, follow the previous edge case. If rejected, no action needed.
No certified guide exists for a product
Section shows in Product gaps (red, hard fail). Resolution: certify a guide for that product (Guides & certs), or add a tour to a guide who is already certified.
Only P3+ certified for a section
Section shows in Primary uncertified. Either elevate a certified guide to P1 (Replace) or add the certification to your existing P1.
Imbalance > ±6h
Guide shows up in Imbalance flags. Either move sections off them or onto them; or set the city target to a different baseline if the whole roster is drifting.
Editing a published week
Badge flips to Unpublished changes; the publish button reactivates as Publish changes →. There is no rollback in-app — re-publishing pushes the new state.
Copying from a draft into a populated week
The destination cells are overwritten. Save a draft of the destination first if you may want to revert.
Adding a priority rank mid-cycle
Existing pills keep their old colors. New rank colors apply only to newly-assigned guides at that rank.
Buttons & cheatsheet
Top header
- City picker — switch between cities. Add city at the bottom of the menu opens the new-city flow; if the typed name matches a city already in the platform's product catalog (e.g. Toronto), a Pull from product list button appears to import its tours and auto-generate time blocks.
Subheader
- ‹ / › — previous / next week.
- Today — jump to current week.
- Blocks / Guides — view toggle.
- Configure blocks — edit AM/PM/EVE definitions.
- Tours — product catalog.
- Guides & certs — roster + certification matrix.
- Priorities — rank colors and labels.
- Re-run suggester — soft refresh of the current week's stacks.
Publish bar (above calendar)
- Cycle / Published / Unpublished changes badge — current state.
- Copy from previous — clone a past schedule into the current week.
- Auto-populate — run the suggester to overwrite the current week with a fresh draft.
- Drafts — open saved drafts for this city.
- Save draft — snapshot current week.
- Publish → / Publish changes → — release the schedule. Disabled when there's nothing to publish.
Out this week strip (above calendar)
- Red chips = approved time-off (already excluded from the schedule).
- Yellow chips = pending time-off (still scheduled; may need reassignment if approved).
Cell side panel
- Priorities tab — rank stack, replace, remove, add backup, approve, re-suggest.
- Signals tab — per-guide preferred / hours / variety.
Floating button
- Schedule Guide — re-opens this guide. Available on every screen.