diff --git a/site/src/components/AutomationsDemo.astro b/site/src/components/AutomationsDemo.astro
new file mode 100644
index 000000000..6e23641dd
--- /dev/null
+++ b/site/src/components/AutomationsDemo.astro
@@ -0,0 +1,389 @@
+---
+/**
+ * Live demo of the Warmbly automation builder (/app/automations/:id).
+ *
+ * Pixel-faithful to web/src (PageTopbar + React-Flow canvas: TriggerNode /
+ * ConditionNode / ActionNode, sky-600 chrome, dot grid at 24px), authored at a
+ * fixed 1280px design width and uniformly scaled to fit its container.
+ *
+ * The demo is a 15s master timeline, all CSS keyframes on one shared duration:
+ * a cursor presses Test, the insights panel slides in, and the run travels the
+ * flow node by node: edges draw in, nodes flash as the run passes, result rows
+ * check off in the panel, a Slack notification pops, the summary lands. The
+ * "no" branch dims while the run takes the "yes" path. Clicking the real Test
+ * button restarts the run from zero.
+ */
+const zapIcon = '
+ Every reply, booked meeting, bounce and warmup dip is a trigger. Wire it to your stack on a canvas: branch on intent, post to Slack, open the deal, update the CRM. The one below is running its test right now. Press Test in the window to fire it again. +
+{c.text}
+