Back to the Screen Index

Design Record

Everything behind the nineteen screens: what each one carries, how they link up, which board directives were applied, which crit points are resolved, and every call made where the board was silent or in conflict with itself. Each entry opens on its own.

Questions For Bryan

Screen Notes

What each of the nineteen screens carries, and the board frame it was built from. The screen index lists the same nineteen in one line each.

1. Home, Dashboard Tab

Welcome card, the three week-at-a-glance figures, the appointments list grouped Today first, the Messages section, and Get Help at the base of the page. The list's Filter button works: it opens a panel of session types and statuses under the list head, hides the rows that do not match as a box is ticked, drops a group heading once every row under it is hidden, and keeps the count beside the title honest. Board frame 172:144.

Open This Screen

5. Dashboard, Notifications Drawer

The same dashboard with the notification bell open. Four notifications, each expandable, each deletable, plus Clear All and a caught-up empty state. The notifications drawer has no filter of its own on the board, and none was invented. The welcome card carries the third setup step, Review Your Appointment Types, and the My Appointments filter behind the list head works here exactly as it does on screen 1. Board frame 345:1845.

Open This Screen

2. Home, Calendar Tab

The calendar navigates. Day, Week and Month are three working views of one set of sample data covering Mar 9 to Mar 29, 2025; the arrows step three weeks in Week view and day by day in Day view, greying out at either end; Today returns to the week of Mar 17. A month cell opens that day. Every view carries the bookable window, scheduled time off and session cards leading with their time, and any card in any view opens the session details drawer on the right, filled with that card's own client. The Filter drawer actually filters, in all three views: every checkbox shows and hides the matching cards, month chips and bands as it is ticked, and its Time period select moves the calendar, with Custom range opening an inline March 2025 date picker. Board frame 172:1166, with Epic 2 392:539 for the time-period values.

Open This Screen

3. Calendar, Add Time Off Drawer

The time-off tab of the add drawer, including the clash warning that names each affected session with an Open link and a Reschedule link. The toolbar Filter button works here too: it opens the same filter drawer screen 2 carries and suspends the add drawer while it is open, so only one panel ever holds the right edge. Board frame 172:339.

Open This Screen

4. Calendar, Book a Session Drawer

The session tab of the add drawer: client search scoped to assigned cases, the client info block, the appointment-type accordion with its session-detail cards, duration with a live end time, and the client-timezone equivalence line. The toolbar Filter button works here as it does on screen 3, suspending the add drawer while the filter is open and putting it back untouched. Board frame 172:755.

Open This Screen

6. Home, Appointments Tab

The appointments list with the session details drawer open beside it: client details, the four attendance actions, the no-show modal, and Schedule New Appointment. Clicking any row swaps the drawer to that row's client, case number and time without leaving the page; it opens on the Ella Zaman row so the board frame reads as drawn. The Filter button carries the same working session-type and status filter as screens 1 and 5. Board frame 370:2394.

Open This Screen

7. Calendar, Session Details Drawer

The same drawer opened from a calendar card on the week of Apr 21, 2025, kept as the board's built calendar-plus-drawer state and reached from this list rather than from an appointment row. The drawer has no scrim, so a provider can move between sessions without closing it. Board frame 370:1962.

Open This Screen

8. Reschedule Appointment

Modal over the session drawer: a working week stepper carrying three weeks of sample availability (Apr 28, May 5, May 12), a working time-of-day filter inside the loaded week, the note that times are shown in the client's time zone, Confirm gated until a slot is chosen, and a success state. The arrows grey out at either end of the loaded range. Board frame 47:5798.

Open This Screen

9. Cancel Appointment

Modal over the session drawer: the seven common reasons as Bryan revised them, a note field, Confirm gated until a reason is chosen, and a success state. Board frame 47:5344.

Open This Screen

10. My Availability, Schedule List

The three figures at the top are real links, and they carry the same figures and the same action words as the dashboard on screens 1 and 5. Each schedule card expands to show its session types, carries a Live or Draft badge in its header as its only publish-state signal, and opens for editing with the pencil. A warning names the hours two schedules both claim, states the precedence rule and names which of the two takes them. Get Help closes the page. The board's large dashed create card is a button in the section head, because schedules already exist. Board frame 172:1503.

Open This Screen

11. Schedule Details Panel

The schedule open in a panel beside the list, with everything the board hid behind More options brought onto it as labelled sections: session types, availability, description, limits and buffers, booking page options, notifications and workflows. The card the panel is reading is marked on the list itself, with a filled surface, a heavier left rule and aria-current, rather than a sentence telling you to look right. All three schedules show, the draft included, so screens 10, 11 and 19 list the same set. The day toggles work, each day that is on can copy its hours onto other days, the sections open and close, Preview opens a week of this schedule's own hours at the foot of the panel, and Save Changes closes the panel, confirms on the list behind it and puts focus back on the card it was editing. Each section name is a heading as well as a button, so a screen reader can move between the six by heading. Board frames 172:1695 and 172:2430, built as one screen.

Open This Screen

12. Wizard Step 1, Session Details

A Schedule Name field, then the four session types as cards with an edit pencil each. A card is a real choice: unselected it is a neutral card, selected it takes the brand fill, a brand border and a second inset edge, and the whole card except the pencil is the hit area. The gate is live: Continue stays disabled and the line under the grid counts the selection as boxes are ticked, and turns into an error only once a provider has cleared the last one. Board frame 172:2692.

Open This Screen

13. Wizard Step 2, Weekly Hours

Seven days, each with a switch and its own time ranges. Turning a day off hides its hours and says Unavailable; Add Time Slot adds a range, focuses it and says so in the status bar; removing one moves focus to the range beside it and says so too; the last range on a day cannot be removed, and its X is drawn and titled as the disabled control it is. Copy To Other Days opens a picker of the other six days and writes this day's ranges onto every one ticked. The three tabs across the top are three working screens. Board frame 172:1840, drawn inside 172:1695.

Open This Screen

14. Wizard Step 2, Date-Specific

One-Time or Recurring under a fieldset labelled Recurrence, with each option stating in words what it does and where it lands, and Recurring revealing its own repeat control. Add Time Slot adds and renumbers the slots. Add These Hours commits: it writes the date into a Dates You Have Added list below the form, with the hours and the recurrence as chips and a Remove on each, then clears the form so the next date starts from empty. The line under the date field states the date in words and follows the field. The board's Logs section is gone. Board frame 172:2949.

Open This Screen

15. Wizard Step 2, Calendar View

March 2025 on its real weekdays. Every cell states its hours start to end with both meridiems, one range per line. Clicking today or any later date opens the day panel beside the grid, filled from the day clicked, without leaving the page: that day's own slot rows, and a read-out that states the hours the day inherits, or says the weekly pattern leaves it empty, or names the time off. Only March 20 has time off, so only March 20 says so, and it stays a green available day with an orange band along its foot rather than turning fully peach. The recurrence choice restates where the hours land as it changes. Past dates and days outside March are drawn but inert. Above 1280 the panel stands beside the grid and the page beside it stays usable. At 1280 and below it covers the page and is a real modal: scrim, announced as modal, the page behind it held still and the Tab ring kept inside. The page loads with the panel open only where it stands beside the calendar; at a modal width the calendar shows first. Board frame 172:3148.

Open This Screen

16. Wizard Step 3, Capacity and Pacing

The step opens with a read-only summary of the hours step 2 produced, weekly pattern and date-specific dates, with a link back to that step, and a notice stands in its place if step 2 produced nothing. The two caps are stated with a lock and a line naming who set them, because Bryan's note says an administrator owns them. A hint says which of the two caps actually bites. The two pacing switches are the provider's, each reveals its own settings when it goes on, and each states its state as its own word on its own line, the way the weekly hours screen and the schedule panel do. Board frame 172:3458.

Open This Screen

17. Wizard Step 4, Time Blocking

Time Off Type changes the fields shown, a Repeat control makes an entry recurring, and Add Time Off really writes an entry into the Scheduled Time Off list below, which Remove really takes out. An entry you add is written the way the one already there is written: the weekday and the month in words, the clock in twelve-hour time, and the end of a date range shown rather than collected and dropped. The saved entry leads with its day, says which published hours it overlaps, and names both booked sessions inside the window with an Open and a Reschedule link each. Show Conflicts opens the calendar. Board frame 172:3635.

Open This Screen

18. Wizard Step 5, Preview and Confirm

The summary beside the month it produces, grouped by the step each fact came from, so time off is its own group rather than a line under Capacity. Clicking any day states that day's hours under the grid, which is what the board's day-level calendar could not do. The legend carries two keys, each with a one-line meaning. The overlap this schedule will create sits above Publish Availability, so it is read before the decision rather than after it. Save as Draft lands on the schedule list, where the draft is waiting. Board frame 172:3814.

Open This Screen

19. Availability Published

The success banner over the schedule list, dismissible in place. The schedule that was just published carries a Live badge and says when it went live, and its summary line states the hours step 5 actually confirmed, Monday's lunch break and Friday's early finish included, rather than a tidier weekdays 9:00 to 5:00. The count at the top has moved, and the overlap warning has grown to name three schedules, state the precedence rule and say which schedule takes which shared hours. It is the same warning step 5 showed before Publish was pressed. Board frame 172:4184.

Open This Screen

How the Screens Link Up

The session details drawer opens in place wherever a session is listed: on the calendar (screen 2, every card in every view) and on the appointments lists (screens 1, 5 and 6, every row). Screens 7, 8 and 9 keep it as the built page state for Tiffanee Richter's April 21 session.

On the calendar, a card opens the drawer beside it

Clicking any session card on screen 2 opens the session details drawer on the right of that same page, filled from the card: the client, the day and time, the appointment type in the drawer title, the contact type in words, the case number, and the client details block. That holds in every week and in Day view, because the card carries its own data rather than the page carrying one fixed session. Nothing navigates. Escape or the X closes it and puts focus back on the card that opened it. Changing the view or the week closes it, since the session showing may not be in the new range. The filter drawer and the session drawer never open together; opening one closes the other.

The toolbar and the filter drawer say the same thing

The Time period select always states what the calendar is showing: This week on Mar 16 to 22, Next week on Mar 23 to 29, This month in Month view. Step the arrows to a range none of those three describes, or open a single day, and it falls back to Custom range with the picker open on the date being shown. Choosing a date in the picker opens the week that holds it.

Every Filter button on the set filters

There are two filters, one per surface. On the calendar (screens 2, 3 and 4) the toolbar Filter opens a side drawer of status, appointment type and contact type, and every box shows and hides the matching cards and bands as it is ticked. On the appointments list (screens 1, 5 and 6) the Filter button opens a panel of session type and status under the list head, hides the rows that do not match, drops a group heading once every row under it is hidden, and restates the count beside the title. Both carry Clear All. Nothing is inert.

On the appointments lists, a row opens the drawer beside it user-directed

Every appointment row on screens 1, 5 and 6 opens the session details drawer on the right of that same page, filled from the row: the client, the day and time, the session type in the drawer title, the contact type in words, the case number and the client details block. All eight rows behave the same way on all three screens, and nothing navigates. Escape or the X closes the drawer and puts focus back on the row that opened it. Screen 6 ships with it open on the Ella Zaman row; screens 1 and 5 ship with it closed.

What this replaced

Until now a row was routed by the client it named: Ella Zaman's rows went to screen 6 and Tiffanee Richter's rows went to screen 7, which is calendar-based, while the other five clients' rows opened nothing at all. Clicking two rows in the same list therefore landed on two different kinds of screen, or on none. Screens 7, 8 and 9 keep Tiffanee's April 21 session as a built state reached from the screen list above; no row points at them any more.

Filtering with the drawer open keeps it, unless the row it is reading disappears

The Filter button on screens 1, 5 and 6 works with the drawer open. If the row the drawer is reading survives the filter, the drawer stays exactly as it is. If that row is filtered out, the drawer closes rather than describing a session the provider can no longer see, and focus stays on the filter. Clear All puts the rows back; the drawer does not reopen on its own. Same rule as the calendar, where changing the week or the view closes the drawer.

The two sections join through the left rail

My Availability in the left navigation is live on all nineteen screens, so the two sections reach each other from anywhere. Inside My Availability the wizard runs 12, then 13 or 14 or 15 for step 2, then 16, 17, 18 and 19, and every step in the rail is a link so it walks backwards as well as forwards. Publishing lands on 19, Save as Draft lands on 10 with the draft waiting there, and three controls cross back into the Home section: Show Conflicts and the 18 available slots figure both open the calendar, and each clashing session on the time-blocking step opens the session details or the reschedule modal.

Schedule New Appointment carries the client across

The button in the drawer footer opens screen 4 with the client already filled in: name, case number, sessions remaining, authorisation window and preferred contact. All seven clients on the week grid are carried, so the button never lands on somebody else's case. It does this with a query string, which is prototype plumbing rather than a proposed URL contract. With JavaScript off, screen 4 shows the client it ships with.

Board Directives Applied

Bryan's notes on frame 172:144, and the board-wide terminology sweep.

Case ID chip and modality icon on every appointment 345:1440

Each row carries its UCMS case activity number as a chip, and a video or phone glyph with a screen-reader label beside the time.

Messages section for admin communications 370:4623

A collapsible section under Appointments, holding communications sent out to providers. The header carries a mail icon with a new-message dot and a counted badge, so the state is never colour alone. It is separate from the notification bell, which carries per-appointment events.

Get Help at the base of the dashboard 370:4619

A single support link closing the page, with a line naming what support covers and how fast it answers.

The word is client 370:4684 and 370:4680

No patient, participant, invitee or member anywhere in the set.

Your notes on the My Availability V2 frames.

A Schedule Name field on step 1 317:418

First field on the step, and the name every later screen calls the schedule by. It is what lets a blocked time say "Weekday hours (Mon to Fri)" rather than "Schedule 1", which crit 244:470 asked for.

An edit pencil on each session type card 317:399

On all four cards on step 1, and on all four rows in the schedule panel. It is also the answer to crit 242:347: the values on a card are read-only, and the pencil is the way out to Preferences, where they are set.

SVC and STC are Video call and Phone call 242:354, answered "y" at 317:403

Everywhere in this section. In person is unchanged. The two codes do not appear on any of the ten screens.

The two caps are set by an administrator 345:1447

Max Sessions Per Day and Max Sessions Per Week are stated with a lock and a line naming who set them, not drawn as steppers a provider cannot use. They read the same way inside the schedule panel.

Show Conflicts opens the calendar 317:422

A button beside Add Block on the time-blocking step, going to the Home calendar, where a booked session inside a blocked window is actually visible.

The Logs block is gone 317:458

Removed from the Date-Specific form, which is also what crit 239:537 asked for.

Unavailable is out of the legend 317:436

Two keys remain, Available and Blocked, on both month grids. A third line says what an unmarked day means, which is what crit 244:501 needed.

A Live or Draft badge in the card header 317:454

On every schedule card. It is what makes the publish state readable without the colour rule, which crit 242:246 asked for, and it is half of what crit 244:508 needed.

More options can become accordion sections 317:392

Taken up. The schedule panel carries six labelled sections and no More options button, which answers crits 239:303 and 239:507 together. Your "TBD" on whether these are schedule-driven or account-driven is stated on the panel rather than answered.

Blocks can repeat 370:4780, unattributed

A Repeat control on the time-blocking form, and the repeat shows as a chip on the saved entry. This sticky carries no author on the board node, so confirm it is yours before it counts as a directive.

Not actioned: "@Bryan Rill invesitigate" 320:462

A note to yourself on the Calendar View frame, not a build instruction. Recorded and left alone.

Crit Points Resolved

Open crit points from the board, each answered in the design rather than in a comment.

The breadcrumb is gone 234:210

Home is the top level, so the crumb trail carried no orientation. The date sits under the title instead, which a provider opening the day actually uses. Every frame in the set draws the crumb; all nine screens follow this resolution instead.

The three figures are real links 234:206

Each names its destination in words, carries a chevron, lifts its border on hover and takes a focus ring. They read left-aligned now, so the number, the label and the action share one reading edge.

The list leads with Today 234:163

Today, then Upcoming, then Earlier. Past sessions stay on the page but run quieter, so a glance lands on what is still ahead.

One status per appointment 234:202

The session that carried both No Show and Rescheduled is two appointments, not one. The March 3 session keeps No Show and says in words that it was rebooked; the March 19 session it produced carries Rescheduled.

Add to Calendar is split into two named actions 244:790

One button was booking a session and blocking time, two opposite intents. It is now Book a Session and Add Time Off in the calendar toolbar. Each opens the drawer already on its own tab, and the drawer keeps both tabs so a provider can switch without going back.

Block is now Time off 244:810

Time off everywhere, in both sections. On the calendar: the tab, the drawer title, Time Off Type, Add Time Off, Scheduled Time Off, the legend key and the band on the grid. In My Availability: wizard step 4 is called Time Off in the rail, in its heading and in its page title, and it reads Time Off Type, Add Time Off and Scheduled Time Off, with the day panel on the Calendar View tab saying a window is time off rather than blocked. The word block does not appear anywhere in the UI of either section. Class names and data attributes in the markup still read blk and blocked; they are not user-visible and renaming them would have touched every rule and handler for no reader's benefit.

Session cards lead with their time 244:804

Every calendar card opens with its time range, before the client name. A half-hour card carries the appointment type and contact type as glyphs with screen-reader labels rather than dropping them.

The clash warning names the sessions it means 244:808

A plain info message states the rule once at the top of the time-off tab. The warning attached to a saved entry then names each clashing session with its time, its type and the client, and gives each one an Open link and a Reschedule link.

Schedule 1 states its own days 244:809

Renamed to Weekday hours (Mon to Fri).

Sessions show a duration, not just a start 244:825

A Duration field beside Start time, plus a live line stating the end time in words. Changing either updates it.

The three figures on My Availability go somewhere 242:253

Active Schedules jumps to the list, Available Slots This Week opens the calendar, Active Days Per Week opens the weekly hours editor. Same treatment as the dashboard figures, and now the same words: one action label per destination across all five screens that draw a figure. Available Slots This Week reads View Open Slots on 1, 5, 10, 11 and 19; Active Days Per Week reads Edit Weekly Hours on all five and reads 5 on all five. It said 3 on the dashboard and 5 in My Availability, and called the same destination Edit Weekly Schedule on one screen and Edit Weekly Hours on the other.

The overlap between two schedules is named 242:239

A warning above the list names the two schedules and the hours they both cover, and step 5 carries the same warning above Publish Availability so the clash is read before the decision rather than after it. All three stop at naming it: which schedule wins is your open question 316:375, listed below, and inventing a rule would have buried it.

The colour rule now says what it means 242:246

The board's purple and orange bars had no key, and orange already means a session on hold on the calendar. The rule follows the publish state and always sits beside the state in words, so a schedule can never read as blocked time.

The create card shrinks to a button 242:232

A full-width dashed card suits an empty list. Once schedules exist it competes with them, so it is Create New Schedule in the section head. The full card belongs to the empty list, a state this screen does not show, and that belongs in this document rather than as a line of copy on a screen that has three schedules on it.

Buffers, limits and booking options are labelled sections 239:303 and 239:507

The board reached them through More options, which opened a second panel on top of the first, three layers deep from the page. One panel with six named sections does the same job two layers shallower, and nothing hides behind a vague word.

The three Date and Time tabs state their precedence 239:313, answered "Good point. we need to add" at 317:410

One message on all three tabs: Weekly Hours sets the pattern, Date-Specific replaces it on the dates it names, Calendar View shows the result of both. The One-Time and Recurring options on the Date-Specific tab also say which of the two they write into, which is crit 242:396.

The weekly cap says whether it actually bites 244:429, answered "yes if we keep this here" at 317:414

A quiet line under the caps does the arithmetic: 6 a day across 5 days is 30, so the weekly cap of 25 is the one that stops bookings. It also states the case where the weekly cap would never take effect.

A blocked time is named by its day and its schedule 244:470

The entry leads with "Thursday, March 20, 2025" and the chip beside it reads "Overlaps Weekday hours (Mon to Fri)". The chip says overlaps rather than owns, because the step's own lede says a block applies across every schedule you publish, so a block cannot belong to one of them. A block you add on the step carries "Applies to every published schedule" instead, since nothing has worked out yet which published hours it lands in. No schedule number appears anywhere in this section.

The blocking warning lists the sessions it means 244:477

The saved block carries both booked sessions inside the window, each with its time, its type, the client and an Open and a Reschedule link, so a provider can act without leaving the step. Same pattern as the time-off clash on screen 3, and the same two sessions.

The preview calendar states a day's hours 239:514, answered "yes we need ot iterate this" at 317:429

Clicking any day writes that day's hours under the grid, including the blocked window on March 20. The calendar is no longer day-level only.

The legend keys are explained, and the two legends match 244:501 and 244:440

Two keys, Available and Partly off, each with a one-line meaning, plus a line saying an unmarked day has no availability set. The Calendar View tab and the preview carry the same three lines, so the same calendar cannot read two ways.

The day panel says where its recurrence lands 244:436

One-time says it covers that date only. Weekly says it writes into your weekly hours for every Thursday, so it also shows on the Weekly Hours tab. The line rewrites itself as the choice changes.

A draft is findable again 244:508, answered "yep. Need to add that" at 317:440

Save as Draft lands on the schedule list, where the draft carries a Draft badge, the date it was saved, and a Continue Setup button back into the wizard. It is not counted as an active schedule.

Publishing visibly changes the list 239:524

The published schedule moves to the top with a Live badge and a line saying it went live a moment ago, the Active Schedules figure moves from 2 to 3, and the banner can be dismissed without the evidence going with it.

Judgement Calls, for Bryan

Places where the board was silent, ambiguous or in conflict with itself, and a call had to be made to build the screen. Each one is reversible.

Proposed: the narrower schedule takes a shared hour user-directed, answers 316:375

The three overlap warnings used to name the clash and stop, because writing a rule into them would have answered Bryan's own question on his behalf. Jaspal directed that a rule be proposed rather than left open. The rule: a shared hour goes to the schedule that covers fewer days; if the days match it goes to the shorter daily window; if both match it goes to the schedule published most recently. Specificity beats breadth, which is the same principle the Date and Time tabs already run on, where a date-specific entry beats the weekly pattern. In the sample it gives 3:00 pm to 5:00 pm on Monday, Wednesday and Friday to Short-notice hours (Mon, Wed, Fri) over Weekday hours (Mon to Fri), three days against five; and once Spring hours (Mon to Fri) is published it takes the remaining shared afternoons from Weekday hours, a shorter day across the same five days. The warnings on screens 10, 18 and 19 now state the rule and name the winner. It is carried on the screen index as a proposal rather than as a settled call, because it is Bryan's question to close, and reverting it is one paragraph on three screens.

A day's hours can be copied onto other days user-directed, screens 13 and 11

The board draws no copy control and none was invented on the first pass; Jaspal directed that one be built. Every day that is on carries Copy To Other Days beside Add Time Slot. It opens a picker of the other six days as checkboxes with Apply and Cancel, and Apply writes that day's ranges onto every day ticked, replacing what those days held rather than adding to them. A target day that was unavailable is turned on, because it has hours now, and the status region names both what was copied where and which days were turned on. Apply with nothing ticked states that rather than closing on a no-op. The picker opens in normal flow under the day rather than as a popover, for the same reason the appointments filter does: the card around it clips its own overflow. It closes on Escape and on Cancel with focus back on the control that opened it, and opening one picker closes any other. It is on the weekly hours step and on the schedule panel's day list, the two places the same editor appears; the panel holds one range per day, so a copy there is one range to one range.

Helper text that only restates its heading is gone user-directed, standing convention

Standing rule, applied across all nineteen screens: a heading or label carries its own meaning, and supporting copy is added only where it prevents a misunderstanding or an error, never to say the heading again. Fourteen strings went whole: the My Availability lede on screens 10, 11 and 19, the welcome card's body on screens 1 and 5, the Weekly Hours, Date-Specific and Capacity Limits pane ledes, the two pacing switch descriptions on screen 16 and the buffer one on screen 11, the toggle-the-days line above the day list on screen 11, Not shown to clients under a field already labelled Notes for your own reference, and the Description section's summary of itself. Eight more were trimmed to the sentence that was doing work rather than dropped whole: the step 2 tab ledes on screens 13, 14 and 15, the step 1 pane lede, the pacing lede, the time-off ledes on screens 3 and 17, and the custom-range line on screen 2. What stayed is everything that prevents an error or explains something the screen cannot show: Set by your administrator on the locked caps, the arithmetic hint on which cap actually bites, the clash and precedence messages, the One-Time and Recurring explanations, the time-zone equivalence lines, the cross-schedule note on time off, and the legend meanings. Two section summaries on the schedule panel that described their own section now carry the section's own figures instead.

Schedule Type is now Recurrence user-directed, screen 14

The fieldset on the Date-Specific tab offered One-Time and Recurring under the label Schedule Type, which is how often an entry repeats rather than a type of schedule. Bryan's answer is the honest label, so it reads Recurrence and the two options are unchanged. If Schedule Type turns out to be the platform's own word it goes back, which is one string.

Publish state is the badge and nothing else user-directed, closes 242:246

A schedule card carried both a Live or Draft badge in words and a coloured 3px rule down its leading edge, two signals for one fact. The rule is gone from screens 10, 11 and 19 and the badge stands alone. The brand rule that marks the schedule the panel is reading on screen 11 stays and is now the only rule a card can carry, so a rule means selection and nothing else; the tint on that card and aria-current carry the same fact beside it. The draft card's grey icon wash stays, because it sits beside the Draft badge rather than instead of it.

Step 3 opens with the hours step 2 produced user-directed, screens 13 to 16

Capacity and pacing are limits on hours, and the step carried no sign of which hours it was limiting; nothing summarised step 2 before step 5. It now opens with a read-only summary of the weekly pattern and of how many date-specific dates were added, with a link back to the step that set them, which also makes the cap arithmetic below it legible: six a day across five available days is where the thirty comes from. If step 2 produced nothing the summary has nothing to say, so a notice takes its place instead and points back at the step; the branch is real in the markup and the script, and the sample always has hours, so the summary is what shows. Navigation is deliberately left ungated. Whether a schedule with no hours should be stopped from reaching step 3 at all is a rule about the object rather than about this screen, and it stays on the question list.

Get Help closes every availability screen user-directed, 370:4619

The dashboard closes with Get Help and the ten availability screens had no support route at all, which is the section where a provider is most likely to be stuck. The same link, the same icon and the same note now close screens 10 to 19, as the last thing in the content column on each, so it sits in one place across all nineteen. It is inert here as it is on the dashboard, and it is listed with the other inert controls.

Call-to-action text and section headings are Title Case user-directed, standing convention

Every button, button-styled link and action link across the set reads in Title Case, and so does every section heading that is not a full sentence: Book a Session, Add Time Off, Clear All, View Open Slots, Client Details, Mark Attendance, Scheduled Time Off, Common Reasons. Ninety strings changed, all of them case only, no wording touched. Sentences stay sentence case, and so do field labels, option labels, badge words, legend keys, message subject lines and the empty-state copy, so a heading and a value never read the same way. Hyphenated compounds are treated as one word, which is why Confirm No-show does not become Confirm No-Show. Same convention as the UCM-003 billing prototype.

The appointments filter is an inline panel, not a popover

On screens 1 and 5 the appointments list sits inside the accordion, which opens by growing a grid track with its inner wrapper clipping overflow, so a popover hanging off the Filter button would be cut off at the card edge. The panel opens in normal flow under the list head instead, which also means it needs no outside-click handling and no focus trap. Screen 6 uses the same component for consistency even though it has no accordion around it. Session type and status are the two facets the rows actually carry, so nothing here filters on a field the sample data does not have.

On screens 3 and 4 the filter suspends the add drawer rather than stacking on it

Those two screens ship with the add drawer already open, and two panels cannot share the right edge. Opening the filter slides the add drawer back off the edge and makes it inert; closing the filter brings it back with every field exactly as it was left, and focus returns to the Filter button. Nothing in the add drawer is reset by the trip. Screen 2's Time period select is deliberately left out of the filter drawer on these two screens: the toolbar there is static by design, so a control whose only job is to move the calendar would have been the one dead thing in a working panel. Say the word if the toolbar should be live on 3 and 4 as well and the select comes back with it.

The calendar's session details open in place, not on another screen user-directed, 370:2394 and 370:1962 and 392:555

Directed by Jaspal and matched to the board: frames 370:2394 and 370:1962 both draw the details panel sitting beside the calendar, and Epic 2 392:555 says appointment details show in a side drawer with cancel, reschedule, no show and confirmed actions. Screen 2 now carries that drawer itself. All seven cards open it, each with its own client, and the two cards that used to navigate to screens 6 and 7 stay on the page instead. The drawer, the no-show modal and the attended confirmation are the same components as screens 6 to 9. The appointment rows on screens 1, 5 and 6 now do the same thing, so a session opens the same way on every surface that lists one.

Closing notifications on screen 5 no longer leaves the page consequence of the row change

Screen 5 is the dashboard with the notifications drawer over it, and that drawer has a scrim, so until now nothing on the dashboard underneath it could be clicked at all. With rows opening the drawer in place, the scrim and the X now dismiss notifications where they are instead of navigating to screen 1, which is what makes the rows underneath reachable. The bell in the top bar brings notifications back, and the Dashboard tab is still the way to the plain dashboard screen. Say the word if closing should go back to being a page hop.

The four attendance actions show on past rows too

The drawer carries Attended, Cancel, Reschedule and No-show whichever row opened it, including the Earlier group, where a session is already marked complete, cancelled or a no-show. The board draws one set of actions and says nothing about which of them survive on a closed session, so the set is left whole rather than guessed at. Tell me which actions should drop on which status and it is a small change.

The two weeks either side of Mar 16 are invented sample data

The board only ever drew one week. Making the arrows work needs somewhere to arrow to, so Mar 9 to 15 and Mar 23 to 29 were written to sit either side of it: the same published weekday hours (8:30 to 12:00 and 1:00 to 5:00), the same seven clients, and seven sessions between them, three in the earlier week and four in the later one, plus one block of scheduled time off on Thu Mar 27. Case numbers keep the existing series running in date order, so nothing collides with the numbers already published on screens 6 and 7. The loaded range is therefore Mar 9 to Mar 29, and the arrows grey out at both ends rather than inventing more. Say the word on the shape of a plausible week and it is a few lines to change.

Time period is a range, so This month opens Month view 392:539

The note lists this week, next week, this month and custom. This week and next week name a week, which the week grid already draws, so those two move the grid. This month names a month, and a month has no honest representation on a seven-day grid, so it switches the view instead. Custom opens the inline picker the note asks for and jumps to the week that holds the date chosen. If Time period is meant to filter the list of sessions rather than move the calendar, that is a different control and worth saying so.

Month view drops the days the sample does not cover

March 2025 is drawn on its real weekdays, six rows of seven, Feb 23 to Apr 5. Only Mar 9 to 29 carry sample data, so the rest of the grid is drawn but inert rather than opening an empty day. The alternative was to invent five more weeks of sessions to fill the month, which would have added sample data nobody asked to review. A line under the grid states the range.

Day view opens on the first day of the week that has anything on it

Switching to Day view from the current week opens today, Mar 17. From another week there is no today to open, so it opens the first day of that week carrying published hours or a session, which is the Monday. Opening the Sunday would have shown an empty column and read as a broken view.

Contact details for five of the seven clients are invented

Screens 6 and 7 only ever published a phone number, email, location, time zone, language and authorisation date for Ella Zaman and Tiffanee Richter. The calendar drawer needs the same block for every card, so those fields were invented for Reed Wasson, Sarah Deng, Vance Pearl, Marcus Bell and Priya Raman, in the same shape as the two that exist. Case numbers and session times were not invented: they match screen 6 row for row, which is why Vance Pearl's case stays on the older 11798xx number rather than joining the 11804xx series.

Two-tab against three-tab navigation, built as three 345:1845 against 370:2394

Frames 172:144 and 345:1845 draw two tabs, Dashboard and Calendar. Frames 370:2394, 370:1962, 47:5798 and 47:5344 draw three, adding Appointments. The board contradicts itself and one of the two is stale. Three tabs is the built default across all nine screens, because the Appointments tab is the only route to a real screen in the set and a two-tab dashboard would strand it. Screens 1 and 5 gained the third tab to match. Say the word and the whole set drops back to two.

The no-show modal layout is invented 370:4628 and 392:551

No board frame exists for it. Built as a narrow CDS modal: the session line, a tally of previous no-shows, three statements of what happens next (the slot is released, a missed first appointment closes the case, billing is possible if the criteria are met), then Back and Confirm No-show, then a success face. The counts are sample data.

The yellow reschedule mark is orange-350 392:559

CDS publishes no yellow at all. The token file carries neutral, primary, green, orange, red and one focus blue. The reschedule mark takes Orange/orange-350, the warmest CDS step that still clears 3:1 on white, and no-show takes Neutral/neutral-350 as the note asks. If a true yellow is wanted it needs a new token raised with the design-system team.

Orange means one thing: a session on hold 244:797 and 392:547

The board legend said green is available and orange is blocked, while Epic 2 said green is booked and orange is hold. Both cannot own green. Resolution: the surface layer carries availability (green wash is a bookable window, a grey diagonal hatch is time off), the card layer carries status (a green rule is booked, an orange rule is hold), and appointment-type tags carry no status colour at all. Individual, Couple and Family are neutral outline chips with a type glyph, so a family session can never read as blocked time.

Notification type is an icon and a word, not a coloured edge 345:1845

The board coded each notification's type with a 4px coloured left edge, which is meaning carried by colour alone. Replaced with a tinted type icon plus the type in text: Booking request, Reminder, Cancelled. Same information, readable without colour vision.

The empty state on screen 6 is rescoped, not verbatim 370:2394

The board puts "No upcoming meetings / You don't appear to have any upcoming meetings" directly under a populated list, which contradicts what is on screen. It now reads "Nothing scheduled after March 21 / Your calendar is clear beyond next week." with the same Schedule Meeting action. Revert to the verbatim copy if the empty state is meant to be the whole-page state instead.

"Late cancellation, greater than 24 hours" is kept verbatim and reads backwards 370:4672

A late cancellation is normally one given with less than 24 hours' notice. The sticky says greater than. Rendered as written rather than corrected. Please confirm the intent.

The timezone mini-calculator comes from an unattributed sticky 370:4715

The note asking for the field to become Client timezone plus a live provider-time equivalent carries no author on the board node. It is built as written: the label is Client timezone, and a line below states the equivalent ("2:00 pm in the client's timezone is 11:00 am in yours, Vancouver, Pacific time"), recalculating on any change. Confirm the note is yours before it counts as a directive.

Confidential notes: flagged, not designed 244:843

Where confidential session notes are stored is unresolved, so no storage control, warning copy or policy statement was invented. The Notes field ships as the board drew it. Once the answer lands it probably needs either helper text naming the system of record or a visibility control. Worth answering before either is designed.

Session details live in one shared drawer 370:4739 and 370:4758

Both stickies sit ambiguously between the Appointments frame and the Calendar frame. The panel they edit exists on both, so they were applied once to the shared drawer component and therefore land on screens 6, 7, 8 and 9 together. Client Details gained phone with a leave-a-message flag, email, location, time zone, preferred language and the authorisation date; Create Note, More Info and Join Video Call are gone.

The collapsed rail is a local extension, not a CDS component

CDS models one side navigation at a single 256px width with no icon-only variant. The shell here runs 240px open and a 72px rail closed, remembers the choice, and restores it before the page paints so a closed rail never flashes open. Below 900px the nav is already a horizontal bar, so the toggle hides and the labels come back.

Sample dates and names were corrected where the board contradicted itself

March 17, 2025 is a Monday, not a Tuesday, and a week grid has to put a date in a real column, so the whole set now says Monday. Case 1179884 carried two different client names across its no-show and its rebooked session; it is Vance Pearl throughout. The calendar screens sit on the week of Mar 16 to 22, 2025 with the dashboard; the session-detail screens sit on the week of Apr 21, 2025, which is what their own frames show. Every date the calendar draws is on its real 2025 weekday: March 1 is a Saturday, so the month grid starts its first row on Feb 23.

The cancel confirmation is only half answered 392:579

The note reads "Show cancel confirmation on calendar. Need to think about how to also show a new booked session in same slot." The first half is built: the success state says the session now reads as cancelled and the slot is open again. The second half, how a re-booked session in the freed slot should look, is an open design question the note itself raises, so nothing was invented for it. It needs an answer before the calendar card states are locked.

Two action labels were named rather than copied 392:555

The drawer's primary save action is named for what it does on each tab, Book Session on the Session tab and Save Time Off on the Time Off tab, rather than one Save across both. And the Epic 2 note listing "cancel, reschedule, no show, confirmed actions" is built as Attended, because the provider is recording what happened, not confirming a booking. Both are one-word reversals if you would rather have the board's wording.

Two deviations worth raising with the design-system team

Field, textarea and radio-pill borders run at neutral-350 rather than the CDS-bound neutral-200, because neutral-200 on white is 1.98:1 and a control boundary needs 3:1. Card radius stays at radius-small (8) rather than the CDS Card binding of radius-default (16), matching screen 1 and the billing prototype. Both are the same deviations already recorded on UCM-003.

My Availability: eleven board states built as ten screens 172:1695 and 172:2430

The box holds ten frames, but frame 172:1695 renders two screens stacked, so there are eleven states to build. Frames 172:1695 and 172:2430 are the same page with a panel and then a panel on top of that panel, and both crits against them (239:303 and 239:507) ask for one surface with labelled sections instead. Merging them is the resolution, not a shortcut, and your 317:392 permits it in as many words. Ten files cover all eleven states.

The nine ambiguous stickies, and where each one landed

Nine stickies sat between two frames on the board and were captured under both. 316:382 "we need to decide on color scheme" and 242:232 "the create card competes" both went to the schedule list (172:1503), where the coloured rules and the dashed card actually are. 317:399 "edit pencil on each card" went to the wizard step 1 cards (172:2692), beside the crit it answers. 239:303 "More options is vague" went to the schedule panel (172:1695), the only frame carrying that button. 244:429 "the weekly cap may never bite" went to Capacity and Pacing (172:3458), where the two caps are. 317:458 "remove logs" and 239:537 "a Logs section in the setup form" both went to Date-Specific (172:2949), the only frame with a Logs block. 244:508 "a saved draft seems to disappear" and 317:440 "yep. Need to add that" went to the schedule list (172:4184), because the missing thing, a draft state on the list, lives there rather than on the preview step. In every case the sticky's own words named an element that exists on exactly one of the two candidates.

Client or member: one word is still unsettled 244:531, answered "Members" at 317:444

This needs a decision. Crit 244:531 asks for one word for the person being booked, and you answered "Members" on the My Availability box. But the Home v2 directive 370:4684 and 370:4680 says client throughout the design, and all nine Home screens already read that way. Honouring "Members" here alone would create exactly the inconsistency the crit is about, so this section stays on client and the conflict is raised rather than settled. Switching to member is a rename across all nineteen screens; say the word and it is one pass.

A one-item tab bar is dropped

Every My Availability frame draws a single tab reading "My Availability" directly under an H1 reading "My Availability". A tab bar with one tab offers no navigation and repeats the title, so it is out. The Home tabs stay because they carry three real destinations. Connect Calendar, which the board draws on six of the ten frames and not the other four, is on all ten for consistency, and is inert.

Two board figures were corrected against the board's own screens

Active Days Per Week reads 5, not the board's 3: the two schedules on the same screen cover Monday to Friday. That correction now runs across the dashboard too, so screens 1, 5, 10, 11 and 19 all read 5. And the preview step's weekly summary marks Thursday available, where the board marked it Unavailable, because the Weekly Hours screen inside frame 172:1695 shows Thursday switched on with hours. In both cases the board contradicts itself on the same screen; tell me which side is right and it is a one-line change either way.

Dates are rebased onto March 2025, the set's own week

The board drew June 2026 on the Calendar View tab, May 2026 on the preview and a May 20, 2026 blocked time. This section runs on March 2025 with the other nine screens, on real weekdays: the Calendar View day panel opens on Thursday, March 20 and the blocked time is Thursday, March 20, 12:00 to 2:00 pm for training, which is the same block screen 3 already publishes, with the same two clashing sessions.

Schedules are named, and one of them was given hours that clash

The board's "Schedule 1" and "Schedule 2" are Weekday hours (Mon to Fri) and Short-notice hours (Mon, Wed, Fri), continuing the naming screen 3 already publishes. Schedule 2 is given 3:00 pm to 7:00 pm so that it genuinely overlaps Schedule 1 and the warning crit 242:239 asks for has something real to describe. A third schedule, Spring hours (Mon to Fri), exists as a draft so the Save as Draft loop closes on a real card. All three sets of hours are sample data.

One switch per day, rather than a Make Available button on some days

The board's weekly hours screen turns a day on with a Make Available button and off with nothing, while the schedule panel uses a toggle. One control on all seven days is easier to learn and easier to reverse. The state is always a word beside the switch, never the track colour alone.

Every wizard step is a link

The board greys the steps ahead of the current one. Here all five are links in both directions, because a five-step flow that can only be walked forwards cannot be reviewed. Continue on step 1 is still gated on choosing a session type, so the one real rule the board states is kept.

Booking page options ships as drawn, with the question attached 242:320

In this model WPO staff book on a client's behalf, so it is not clear a public booking page exists at all, and a slug like /new-meeting would mean nothing to a provider. Nothing was invented and nothing was quietly deleted: the section carries the board's fields and a note saying it needs confirming before it is designed further.

One number to reconcile between the two sections

The Home calendar draws the published bookable window as 8:30 am to 5:00 pm; this section publishes Schedule 1 as 9:00 am to 5:00 pm, which is what the My Availability board frames say. They should be the same number. The board is the source for 9:00, so that is what these ten screens use; the calendar band is worth correcting to match.

Preview on the schedule panel opens in place, and shows that schedule judgement call, screen 11

The panel's Preview button used to open the wizard's step 5, which previews Spring hours: the schedule the wizard is building, not the one the panel is editing. Two ways out of that. Either step 5 learns to preview whichever schedule sent a provider to it, which means carrying a schedule through the flow in a prototype that stores nothing, or the panel previews its own schedule where it stands. The second is built: Preview opens a week of Weekday hours (Mon to Fri) at the foot of the panel, with the Thursday time off named, and step 5 stays what it is, the last step of creating a schedule. It also matches the rule the rest of the set follows, that a record's own detail opens in place rather than on a screen built for one fixed record.

The board's breadcrumb is dropped drawn on the My Availability frames

The frames draw "Provider Platform > My Schedule" above the page title. It is out, for the same reason the Home screens have no breadcrumb: the left rail already says where you are, the trail is two levels deep with the first level being the product itself, and My Schedule is not what the section is called anywhere else. Recorded here because it was dropped without a note the first time round. Say the word and it comes back on all ten.

The wizard step rail is one row at every width screens 12 to 18

It used to wrap, and on the Calendar View tab, where the column gives up the width of the day panel, step 5 dropped onto a second line with a connector left dangling off the end of the first. The rail now never wraps. The connectors are the only elastic part, so they take the squeeze at 24px down to 8px before a label is touched, and the rail measures itself rather than the window: once even the squeezed row would not fit, the step names step aside and the numbers carry the rail, with the current step keeping its name. The step chips lost 4px of padding and their circles went from 28 to 24 to buy the room. All seven wizard screens share it, so the rail behaves the same way on each at the same width.

The wizard rail and the page under it say the same words screens 12 to 18

A step used to be called one thing in the rail and another on the page it opened: rail Date and Time against heading Set Your Available Hours, rail Capacity and Pacing against Capacity Limits, rail Time Blocking against Block Time, and step 5 had no heading at all. Each page now opens with its rail label verbatim as its heading, the schedule being built and the step number under it, and its browser tab title matches. Continue names the step it reaches by the same name. The rail is also a nav with its own label now, rather than a bare list carrying one.

A day that gives up an hour is not a day that is gone

March 20 is available 9:00 to 5:00 with 12:00 to 2:00 taken as time off. Both month grids painted it fully peach, the same fill a wholly unavailable day would take, so six of its seven bookable hours read as lost. It keeps the green available wash and takes an orange band along its foot, the cell states both facts in words, and the legend carries the partial state with its own key drawn the same way. Full peach is reserved for a day with nothing bookable left; no day in the March sample is one, so no legend key claims otherwise.

The three dialogs now behave like dialogs screens 1, 5, 6, 8 and 9

The reschedule, cancel and no-show modals all declared aria-modal and shipped no behaviour to match: focus stayed outside them, Tab walked through the two dozen controls of the page behind the scrim, Escape did nothing and the page behind kept scrolling. One shared script now gives all three the same contract. Focus moves in on open, Tab and Shift-Tab stay inside, the background is inert and held still, Escape closes, and focus returns to the control that opened it. It opens and closes nothing on its own except on Escape, so each screen keeps its own handlers. Screens 8 and 9 ship with their dialog open, which is a built page state rather than an action, so there is no trigger to return to and none is invented.

One drawer chrome, one set of drawer contracts

The same drawer component carried three different ARIA contracts across the set and two different headers. Every drawer is now role="dialog" with aria-labelledby pointing at its own title and aria-modal stating what is actually true of it, which is false everywhere except the day panel at a width where it covers the page. And the day panel's brand-purple header is gone: every drawer in both sections uses the white one, because two chromes for one component was a difference that carried no meaning. Equivalent footer actions read alike, so the day panel saves with Save Changes as the schedule panel does.

Design rationale is in this document, not in the served markup

The screens carried about a hundred and forty HTML comments explaining why each decision was made, quoting board stickies and citing node ids. View-source on a public URL is a publication channel, so all of them moved to the internal build notes and the screens kept structural section markers and a neutral sample-data header. Nothing was summarised or dropped on the way.

Left For Production

Known and deliberately out of scope for a desktop design review. Recorded so none of them is discovered as a surprise later.

Phone widths, 320 to 414

The set is built for review on a desktop screen and holds together down to about 900. Below roughly 480 the top bar's title, Connect Calendar button, notification bell and user block share one row and crowd. The reflow is a production task, not a review one, and it does not change any decision on this page.

The typeface ships as OTF

HN for TELUS is loaded from the OpenType files as licensed. Converting to woff2 would cut the download substantially and is a build-pipeline task for the real product rather than something to change in a prototype.

Motion preferences and layout transitions

The panels slide and the chevrons rotate on a fixed 150 to 200ms curve, with no prefers-reduced-motion branch, and content that steps aside for an opening panel jumps rather than eases. Both are production polish and neither affects what is being reviewed.

Controls That Do Nothing

Everything on this list is drawn but inert. If a control is not named here, it works.

Shell, on every screen

Performance and Preferences in the left navigation, and the user block in the top bar. Home and My Availability both go to a built screen from every one of the nineteen. The Connect Calendar button in the My Availability top bar is drawn and inert.

My Availability screens 10 to 19

Duplicate and Delete on a schedule card are drawn and inert, as is the pencil beside a session type, which would open Preferences: that section is not built yet. The Get Help link at the foot of every one of these ten screens is inert, as it is on the dashboard. The Save Changes button on the schedule panel closes the panel and confirms, but nothing is stored. Everything else works: the card chevrons, all three stat links, the day switches, Add Time Slot and its remove buttons, Copy To Other Days and its picker, the session-type cards and the gate on step 1, the three Date and Time tabs, the recurrence and time-off-type choices with the panels they reveal, Add These Hours and its Dates You Have Added list, the calendar day panel with its per-day hours and read-out, the schedule panel's Preview, the pacing switches, Add Time Off and Remove, and the preview day read-out.

Dashboard screens 1 and 5

The welcome card's Set Availability, Connect Calendar and Review Your Appointment Types; the Messages titles and the Get Help link. All three stat cards now go somewhere: the third one, Active Days Per Week, reaches the weekly hours editor, which is the same destination the My Availability figure uses.

Calendar screens 3, 4, 7, 8 and 9

The calendar toolbar is live on screen 2 only. On screens 3, 4, 7, 8 and 9 the same toolbar is drawn but static: Today, Day, Week, Month and the two arrows do nothing there, because each of those screens is built around one fixed drawer or modal state and stepping the grid underneath it would leave the panel describing a session that is no longer on screen. The Filter button is the exception: it works everywhere it is drawn. On screens 3 and 4 the session cards still do not open the details drawer, because those two screens already have the add drawer open and only one panel holds the right edge. On screen 2 the session drawer's Reschedule and Cancel actions go to screens 8 and 9, which carry Tiffanee Richter's session whichever card was open.

Add drawer screens 3 and 4

On the Time Off tab: Add Time Off, Remove and Save Time Off. On the Session tab: Book Session. The appointment-type accordion, the duration and end-time readout and the client-timezone equivalence line are all live.

Appointments lists screens 1, 5 and 6

Nothing on these lists is inert any more. Every row opens the session details drawer for its own client, and the Filter button, the four attendance actions, the no-show modal and Schedule New Appointment all work. The one limit is the same one screen 2 has: the drawer's Reschedule and Cancel actions go to screens 8 and 9, which carry Tiffanee Richter's session whichever row was open.