Skip to content

Commit ebb9d01

Browse files
committed
RSC complete
1 parent 5af430d commit ebb9d01

4 files changed

Lines changed: 28 additions & 14 deletions

File tree

src/lib/components/steps/RSCStep.svelte

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,12 @@
151151
flowStatus: 'RSC request...',
152152
requestPosition: 'start'
153153
}},
154-
// "browser sends a request"
154+
// Request starts moving when narration mentions it
155155
{ time: times.requestStart, state: { requestPosition: 'center' }},
156-
{ time: times.requestStart + 1, state: { requestPosition: 'end' }},
157-
// "server doesn't wait" - server starts processing
156+
// Request arrives at server BEFORE server lights up
157+
// Travel time is half the gap between requestStart and serverDoesntWait, minimum 1s
158+
{ time: times.requestStart + Math.max(1, (times.serverDoesntWait - times.requestStart) / 2), state: { requestPosition: 'end' }},
159+
// "server doesn't wait" - server starts processing (after request arrives)
158160
{ time: times.serverDoesntWait, state: {
159161
clientStatus: 'Streaming...',
160162
clientStatusClass: 'processing',

src/lib/utils/triggers/expert/rsc-triggers.ts

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@ import type { RSCKeyframeTriggers } from '../types';
77
// Expert-level trigger phrases from approved script
88
// TIMING NOTES (from whisper):
99
// - "client requests a route" at 7.32s - request starts
10-
// - "server begins rendering immediately" at 9.5s - server lights up (after 1s travel)
11-
// - "doesn't wait for the slowest data dependency" at 13.5s
10+
// - "server begins rendering immediately" at 9.5s - server lights up
11+
// - Request takes 1s to travel, so we need serverDoesntWait >= requestStart + 1
1212
// - "server streams React Flight" at 19.82s - streaming begins
1313
// - "First, you get the shell" at 32.74s - shell renders
14-
// - "Header, sidebar, welcome copy, footer" at 42.72s-45.76s
14+
// - "Header," at 42.72s, "sidebar," at 43.42s, "welcome copy," at 44.28s, "footer." at 45.4s
1515
const TRIGGER_CONFIG = {
16-
// Request starts when narration says "client requests"
16+
// Request starts when narration says "client requests" (7.32s)
17+
// Request travels for 1s, arrives at 8.32s
1718
requestStart: { phrase: "client requests a route", fallback: 7.0 },
1819

19-
// Server lights up when "server begins rendering" (after request arrives)
20+
// Server lights up AFTER request arrives - use "server begins" at 9.5s
21+
// This is > requestStart + 1 (8.32s), so timing works
2022
serverDoesntWait: { phrase: "server begins rendering", fallback: 9.5 },
2123

2224
// Streaming starts when "server streams React Flight"
@@ -25,11 +27,12 @@ const TRIGGER_CONFIG = {
2527
// Shell renders when "First, you get the shell"
2628
shellRenders: { phrase: "First, you get the shell", fallback: 32.0 },
2729

28-
// Components stream in sequence - "Header, sidebar, welcome copy, footer"
29-
headerRenders: { phrase: "Header,", fallback: 42.5 },
30-
sidebarRenders: { phrase: "sidebar,", fallback: 43.5 },
31-
welcomeRenders: { phrase: "welcome copy,", fallback: 44.5 },
32-
footerRenders: { phrase: "footer.", fallback: 45.5 },
30+
// Components stream in sequence - match actual whisper timestamps
31+
// "Header," at 42.72s, "sidebar," at 43.42s, "welcome copy," at 44.28s, "footer." at 45.4s
32+
headerRenders: { phrase: "Header,", fallback: 42.7 },
33+
sidebarRenders: { phrase: "sidebar,", fallback: 43.4 },
34+
welcomeRenders: { phrase: "welcome copy,", fallback: 44.3 },
35+
footerRenders: { phrase: "footer.", fallback: 45.4 },
3336

3437
// Fast components done - "incremental patch"
3538
fastComponentsDone: { phrase: "incremental patch the client can reconcile", fallback: 47.0 },

src/lib/utils/triggers/stakeholder/rsc-triggers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import type { RSCKeyframeTriggers } from '../types';
66

77
// Stakeholder-level trigger phrases from approved script
88
const TRIGGER_CONFIG = {
9-
requestStart: { phrase: "customer places an order", fallback: 3.0 },
9+
requestStart: { phrase: "places an order", fallback: 4.4 },
1010
serverDoesntWait: { phrase: "instead of waiting for every single item", fallback: 8.0 },
1111
startsStreaming: { phrase: "starts serving what's ready immediately", fallback: 12.0 },
1212
shellRenders: { phrase: "brings out the table setting and menus", fallback: 18.0 },

src/routes/+page.svelte

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,15 @@
77
import FixStep from '$lib/components/steps/FixStep.svelte';
88
import LessonsStep from '$lib/components/steps/LessonsStep.svelte';
99
import { navigation } from '$lib/stores/navigation.svelte';
10+
import { userPreferences } from '$lib/stores/userPreferences.svelte';
11+
import { onMount } from 'svelte';
12+
13+
// Mark user as visited on first load
14+
onMount(() => {
15+
if (!userPreferences.hasVisited) {
16+
userPreferences.markVisited();
17+
}
18+
});
1019
</script>
1120

1221
<Header />

0 commit comments

Comments
 (0)