D is the chosen storyboard, built; A–C below are the candidates it was assembled from. Looping illustrations for a new slot in the Welcome window’s Study tools cell, teaching the timeline that opens under each Sessions row. Each frame is the cell at 800 pt of Welcome content (cell 490 pt, slot 458 pt). The illustration is drawn with the shipped tapestry stylesheet and the component’s own geometry. Words dashed in gold are new copy for the owner, not shipped keys.
Each frame below loads the exact HTML the app builds (WelcomeIllustrationHTML.timeline), extracted from the Swift source with its interpolations filled. Frames play in turn, like the baton in the app; the dark / Edo buttons at the top rebuild them.
Video-editing style timeline of each interview: what happened, when
Video-editing style timeline of each interview: what happened, when
Video-editing style timeline of each interview: what happened, when
Video-editing style timeline of each interview: what happened, when
Video-editing style timeline of each interview: what happened, when
What is shipped CSS and what is liberty. Colours, type, lanes, flags, marks, theme spans, ticks and the popover are session-tapestry.css, badge.css and the tokens, inlined verbatim through WelcomeTimelineCSS.swift (a generated file with a drift test). The timeline is drawn zoomed in, about 2.2 slots wide and never coarser than 2.5 s/px, so the clips carry their speaker codes and the timeline never fits its frame: reading it means swiping.
Open a session’s timeline to see who spoke, how it felt, and where each theme ran.
Teaches that it exists and where it is. A pointer clicks the chevron in the session’s ID cell, the row and slice take the shared tint, then the lanes fill in reading order: speaker clips sweep left to right in their scene colours, section flags drop, sentiment marks grow up or down from the axis, and theme spans draw.
Follow a whole session at a glance — click any moment to open the transcript there.
Teaches the interaction. The pointer runs along the speaker lane: the playhead follows, the nearest timecode lights in accent blue, and each section’s flag raises in full as it passes. It then drops to a mark and clicks; the quote pops up under it, and the pointer rests on the popover, which takes its hover tint.
.bn-tp-playhead, .bn-tp-tick.near, .bn-tp-flag.raised, .bn-tp-bar.sel, .bn-tp-popover:hover.Open a session’s timeline to see who spoke and how it felt — click a mark to read the quote.
Both jobs, one loop. The chevron opens the slice as in A, but the lanes arrive together rather than one by one. The pointer then goes straight to a positive mark and clicks it, and the quote appears. No sweep.
| Call | Options | Lean |
|---|---|---|
| CTA destination | No docs page owns the timeline (grep of docs-src/ for “timeline” is empty). (1) read-transcripts.html, the page about where a click lands; (2) write a short session-timeline.html in the website repo; (3) withhold the CTA, as the Focus slot is stuck on. | (2). A slot whose link lands on a page that does not mention the thing teaches nothing. |
| Position in the pool | After Ingest (what you get back), after Video clips (the other video-first tool), or first. | After Video clips: the clip colours are what was on screen, and the two slots read as one family. |
| Clip colour | Scene colours (a video project) or the neutral greys an audio-only or pre-0.35 project shows. | Scene colours. Greys make the speaker lane read as a disabled control. |
| Renderer | Webview with the shipped session-tapestry.css + tokens inlined, or native SwiftUI. | Webview. As with the Focus slot, a SwiftUI rebuild would fork a second copy of rules the CSS owns. |
| Slot height | All three exceed ingest’s 196. Levers, cheapest first: drop the Sessions row (−28, loses the way in); one theme row is already taken; shorten the sentiment lane’s 41 pt air above and below the axis (a fork from the shipped geometry); draw the popover beside the mark rather than under it (a fork from the shipped component). | Accept the height if C wins. Stacked mode already sizes to the tallest slot, and the spiral’s slot is 81–205 pt, so the illustration will self-scale below its cap there like the others. |
| Theme rows | The app packs up to three; the illustration draws one. | One. Three rows would add 44 pt for no extra lesson. |
| Key | en | Status |
|---|---|---|
desktop.welcome.home.tools.timeline.title | Session timeline | Lift of common:sessions.tapestry.label — already translated in 21 locales, reviewed. Reuse the value, new key (different surface). |
….tools.timeline.text | Video-editing style timeline of each interview: what happened, when | Owner’s line (9 Oct 2026). No em dash, en dash or semicolon, so WelcomeClauseFit has no clause to drop and a narrow cell falls straight to an ellipsis. At 67 characters it is short enough that this should not bite. |
….tools.timeline.link | Read a session | New, owner-written, depends on the CTA call. |
| lane labels, sentiment badge | Sections · Moderator · Participant · Sentiment · Themes · Delight | Shipped: quotes.sections, sessions.speakerPlaceholder.*, sessions.colSentiment, quotes.themes, enums:sentiment.*. Passed in through stringsBlock. |
desktop.welcome.examples.timeline* | section names, two theme names, one quote | New example content, like clipName1–3: the participant’s words and the analysis’s names are content, so they are keys. 7 strings. |