From 8db1d5baca0d7d6ddc018cbebf4767e615555e52 Mon Sep 17 00:00:00 2001
From: Brian Love
Date: Wed, 26 Aug 2026 13:34:57 -0700
Subject: [PATCH] refactor(website): one clip player, and give the showcase its
aria-labels
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
The same video markup had reached three call sites — `page.tsx`,
`DemoShowcase.tsx`, and `SolutionDemoBlock.tsx` — identical down to the inline
styles. `DemoClip` already gave them a common shape, so the duplication bought
nothing. `ClipPlayer` collapses all three, with an `overlay` slot for the one
caller that draws a launch button over the video.
Making `DemoShowcase` use it required its `DemoMedia` to satisfy `DemoClip`,
which surfaced a real gap the production type-check caught: those two clips had
no `caption`, so the showcase's `
-
-
- {/*
- Silent, decorative loop. `aria-label` rather than captions: there
- is no audio track and no narration to caption, and the prose
- above already states what the clip shows.
- */}
-
-
-
-
-
-
+
+
+
+
+
+
+ {overlay}
+
+
+ );
+}
diff --git a/apps/website/src/lib/demo-media.ts b/apps/website/src/lib/demo-media.ts
index 44fcd10a2..940aecc45 100644
--- a/apps/website/src/lib/demo-media.ts
+++ b/apps/website/src/lib/demo-media.ts
@@ -41,8 +41,8 @@ export const HITL_CLIP: DemoClip = {
/**
* The LangGraph streaming demo, recorded on the canonical demo shell. Exported
- * so the section switcher does not add another hardcoded copy of these URLs.
- * `DemoShowcase` still declares its own; consolidating it is tracked separately.
+ * Shared by the homepage showcase and the section switcher, so a recut or a
+ * store move changes one place rather than three.
*/
export const LANGGRAPH_CLIP: DemoClip = {
caption: 'Tokens stream into the Angular surface as the agent produces them.',
@@ -52,6 +52,18 @@ export const LANGGRAPH_CLIP: DemoClip = {
poster: `${DEMO_CDN}/langgraph-demo-poster.webp`,
};
+/**
+ * The AG-UI runtime demo. Paired with `LANGGRAPH_CLIP` so the homepage showcase
+ * can state "same front end, two runtimes" from one place.
+ */
+export const AG_UI_CLIP: DemoClip = {
+ caption: 'The same Threadplane chat surface, running against an AG-UI backend.',
+ url: 'ag-ui.threadplane.ai',
+ videoMp4: `${DEMO_CDN}/ag-ui-demo.mp4`,
+ videoWebm: `${DEMO_CDN}/ag-ui-demo.webm`,
+ poster: `${DEMO_CDN}/ag-ui-demo-poster.webp`,
+};
+
/**
* Generative UI: the agent emits a json-render spec and the demo mounts it as
* real Angular components. Recorded by