FrameShare — new /fs/ app: changelog & release smoke-test plan
Everything the FS rework changed, grouped by functionality, with a manual smoke-test checklist per area. App-level testing only — walk the flows as a real user, no code/unit tests.
docker compose logs django), real SES on the instance ·
role needs a specific login (therapist vs. client) ·
new added since the last handover round (2026-07-11 or later).
1. App shell & navigation
A complete parallel UI at /fs/: thin Django templates + Alpine.js + JSON endpoints. One visual language — white cards, warm taupe background, lavender accents, Plus Jakarta Sans, no emojis.
What changed
- Sidebar with active-page pill, real logo, footer (profile, settings, Question?, Classic app, log out) pinned to the viewport bottom.
- Red attention badge on the sidebar Dashboard item (running sessions + worth-a-look + to-review count) visible on every page.
- Sidebar Calendar item deep-links to the sessions calendar tab; detail pages have referrer-aware back links.
- Profile + change-password pages; favicon set matches the legacy pages; staff-only "Internal" link.
- Internal staff pages got a slim "Back" bar to /fs/dashboard/ instead of the old app top nav.
- new Dashboard nav item is now visible for clients too (desktop sidebar + mobile tab bar); badge stays therapist-only.
Smoke test
- therapist Log in, walk every sidebar item — each page shows a loading skeleton then content, active pill follows (including on child pages like a client file).
- Sidebar badge count matches the dashboard "Worth a look" + running-session count, on every page.
- Profile page: edit name/timezone, save; change password works and the new password logs in.
- "Question?" feedback popup submits (staff receives the mail email).
- Old
/app/pages still load and work in parallel.
2. Mobile (phones)
Full functionality below 768px through the same responsive templates — no separate mobile pages. iPad portrait and up keep the desktop UI.
What changed
- Bottom tab bar: Dashboard (with badge), Calendar, Sessions, Clients, More — client portal shows Dashboard, My sessions, My gallery, More.
- "More" opens a bottom sheet with the secondary nav; all modals slide up as bottom sheets.
- Tables render as stacked cards; the calendar becomes a week agenda list (drag-reschedule disabled — use Edit).
Smoke test
- Open every page at phone width (or a real phone); walk all bottom tabs.
- Open a create/edit modal — it slides up from the bottom and is fully usable.
- Sessions calendar shows the week agenda; tapping an entry opens the detail modal.
- Sessions/clients tables appear as stacked cards; row taps navigate.
- iPad portrait still gets the desktop sidebar layout.
3. Therapist dashboard /fs/dashboard/
What changed
- Greeting + live clock (user's timezone) + one-sentence day summary.
- Quick actions: Quick session (inline setup modal + share link), Schedule a session, Add a client.
- Upcoming card: all of today (Now / Upcoming / Past states) + next 7 days; type and canvas-mode pills, participants, Copy invite link, Join.
- Mini month calendar with dots on session days; new dates deep-link to the sessions calendar opened on that day.
- "Worth a look": recent drawing activity on open sessions (homework) and open sessions idle >14 days with Review / Close; red count badge here and in the sidebar.
- new Drawing activity is flagged regardless of the session's scheduled time (previously time-window dependent).
- "Recently looked at": last 5 visited files/sessions (stored per browser in localStorage).
Smoke test
- Greeting/summary sentence matches the day's real state (session count, activity, to-review).
- Quick session button → setup modal → share link works in an incognito window.
- Schedule / Add-client quick actions open the right modals (via
?new=…). - Upcoming: a session running now shows the green "Now" pill and the red counter; Join and Copy invite link work.
- Mini calendar: dots on the right days; clicking a dotted day opens the sessions calendar on that date; month navigation works.
- "Worth a look": draw in an open session as a client → it appears (same day, any scheduled time); an open session idle >14 days shows Review/Close, and Close works from here.
- "Recently looked at" fills after visiting client files / session pages and links back to them.
4. Client dashboard new 92cca437
Clients now get their own dashboard at the same URL — the therapist layout minus quick actions and "Worth a look".
What changed
/fs/dashboard/role-branches: clients see greeting + clock, Upcoming (Join button only — no invite links), the mini month calendar (day cells display-only), and "Recently looked at".- Client session payload gained safe extra fields (type, canvas mode, length) so Now/Upcoming/Past states work; no therapist data exposed.
- Visiting a session in the portal now records it for "Recently looked at".
Smoke test
- client Log in as a client → Dashboard appears in the sidebar/tab bar and loads.
- Upcoming lists only that client's open scheduled sessions (today + 7 days); a session running now shows "Now"; Join lands in the whiteboard.
- No quick actions, no "Worth a look", no invite-link copying anywhere on the page.
- Mini calendar dots match the client's own sessions; day cells are not links; month navigation works.
- Open a couple of sessions from "My sessions", return → they show under "Recently looked at".
- No red badge for clients (sidebar or tab bar).
5. Sessions page (list + calendar) /fs/sessions/
What changed
- Calendar (week / month / year, opens at 8am with internal scroll) and a flat list under pill tabs; one search box (session, client, group names) drives both.
- new Client filter dropdown left of the search — "All clients" or one client; narrows list and calendar to sessions where that client is a direct participant. Header stays on one row on desktop.
- List: running sessions first, then upcoming, then past/closed; canvas thumbnail in the status column; unclosed-session warning; direct row navigation to the session page.
- Calendar: drag-to-reschedule open scheduled sessions (resize in week view = planned length), type pills, tag pills on tiles, over-state colors; click a free slot → create modal prefilled with that time.
- Detail modal (calendar/list click): slim preview with badges, share/invite links with copy buttons and "Link used" pills, Go to session page, Join session, Close / Delete (Delete offered on future sessions).
- "Open whiteboard" renamed to "Join session" everywhere.
Smoke test
- Switch List/Calendar tabs; calendar week/month/year all render; clicking an empty slot opens the create modal with that time prefilled.
- Search filters both the list and the calendar (try a session name, a client name, a group name).
- new Client dropdown: pick a client → list and calendar show only their sessions; combine with search and tag filter; "No sessions match your filters" empty state; reset to "All clients" restores everything.
- new Header layout: title, tabs, dropdown, search and both buttons sit on ONE row at desktop width.
- Drag an open scheduled session to another slot, reload — new time stuck. Quick + closed sessions can't be dragged.
- Detail modal: invite links copy and work, "Link used" pill appears after a link was used, "Go to session page" navigates, Join session opens the whiteboard.
- Future session's detail modal shows Delete; deleting removes it from calendar + list.
- List ordering: a running session sits on top; closed/past sink; unclosed-session warning shows where expected.
6. Creating sessions & email invites
What changed
- Quick session: anonymous share link, starts immediately; optional name + description; canvas mode + tools setup like scheduled ones.
- Scheduled session: participants (individual clients and/or groups — a group expands into members AND stays stored as a reference), optional date/time, planned length (min 2 minutes), drawing/collage mode, allowed-tools picker (hidden in collage mode), description.
- Weekly recurrence: "Repeat every week" + count (default 10, 2–52) creates N independent sessions, same weekday/time, DST-safe; requires a date.
- Email invites email: on scheduling (tick box; personal join link per participant; recurring series = ONE mail per person listing all dates), on reschedule (only when the time actually changed), on continue (mail carries the NEW session's link). Amber warning names participants without an email. On-platform clients additionally get a "log in to see your calendar" paragraph with login + password-reset links.
- new The session description is included in invite emails.
Smoke test
- Quick session with name + description → share link joins anonymously in incognito; tools restriction applies on the whiteboard.
- Scheduled session with one client + one group → appears on calendar/list; detail modal shows the group reference and every member.
- Session without a date ("clients can join any time") is created and joinable.
- Collage mode hides the tools picker; drawing mode shows it; 2-minute length accepted (create and edit).
- Recurring: repeat weekly ×N → N entries on consecutive weeks at the same time; editing/deleting one leaves the others; repeat without a date errors.
- email Schedule with invites ticked: each participant with an email gets date + personal link (link works); participant without email is listed in the warning; recurring sends ONE mail per person with all dates; the description text appears in the mail.
- email Reschedule with the tick box: mail only when the time really changed. Continue with the tick box: mail links the NEW session.
- email An already-registered participant's mail contains the log-in paragraph; an unregistered one's doesn't.
7. Session page /fs/sessions/<id>/
What changed
- Header: badges, description shown prominently new, continuation links (continued from / continued in), Edit (name/time/length), Join session, Close, Cancel, Delete, Continue.
- new "Replay session" button opens the replay player in a new tab (see section 8).
- new Card order: Setup (canvas mode + allowed tools by name) now sits directly above Artwork near the top.
- Participants with per-person invite links, used-markers and links to their treatment files; invite links stay valid until close.
- Artwork thumbnails per canvas with PNG download S3.
- Activity: "Compute analytics" (duration/strokes/participants from stroke data, no closing needed) + deep analytics when processed — color/tool donuts, per-minute activity bars, mood timeline, canvas heatmap, FEATS tiles — plus "Download as image".
- Chat log (loaded on demand); editable session notes (key/value rows); missing-final-image warning banner; Developer CSV card (Developer group only).
- "Continue this session" is hidden while the session is open (close first) new.
Smoke test
- Open a session with drawing history and click through every card top-to-bottom; Setup card is above Artwork; description shows under the header.
- Edit name/time/length → saved and reflected on calendar/list.
- Participants: each person has their own invite link; copy works; "Link used" pill after use; name links to their treatment file.
- S3 Artwork thumbnails render; Download PNG delivers the image.
- "Compute analytics" fills duration/strokes/participants; deep analytics tiles (donuts, activity bars, mood, heatmap, FEATS) render for a processed session; "Download as image" saves the card.
- Chat log loads on demand; session notes: add, edit and delete key/value rows and they persist.
- Open session: no "Continue this session" button; after closing it appears.
- Developer CSV card only for Developer-group members; CSV downloads.
8. Session replay player new 6c024d2b · c7a6010e
Watch a session's canvas being created stroke by stroke — therapist/superuser only, read-only.
What changed
- "Replay session" on the session page opens
/whiteboard/replay/<id>in the React app (new tab). - Full chronological event log endpoint (therapist/superuser only — clients get 403); drawing sessions replay through the real canvas, collage sessions (incl. quick) rebuild objects up to the playhead.
- Controls: play/pause, seek slider, elapsed/total time, stroke counter, 1/2/5/10× speed; long idle gaps compressed (max 2s between strokes).
- Read-only overlay with drag-to-pan and wheel-zoom; auto-fits the whole canvas; canvas selector for multi-canvas sessions.
- The dark full-screen dimming during "Restoring Canvas…" was removed in replay (progress box stays); the normal whiteboard is unchanged.
Smoke test
- Drawing session with history → Replay opens, canvas auto-fits, Play animates strokes in order at believable pacing.
- Pause, seek forward, seek BACKWARD (rebuilds), and play to the end (player stops); speed buttons change pace.
- No dark full-screen overlay during load or after seeking back — only the white progress box.
- Collage / quick session replay: images and shapes appear/move/disappear correctly while scrubbing both directions.
- Drag pans, mouse wheel zooms; drawing is impossible (read-only); multi-canvas session shows the canvas switcher and each canvas replays.
- Session with no drawing activity shows the friendly empty message; no "Not Connected" error anywhere.
- client A client (or another therapist) calling the replay URL/API is rejected.
9. Session lifecycle
What changed
- Sessions never auto-close: joinable before the scheduled time and long after; only "Closed" is shown as a status.
- Close = manual freeze: final image saved, all links stop working. Cancel ("never happened", before start only): links dead, no final image, stays visible grayed. Delete (archive): removes from calendar + list.
- Continue (copy & continue): popup with editable name + optional new date; the new session seeds its canvas from the parent's final image; continued-from/in links walk the chain.
- Rehydration: sessions survive long idle (checkpoint metadata persisted; canvas restored after Redis expiry). Checkpointer fallback: with no therapist present, the lowest connected user bakes checkpoints (homework keeps saving).
Smoke test
- Join an old open session via its invite link days after the scheduled time — works.
- Close a session → invite link now rejected; final image on the session page.
- Cancel a future session → links dead, shown grayed, no final image.
- S3 Draw → close → Continue → the parent's image is the new session's background, drawing on top survives the first checkpoint; parent untouched; chain links navigate both ways.
- S3 Rehydration: rejoin a session idle >24h (or after a Redis flush) — drawing intact.
- S3 Homework: client joins alone via invite link, draws, leaves — drawing persists and the therapist dashboard flags the activity.
10. Clients, groups & treatment files /fs/clients/
What changed
- Clients page: Individual | Groups tabs, search, dense tables with "On platform"/"Not registered" state, last-login, Last session, Primary focus; row click opens the file.
- Add/edit/archive client (first+last name required, email optional); client groups (create/edit/delete with member checkboxes, group notes) usable in scheduling.
- Bulk import from Excel: download generated .xlsx template → fill → upload → preview (created/skipped with row + reason, duplicate emails skipped) → import. CSV accepted too; wrong files get clear errors.
- Treatment files (client + group): profile card + edit, add/edit/delete notes, merged session+note timeline with year separators and artwork thumbnails S3, per-session chat expand, attachments (≤25MB up/download/delete) S3, "Open details" → session page.
- Portal invite: "Not yet a FrameShare user" card on the client file (until first login) with "Send access invite" email; button grayed + hint without an email. (The old table button is gone.)
Smoke test
- Add, edit and archive a client; create/edit/delete a group and use it when scheduling.
- Bulk import: template with umlauts, one missing name, one duplicate email → preview counts match → import → clients appear; a wrong file type errors clearly.
- Client file: edit profile, notes CRUD, timeline shows sessions + notes chronologically with badges and artwork strips S3; chat expands; attachments upload/download/delete S3.
- email "Send access invite" → client sets a password → logs in with email; card disappears after first login; table shows "On platform".
- Group file: group notes are about the unit; member links open their files.
11. Client portal client login
What changed
- Clients log in with their email and get a reduced app: Dashboard new, My sessions, My gallery — nothing else.
- My sessions: own sessions with Join links; session page shows date/therapist, artwork (no downloads) and chat — no notes, setup, analytics, invite links or actions.
- My gallery S3: artwork of their own sessions only.
Smoke test
- Login with the EMAIL address works and lands in the portal.
- Nav shows only Dashboard, My sessions, My gallery (+ profile/logout); no therapist items.
- Portal session page: artwork + chat visible; no notes/analytics/invite links/edit buttons anywhere.
- S3 My gallery contains only that client's sessions' images.
- Therapist URLs and APIs are walled off for the client (redirect or 403) — try /fs/clients/, /fs/dashboard/ API, another client's session page, the replay endpoint.
12. Gallery & materials /fs/gallery/ · /fs/materials/
What changed
- Gallery: latest snapshot per session+canvas as cards, search by client/session name, card click → session page. S3
- new Client filter dropdown left of the gallery search — show only one client's artwork; combines with search.
- Materials: My Materials ported — grid + thumbnails, upload with inline validation, delete, sort; feeds the whiteboard collage picker. S3
Smoke test
- S3 Gallery cards render; search narrows by client and by session name; card click lands on the right session page.
- new Pick a client in the dropdown → only their sessions' artwork; combined with search; empty state reads "Nothing matches your filters"; dropdown and search sit on one row.
- S3 Materials: upload an image → appears in the grid AND in the whiteboard collage picker; delete removes it from both; sorting reorders.
13. Tags 7f9ef661 → d52cfb57
What changed
- Therapist labels for clients, groups and sessions: one-row editor on the session page and the file pages, solid colors, managed on a settings page.
- Tag pills on calendar tiles; a tag filter row above the sessions page serves both list and calendar tabs.
- New/Intro/Urgent seeded for new therapists; new clients are auto-tagged "New".
Smoke test
- Create/rename/recolor/delete tags on the settings page.
- Tag a session and a client from their pages; pills render with the chosen color, on the calendar tiles too.
- Tag filter row on the sessions page narrows both tabs; combines with search and the client dropdown.
- New client → automatically carries the "New" tag.
14. Content pages, dialogs & misc
What changed
/fs/news/(announcements/changelog/newsletters merged) and/fs/help/(CMS help sections) — therapist-only.- Styled confirm/alert dialogs replace all browser popups new.
- API-generated URLs (share/invite links) forced to HTTPS on staging/production new.
- Free-user limits removed for /fs/ client/session creation; /fs/ is English-only (decision);
TUTORIALS.mdholds ready-to-paste help texts.
Smoke test
- News and Help pages load with content; not reachable as a client.
- Trigger a destructive action (Close/Delete session) → styled dialog, not a browser popup; Cancel aborts, Confirm executes.
- On staging: every copied share/invite link starts with
https://. - No emojis anywhere; Plus Jakarta Sans loads; favicon shows.
Appendix: full commit list chronological, /fs/ scope + replay
| Hash | Date | Subject |
|---|---|---|
| 1a8819d8 | 2026-07-08 | FS rework phases 0-2: /fs/ app scaffold, ClientGroup + direct session participants, clients page |
| 88e595ac | 2026-07-08 | FS rework phase 3: /fs/sessions/ calendar + list with create/detail modals |
| be3a6389 | 2026-07-08 | FS rework phase 4a: open session lifecycle + close/copy&continue endpoints |
| 72bdb8c6 | 2026-07-08 | FS sessions: "Continued from" link in the session detail modal |
| 6c9a49ad | 2026-07-08 | FS rework phase 4d: on-demand session analytics from the event log |
| 2bbf343c | 2026-07-08 | FS treatment files + session setup options |
| 529d0595 | 2026-07-08 | FS quick sessions: same canvas-mode + tools setup as scheduled sessions |
| 80c9afcb | 2026-07-08 | FS dedicated session page: port of the legacy session detail page |
| 5ce8b428 | 2026-07-08 | FS dashboard: actionable daily summary |
| 6c4f7a9a | 2026-07-08 | FS dashboard: quick-session button opens the same setup modal |
| 56da779b | 2026-07-08 | FS feature parity: edit/cancel sessions, exports, notes editing, gallery, no free-user gates |
| ce4c2402 | 2026-07-08 | FS client portal: email login, opt-in access email, limited client views |
| 95ae73a2 | 2026-07-08 | FS clients: "On platform" state + last-login column |
| f580bfb4 | 2026-07-08 | FS design pass: shell foundation + dashboard reference restyle |
| 0eb7bffe | 2026-07-08 | FS design pass: roll the dashboard language across all pages |
| 977157f3 | 2026-07-08 | FS sessions: back to Calendar|List tabs (stacked was too busy) |
| 8dc599b3 | 2026-07-08 | FS session page: transition on the edit modal (last one missing) |
| b4549a20 | 2026-07-08 | FS session page: Developer Functions card with Activity CSV download |
| 3ba4e6c8 | 2026-07-08 | FS sessions: restructure the session detail modal |
| 79598a58 | 2026-07-08 | FS sessions list: internal scroll matching the calendar height |
| d5b4264e | 2026-07-08 | FS sessions list: day groups (Today/Tomorrow/dates) with striped days |
| 09bc241f | 2026-07-08 | FS sessions list: clearer day bins — white/gray alternating + stronger day dividers |
| 63c0626b | 2026-07-08 | FS sidebar: sticky full-height — user/logout block pinned to viewport bottom |
| 210c4f09 | 2026-07-08 | FS sidebar: real logo (static/logo.png) instead of the F chip |
| e8058a3c | 2026-07-08 | FS: port My Materials to /fs/materials/ |
| 108eb418 | 2026-07-09 | FS treatment files: artwork thumbnails in the timeline |
| aba4ea49 | 2026-07-09 | FS: fix template comment leaking into the session-setup modal |
| c6a2db95 | 2026-07-09 | FS session setup: hide the tools picker in collage mode |
| 9275411d | 2026-07-09 | FS create session: name + description fields, collage disables tools picker |
| 0085289e | 2026-07-09 | FS session page: full analytics visualizations (step 4 item 2) |
| 23e6c463 | 2026-07-09 | FS: treatment-file attachments, 'Continue this session' popup, dashboard session states |
| 2b447f1a | 2026-07-09 | FS dashboard: red count badge for running sessions, added to sidebar sum |
| 5a59ae48 | 2026-07-09 | FS: visible button styles everywhere, session delete, session-page action layout |
| e9b69f00 | 2026-07-09 | FS sessions list: dashboard-style flat table, direct navigation, invite-link picker |
| 52354885 | 2026-07-09 | FS clients table + page headers: row navigation, Not registered, eyebrow labels |
| cbf3e1ab | 2026-07-09 | FS treatment files: single-card timeline with kind column, layout tweaks |
| 19b64942 | 2026-07-09 | FS sidebar: Calendar nav item deep-linking to the sessions calendar tab |
| e21db8cc | 2026-07-09 | FS detail pages: referrer-aware back links |
| 523cc0e8 | 2026-07-09 | FS clients: file-page archive buttons, leaner tables with Last session + Primary focus |
| 8dcae30a | 2026-07-09 | FS session page: legacy-parity gaps (step 4b) + calendar year view |
| 12624104 | 2026-07-09 | FS sessions calendar: drag-to-reschedule, type pills, over-state colors |
| dfa04213 | 2026-07-09 | FS sessions detail modal: slim preview |
| d6d04bd7 | 2026-07-09 | FS shell: logo link, News + Help pages, Question? feedback popup |
| 5cb0d271 | 2026-07-09 | FS base: favicon links (same set as legacy pages) |
| f28fefff | 2026-07-09 | Internal staff pages: replace app top nav with a Back bar |
| 2410fec0 | 2026-07-10 | FS sessions: weekly recurrence, 2-min length, Delete on future entries |
| fb102d93 | 2026-07-10 | FS clients: bulk import from Excel template |
| da0683ab | 2026-07-10 | FS clients: send-access moves to the client file page |
| fc7086f7 | 2026-07-10 | FS sessions: email invites on schedule, reschedule and continue |
| 9a81baf1 | 2026-07-10 | FS docs: feature inventory replaces handoff; push bookkeeping |
| 3c5dbe67 | 2026-07-10 | FS mobile: bottom tab bar, sheet modals, card lists, agenda calendar |
| f41eb1b9 | 2026-07-10 | FS: profile + change password pages, dashboard clock |
| 7f9ef661 | 2026-07-11 | FS tags: therapist labels for clients, groups and sessions + settings page |
| e4974673 | 2026-07-11 | FS tags: calendar tiles show tag pills, filter row serves both tabs |
| b1825738 | 2026-07-13 | FS tags: seed New/Intro/Urgent for new therapists, auto-tag new clients |
| d52cfb57 | 2026-07-13 | FS tags: Done / Manage tags become solid buttons on their own row |
| dc4b1e56 | 2026-07-13 | FS sessions list: canvas thumb in status column, unclosed-session warning, drop Past/Closed pills; defer canvas_data in gallery queries |
| ea127079 | 2026-07-13 | FS dashboard: mini-calendar dates deep-link to sessions calendar on that day |
| 6b6e3327 | 2026-07-13 | FS: styled confirm/alert dialog replaces browser popups |
| f840706f | 2026-07-13 | FS: force HTTPS in API-generated URLs for staging/production |
| 9f0c01b7 | 2026-07-13 | FS: rename "Open whiteboard" to "Join session" |
| af0f6d74 | 2026-07-13 | FS session page: hide "Continue this session" when session is open |
| a9bc7fd0 | 2026-07-13 | FS dashboard: show drawing activity regardless of scheduled time |
| 30df6326 | 2026-07-13 | FS: show description prominently on session page + include in invite emails |
| 6c024d2b | 2026-07-13 | FS: session replay player — watch a session's canvas being created |
| c7a6010e | 2026-07-15 | FS replay: drop the dark full-screen backdrop while restoring canvas |
| 942b1331 | 2026-07-15 | FS session page: move the Setup card above Artwork |
| 92cca437 | 2026-07-15 | FS: client dashboard — therapist layout minus actions and Worth a look |
| 84e1ef80 | 2026-07-15 | FS: client filter dropdown on sessions and gallery pages |
FrameShare






