Key · hatched bars: mockup controls · dashed frame: the artefact (what would ship) · hatched block below: commentary
Sessions
ID
Speakers
StartUser journey
Sentiment
Duration
Interviews
Commentary
Hover a session's speaker lane. After the open delay a frame appears: the screen 25% into the participant turn under
the pointer, from the real recording. It steps from turn to turn, it does not scrub. Click still jumps to that moment in
the transcript. The first session is a 38-minute usability session with 45 participant turns and frequent page changes;
the second is an 18-minute Teams call with 7 long turns, where the first minutes are the call and then the share begins.
The defaults, and why
Open after 700 ms, reopen at once within 1 s. A sweep across the lane to reach a sentiment mark should not
flash a picture; a researcher who is reading the frames should not wait for each one. The warm rule is the macOS tooltip's.
Swap after 100 ms of rest. At the fitted zoom a 20-second turn is a sliver a few pixels wide, and swapping on every
crossing would churn images on a fast sweep.
Close grace 300 ms. Crossing from one session's lane to the next keeps the preview armed instead of blinking.
Moderator turns hold the last participant frame. The picture does not change when the moderator speaks (the colour
lab measured this across 25 recordings), so holding is truthful and stops the preview strobing through every exchange.
160 px wide, below the tracks (the owner's call, 13 Oct 2026). Large enough to tell a call from a web page from
a terminal, too small to read text. Below, the section flags stay in view, so the frame and the section name it falls in
read together; it covers the sentiment marks instead, which are not being used while the pointer is on the lane. Above,
it also spilled over the row above when that row was open.
Outline on the source turn. Says which turn the frame came from, which matters while the moderator turns hold.
Frames at colour changes inside a turn (13 Oct 2026)
Each participant turn is split at the colour changes inside it, and each stretch gets a frame: the first at 25% of
the stretch, as before, each later one 2 s after its change (halfway for a stretch under 4 s). A turn with no change
inside it behaves exactly as one frame per turn. While a change frame is showing, a click lands 1 s before the change,
so the researcher hears what led up to the screen they are looking at. Measured on these two sessions, scaled to a
5-hour project: about 430–560 frames, 3–4 MB at 320 px, under a minute to extract; the median gap between frames is
19–25 s, and a long gap is a stretch where the screen's colours did not change.
Blind spot: a change that keeps the palette — a small white popover on a white page, a toast — is not a colour change,
and gets no frame of its own. Modals that dim the page, sheets and coloured banners do.
What building it implies
The preview cannot live inside the slice. The slice clips its overflow (it scrolls sideways), and the space above
the tracks is 26 px. It needs a portal or a fixed layer, as here.
Frames come from serve, after the report, like the strip. One seek per participant turn: a 45-turn session is
about 45 small JPEGs, a few hundred KB, under .bristlenose/intermediate/, served by an authenticated route like
the session thumbnail. They are participants' screens, so the HTML export leaves them out; the strip already summarises.
No new strings. The caption is a timecode. Mouse-only and aria-hidden, the same call the review made
for section flags.
Not pixel-identical. The slice here is the 6 Oct design template, close to SessionTapestry.tsx but
not its tuned geometry. The preview itself uses the shipped tokens; its two-layer shadow is invented.
Notches are off, as parked today.
To judge
Is one frame per turn enough to find the first screen share, or a switch to a terminal, in the usability session?
Does 700 ms feel deliberate or sluggish? Does holding over moderator turns read as truthful or as stuck?
Width: does 120 still tell environments apart; does 240 start to compete with the timeline?
Pointer-following versus pinned to the frame's moment: which makes the turn it belongs to clearer?
Commentary
Hover a session's speaker lane. After the open delay a frame appears: the screen 25% into the participant turn under the pointer, from the real recording. It steps from turn to turn, it does not scrub. Click still jumps to that moment in the transcript. The first session is a 38-minute usability session with 45 participant turns and frequent page changes; the second is an 18-minute Teams call with 7 long turns, where the first minutes are the call and then the share begins.
The defaults, and why
Frames at colour changes inside a turn (13 Oct 2026)
Each participant turn is split at the colour changes inside it, and each stretch gets a frame: the first at 25% of the stretch, as before, each later one 2 s after its change (halfway for a stretch under 4 s). A turn with no change inside it behaves exactly as one frame per turn. While a change frame is showing, a click lands 1 s before the change, so the researcher hears what led up to the screen they are looking at. Measured on these two sessions, scaled to a 5-hour project: about 430–560 frames, 3–4 MB at 320 px, under a minute to extract; the median gap between frames is 19–25 s, and a long gap is a stretch where the screen's colours did not change.
Blind spot: a change that keeps the palette — a small white popover on a white page, a toast — is not a colour change, and gets no frame of its own. Modals that dim the page, sheets and coloured banners do.
What building it implies
.bristlenose/intermediate/, served by an authenticated route like the session thumbnail. They are participants' screens, so the HTML export leaves them out; the strip already summarises.aria-hidden, the same call the review made for section flags.SessionTapestry.tsxbut not its tuned geometry. The preview itself uses the shipped tokens; its two-layer shadow is invented.To judge