Skip to content

Commit 7d354f2

Browse files
committed
docs(demo): slow down button presses for viewer readability
Redistribute timing in Intervene and AITools scenes β€” less idle staring, more breathing room around each tap. Intervene: shorten dead pause (43fβ†’18f), widen ↓/⏎ gap (14fβ†’20f). AITools: increase drawer dwell (15fβ†’25f), widen popup-closeβ†’next-action gaps. PHASE[4] 280β†’320 (+40f) to accommodate.
1 parent cc42e85 commit 7d354f2

3 files changed

Lines changed: 64 additions & 64 deletions

File tree

β€Ždemo/src/DemoVideo.tsxβ€Ž

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import { colours } from './theme'
2121
export const FPS = 30
2222
export const TRANSITION_FRAMES = 20
2323
/** Phase durations in frames β€” desktop intro, then persistent phone with content switches */
24-
const PHASE = [75, 45, 120, 195, 280] as const
24+
const PHASE = [75, 45, 120, 195, 320] as const
2525
const PHASE_START = [
2626
0,
2727
PHASE[0],
@@ -32,8 +32,8 @@ const PHASE_START = [
3232
const PHONE_TOTAL = PHASE[0] + PHASE[1] + PHASE[2] + PHASE[3] + PHASE[4]
3333

3434
// Guard against silent arithmetic drift when phase durations change
35-
if (PHONE_TOTAL !== 715) {
36-
throw new Error(`PHONE_TOTAL is ${PHONE_TOTAL}, expected 715 β€” update PHASE or this assertion`)
35+
if (PHONE_TOTAL !== 755) {
36+
throw new Error(`PHONE_TOTAL is ${PHONE_TOTAL}, expected 755 β€” update PHASE or this assertion`)
3737
}
3838

3939
const INTRO_DURATION = 75
@@ -57,7 +57,7 @@ export const TOTAL_FRAMES = INTRO_DURATION + PHONE_TOTAL + TAGLINE_DURATION - 2
5757
* | 2: Handoff | 1.5s (45f) | Phone materialises around it |
5858
* | 3: Swipe | 4.0s (120f) | Claude β†’ OpenCode β†’ Claude |
5959
* | 4: Intervene| 6.5s (195f) | Multi-scroll + approve plan |
60-
* | 5: Drawer | 9.3s (280f) | Drawer β†’ AI Usage β†’ Critique |
60+
* | 5: Drawer | 10.7s (320f) | Drawer β†’ AI Usage β†’ Critique |
6161
* | [fade] | | |
6262
* | 6: Tagline | 2.3s (70f) | "Your terminal. Everywhere." |
6363
*/

β€Ždemo/src/scenes/AITools.tsxβ€Ž

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
} from '../screens'
1717

1818
/**
19-
* Scene 4: DRAWER + POPUPS β€” the payoff (280f)
19+
* Scene 4: DRAWER + POPUPS β€” the payoff (320f)
2020
*
2121
* After the agent starts implementing, the user pulls up the drawer to
2222
* check AI usage stats, then views the git diff via critique. Both popups
@@ -25,42 +25,42 @@ import {
2525
* Timeline:
2626
* 0-25: Terminal stagger (static carry-over + new content)
2727
* 25: Tap ☰ More
28-
* 33: Drawer #1 opens
29-
* 33-48: Dwell β€” viewer reads drawer grid
30-
* 48: Tap "AI Usage" (highlight)
31-
* 52: Drawer #1 closes
32-
* 56: AI Usage popup opens
33-
* 56-98: View AI usage (~1.4s)
34-
* 98: Tap q (highlight q, TapFinger)
35-
* 102: AI Usage popup closes
36-
* 110: Tap ☰ More again
37-
* 118: Drawer #2 opens
38-
* 118-133: Dwell on drawer
39-
* 133: Tap "Critique" (highlight)
40-
* 137: Drawer #2 closes
41-
* 141: Critique popup opens
42-
* 141-183: View diff (static)
43-
* 183-213: Scroll gesture on diff (scrollOffset 0β†’120px)
44-
* 213-230: Hold after scroll
45-
* 230: Tap q (highlight q, TapFinger)
46-
* 234: Critique popup closes
47-
* 240-280: Hold for transition to tagline
28+
* 35: Drawer #1 opens
29+
* 35-60: Dwell β€” viewer reads drawer grid (25f)
30+
* 60: Tap "AI Usage" (highlight)
31+
* 66: Drawer #1 closes
32+
* 72: AI Usage popup opens
33+
* 72-118: View AI usage (~1.5s)
34+
* 118: Tap q (highlight q, TapFinger)
35+
* 122: AI Usage popup closes
36+
* 135: Tap ☰ More again (13f gap after close)
37+
* 145: Drawer #2 opens
38+
* 145-170: Dwell on drawer (25f)
39+
* 170: Tap "Critique" (highlight)
40+
* 176: Drawer #2 closes
41+
* 182: Critique popup opens
42+
* 182-218: View diff (static)
43+
* 218-248: Scroll gesture on diff (scrollOffset 0β†’120px)
44+
* 248-265: Hold after scroll
45+
* 265: Tap q (highlight q, TapFinger)
46+
* 269: Critique popup closes
47+
* 275-320: Hold for transition to tagline
4848
*/
4949
export const AITools: React.FC = () => {
5050
const frame = useCurrentFrame()
5151

5252
// ── Toolbar highlights (☰ More x2 + q x2) ──
5353
const getToolbarHighlight = (): { button: string; at: number } | undefined => {
5454
if (frame >= 25 && frame < 29) return { button: '\u2630 More', at: 25 }
55-
if (frame >= 98 && frame < 102) return { button: 'q', at: 98 }
56-
if (frame >= 110 && frame < 114) return { button: '\u2630 More', at: 110 }
57-
if (frame >= 230 && frame < 234) return { button: 'q', at: 230 }
55+
if (frame >= 118 && frame < 122) return { button: 'q', at: 118 }
56+
if (frame >= 135 && frame < 139) return { button: '\u2630 More', at: 135 }
57+
if (frame >= 265 && frame < 269) return { button: 'q', at: 265 }
5858
return undefined
5959
}
6060
const highlight = getToolbarHighlight()
6161

6262
// ── Critique scroll ──
63-
const critiqueScroll = interpolate(frame, [183, 213], [0, 120], {
63+
const critiqueScroll = interpolate(frame, [218, 248], [0, 120], {
6464
extrapolateLeft: 'clamp',
6565
extrapolateRight: 'clamp',
6666
})
@@ -75,47 +75,47 @@ export const AITools: React.FC = () => {
7575
{/* ── Drawer #1: AI Usage ── */}
7676
<TapFinger tapFrame={25} position={TOUCH.toolbarMore} />
7777
<DrawerOverlay
78-
showFrame={33}
79-
hideFrame={52}
78+
showFrame={35}
79+
hideFrame={66}
8080
highlightButton="AI Usage"
81-
highlightAt={48}
81+
highlightAt={60}
8282
/>
83-
<TapFinger tapFrame={48} position={TOUCH.drawerAIUsage} />
83+
<TapFinger tapFrame={60} position={TOUCH.drawerAIUsage} />
8484

8585
{/* ── AI Usage popup ── */}
86-
<TmuxPopup showFrame={56} hideFrame={102} title="AI Usage">
86+
<TmuxPopup showFrame={72} hideFrame={122} title="AI Usage">
8787
<Terminal screen={aiUsageScreen} fontSize={12} padding={4} background="transparent" />
8888
</TmuxPopup>
8989

9090
{/* Tap q to close AI Usage popup */}
91-
<TapFinger tapFrame={98} position={TOUCH.toolbarQ} />
91+
<TapFinger tapFrame={118} position={TOUCH.toolbarQ} />
9292

9393
{/* ── Drawer #2: Critique ── */}
94-
<TapFinger tapFrame={110} position={TOUCH.toolbarMore} />
94+
<TapFinger tapFrame={135} position={TOUCH.toolbarMore} />
9595
<DrawerOverlay
96-
showFrame={118}
97-
hideFrame={137}
96+
showFrame={145}
97+
hideFrame={176}
9898
highlightButton="Critique"
99-
highlightAt={133}
99+
highlightAt={170}
100100
/>
101-
<TapFinger tapFrame={133} position={TOUCH.drawerCritique} />
101+
<TapFinger tapFrame={170} position={TOUCH.drawerCritique} />
102102

103103
{/* ── Critique diff popup ── */}
104-
<TmuxPopup showFrame={141} hideFrame={234} title="critique" scrollOffset={critiqueScroll}>
104+
<TmuxPopup showFrame={182} hideFrame={269} title="critique" scrollOffset={critiqueScroll}>
105105
<Terminal screen={critiqueDiffScreen} fontSize={11} padding={4} background="transparent" />
106106
</TmuxPopup>
107107

108108
{/* Scroll gesture on critique popup */}
109109
<TouchFinger
110-
startFrame={178}
111-
endFrame={213}
110+
startFrame={213}
111+
endFrame={248}
112112
from={[195, 450]}
113113
to={[195, 330]}
114114
holdFrames={5}
115115
/>
116116

117117
{/* Tap q to close critique popup */}
118-
<TapFinger tapFrame={230} position={TOUCH.toolbarQ} />
118+
<TapFinger tapFrame={265} position={TOUCH.toolbarQ} />
119119
</>
120120
)
121121
}

β€Ždemo/src/scenes/Intervene.tsxβ€Ž

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,43 +20,43 @@ import {
2020
*
2121
* Timeline (195f / 6.5s):
2222
* 0-5: Plan visible, top portion
23-
* 5-28: First scroll gesture (scrollOffset 0β†’150)
24-
* 33-55: Second scroll gesture (scrollOffset 150β†’280)
25-
* 55-95: Pause β€” reader reviews plan + prompt options
26-
* 98: Tap ↓ (move cursor to option 2)
27-
* 112: Tap ⏎ Enter to accept
28-
* 125: ACCEPT_FRAME β€” switch screen
29-
* 125-175: Checkmarks stagger in
30-
* 175-195: Hold for transition
23+
* 5-30: First scroll gesture (scrollOffset 0β†’150)
24+
* 35-60: Second scroll gesture (scrollOffset 150β†’170)
25+
* 60-78: Pause β€” reader reviews plan + prompt options
26+
* 80: Tap ↓ (move cursor to option 2)
27+
* 100: Tap ⏎ Enter to accept (20f gap)
28+
* 115: ACCEPT_FRAME β€” switch screen
29+
* 115-170: Checkmarks stagger in
30+
* 170-195: Hold for transition
3131
*/
3232
export const Intervene: React.FC = () => {
3333
const frame = useCurrentFrame()
3434

3535
// Additive scrollOffset: two scroll gestures, content moves up
36-
const scroll1 = interpolate(frame, [10, 28], [0, 150], {
36+
const scroll1 = interpolate(frame, [10, 30], [0, 150], {
3737
extrapolateLeft: 'clamp',
3838
extrapolateRight: 'clamp',
3939
})
40-
const scroll2 = interpolate(frame, [38, 55], [0, 170], {
40+
const scroll2 = interpolate(frame, [40, 60], [0, 170], {
4141
extrapolateLeft: 'clamp',
4242
extrapolateRight: 'clamp',
4343
})
4444
const scrollOffset = scroll1 + scroll2
4545

46-
const DOWN_FRAME = 98
47-
const ACCEPT_FRAME = 125
46+
const DOWN_FRAME = 80
47+
const ACCEPT_FRAME = 115
4848

4949
// Switch plan screen to show cursor on option 2 after ↓ press
5050
const planScreen = frame >= DOWN_FRAME ? claudeCodePlanScreen2 : claudeCodePlanScreen
5151

5252
// Toolbar highlights: ↓ then ⏎
5353
const highlightButton =
54-
frame >= 98 && frame < 102
54+
frame >= 80 && frame < 84
5555
? '\u2193'
56-
: frame >= 112 && frame < 116
56+
: frame >= 100 && frame < 104
5757
? '\u23CE'
5858
: undefined
59-
const highlightAt = frame >= 112 && frame < 116 ? 112 : 98
59+
const highlightAt = frame >= 100 && frame < 104 ? 100 : 80
6060

6161
return (
6262
<>
@@ -74,26 +74,26 @@ export const Intervene: React.FC = () => {
7474
{/* First scroll gesture */}
7575
<TouchFinger
7676
startFrame={5}
77-
endFrame={28}
77+
endFrame={30}
7878
from={TOUCH.scrollStart}
7979
to={TOUCH.scrollEnd}
8080
holdFrames={5}
8181
/>
8282

8383
{/* Second scroll gesture β€” slight X offset for realism */}
8484
<TouchFinger
85-
startFrame={33}
86-
endFrame={55}
85+
startFrame={35}
86+
endFrame={60}
8787
from={TOUCH.scrollUp2Start}
8888
to={TOUCH.scrollUp2End}
8989
holdFrames={5}
9090
/>
9191

9292
{/* Tap ↓ to move cursor to option 2 */}
93-
<TapFinger tapFrame={98} position={TOUCH.toolbarDown} />
93+
<TapFinger tapFrame={80} position={TOUCH.toolbarDown} />
9494

9595
{/* Tap ⏎ Enter to accept */}
96-
<TapFinger tapFrame={112} position={TOUCH.toolbarEnter} />
96+
<TapFinger tapFrame={100} position={TOUCH.toolbarEnter} />
9797
</>
9898
)
9999
}

0 commit comments

Comments
Β (0)