From f914dfa486bd498f8d99e67f9523059b207d3399 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Thu, 12 Feb 2026 14:31:13 -0800 Subject: [PATCH 01/10] Mockup improvement --- .../components/HeroSection/HeroSection.tsx | 96 +++++++++---------- .../components/AppMockup/AppMockup.tsx | 2 +- .../components/ProductDemo/ProductDemo.tsx | 62 ++++++------ .../components/SelectorPill/SelectorPill.tsx | 4 +- 4 files changed, 76 insertions(+), 88 deletions(-) diff --git a/apps/marketing/src/app/components/HeroSection/HeroSection.tsx b/apps/marketing/src/app/components/HeroSection/HeroSection.tsx index e27e9aea2f6..0d1b0ec1516 100644 --- a/apps/marketing/src/app/components/HeroSection/HeroSection.tsx +++ b/apps/marketing/src/app/components/HeroSection/HeroSection.tsx @@ -13,61 +13,57 @@ export function HeroSection() { return (
-
-
-
-
-
-

- - - +
+
+
+

+ + + - -

-

- Orchestrate a team of Claude Code, Codex, or any other coding - agents -

-
- -
- setIsWaitlistOpen(true)} - /> - -
+ }, + { text: "." }, + ]} + speed={40} + delay={600} + /> + +

+

+ Orchestrate a team of Claude Code, Codex, or any other coding + agents +

-
- +
+ setIsWaitlistOpen(true)} /> +
+ +
+ +
{/* Window chrome */} diff --git a/apps/marketing/src/app/components/HeroSection/components/ProductDemo/ProductDemo.tsx b/apps/marketing/src/app/components/HeroSection/components/ProductDemo/ProductDemo.tsx index a7e67a7a91b..d1fc48a53e2 100644 --- a/apps/marketing/src/app/components/HeroSection/components/ProductDemo/ProductDemo.tsx +++ b/apps/marketing/src/app/components/HeroSection/components/ProductDemo/ProductDemo.tsx @@ -1,58 +1,50 @@ "use client"; import { motion } from "framer-motion"; -import dynamic from "next/dynamic"; import { useState } from "react"; import { type ActiveDemo, AppMockup } from "../AppMockup"; import { SelectorPill } from "./components/SelectorPill"; import { DEMO_OPTIONS } from "./constants"; -const MeshGradient = dynamic( - () => import("@superset/ui/mesh-gradient").then((mod) => mod.MeshGradient), - { ssr: false }, -); - export function ProductDemo() { const [activeOption, setActiveOption] = useState("Use Any Agents"); return ( -
- {/* Animated mesh gradient backgrounds - all rendered, opacity controlled */} - {DEMO_OPTIONS.map((option) => ( - - + {/* Selector pills - centered above mockup */} +
+ {DEMO_OPTIONS.map((option) => ( + setActiveOption(option.label as ActiveDemo)} /> - - ))} + ))} +
- {/* Content wrapper - no right padding on mobile so content touches edge */} -
+ {/* Mockup with fade overlays */} +
{/* App mockup - horizontally scrollable on mobile */}
- {/* Selector pills - horizontally scrollable on mobile */} -
- {DEMO_OPTIONS.map((option) => ( - setActiveOption(option.label as ActiveDemo)} - /> - ))} -
+ {/* Bottom gradient fade */} +
+ + {/* Left edge gradient fade */} +
+ + {/* Right edge gradient fade */} +
-
+ ); } diff --git a/apps/marketing/src/app/components/HeroSection/components/ProductDemo/components/SelectorPill/SelectorPill.tsx b/apps/marketing/src/app/components/HeroSection/components/ProductDemo/components/SelectorPill/SelectorPill.tsx index be5dd4d03bb..a199dad69e9 100644 --- a/apps/marketing/src/app/components/HeroSection/components/ProductDemo/components/SelectorPill/SelectorPill.tsx +++ b/apps/marketing/src/app/components/HeroSection/components/ProductDemo/components/SelectorPill/SelectorPill.tsx @@ -19,11 +19,11 @@ export function SelectorPill({ onMouseEnter={onSelect} onClick={onSelect} className={` - inline-flex items-center justify-center py-2 text-xs sm:text-sm whitespace-nowrap cursor-pointer shrink-0 + inline-flex items-center justify-center py-2 text-xs sm:text-sm whitespace-nowrap cursor-pointer shrink-0 rounded-full ${ active ? "bg-foreground/90 border border-foreground text-background/80" - : "bg-foreground/5 border border-foreground/20 text-foreground/80 hover:bg-foreground/10 hover:border-foreground/30" + : "bg-foreground/[0.03] border border-foreground/10 text-foreground/50 hover:bg-foreground/[0.06] hover:border-foreground/20 hover:text-foreground/70" } `} animate={{ From db451b2c1ab75a2e3dfe948fe25199b03e9a2faa Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Thu, 12 Feb 2026 15:58:04 -0800 Subject: [PATCH 02/10] Beauty --- .../components/HeroSection/HeroSection.tsx | 13 +- .../components/AppMockup/AppMockup.tsx | 188 +++++++++--------- .../components/ProductDemo/ProductDemo.tsx | 72 ++++--- 3 files changed, 138 insertions(+), 135 deletions(-) diff --git a/apps/marketing/src/app/components/HeroSection/HeroSection.tsx b/apps/marketing/src/app/components/HeroSection/HeroSection.tsx index 0d1b0ec1516..277c4d547fd 100644 --- a/apps/marketing/src/app/components/HeroSection/HeroSection.tsx +++ b/apps/marketing/src/app/components/HeroSection/HeroSection.tsx @@ -1,7 +1,8 @@ "use client"; import { COMPANY } from "@superset/shared/constants"; -import { useState } from "react"; +import { useScroll } from "framer-motion"; +import { useRef, useState } from "react"; import { FaGithub } from "react-icons/fa"; import { DownloadButton } from "../DownloadButton"; import { WaitlistModal } from "../WaitlistModal"; @@ -10,6 +11,12 @@ import { TypewriterText } from "./components/TypewriterText"; export function HeroSection() { const [isWaitlistOpen, setIsWaitlistOpen] = useState(false); + const demoRef = useRef(null); + + const { scrollYProgress } = useScroll({ + target: demoRef, + offset: ["start 0.45", "start 0"], + }); return (
@@ -61,8 +68,8 @@ export function HeroSection() {
-
- +
+
diff --git a/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx b/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx index 50690790f14..015cc372ceb 100644 --- a/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx +++ b/apps/marketing/src/app/components/HeroSection/components/AppMockup/AppMockup.tsx @@ -47,14 +47,14 @@ function StatusIndicator({ }[status]; return ( - + {config.pulse && ( )} ); @@ -143,16 +143,16 @@ function WorkspaceItem({ }) { return (
{isActive && (
)}
{status === "working" ? ( - + ) : ( - + )} {status && status !== "working" && ( @@ -170,7 +170,7 @@ function WorkspaceItem({ {(add !== undefined || pr) && (
{add !== undefined && ( - + +{add} {del !== undefined && del > 0 && ( -{del} @@ -181,12 +181,12 @@ function WorkspaceItem({ )}
- + {branch} {pr && ( - - + + {pr} )} @@ -229,18 +229,18 @@ function FileChangeItem({ return (
- + {path}
{!isFolder && (add > 0 || del > 0) && ( - + {add > 0 && +{add}} {del > 0 && -{del}} @@ -260,51 +260,45 @@ interface AppMockupProps { } export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { - // Animation states based on activeDemo - // - "Use Any Agents": Highlight terminal area with agent output - // - "Create Parallel Branches": Highlight workspace sidebar with branches - // - "See Changes": Highlight file changes panel on right - // - "Open in Any IDE": Highlight top bar / open actions - return (
{/* Window chrome */} -
+
-
-
-
+
+
+
- superset + superset
-
+
{/* Left sidebar */} -
+
{/* New Workspace button */} -
+
{/* Repository section */} -
+
- superset - (5) + superset + (5)
- - + +
@@ -320,9 +314,9 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { }} transition={{ duration: 0.3, ease: "easeOut" }} > -
+
- +
@@ -330,7 +324,7 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { new workspace
- + creating...
@@ -357,26 +351,26 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { {/* Ports section */}
-
-
+
+
Ports
- 4 + 4
{PORTS.map((port) => ( -
-
+
+
{port.workspace} - +
{port.ports.map((p) => ( {p} @@ -390,12 +384,12 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { {/* Main content area */}
{/* Tab bar */} -
+
{/* Claude tab - always visible, active */} -
+
{activeDemo === "Create Parallel Branches" ? ( <> - + setup ) : ( @@ -403,17 +397,17 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { Claude claude )} - +
{/* Other agent tabs - shown when "Use Any Agents" is active */} codex - + gemini - + cursor - +
- - + +
{/* Terminal header */} -
- - - Terminal - +
+ + Terminal
- - + +
{/* Terminal content */} -
+
{/* Default terminal content */} {/* Claude ASCII art header */}
-
+
{` * ▐▛███▜▌ * * ▝▜█████▛▘ * * ▘▘ ▝▝ *`}
-
+
Claude Code @@ -617,7 +609,7 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { {/* Create Parallel Branches overlay */}
- + Setting up new parallel environment...
@@ -654,9 +646,9 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { {/* Right sidebar */} @@ -673,24 +665,22 @@ export function AppMockup({ activeDemo = "Use Any Agents" }: AppMockupProps) { }} > {/* Header */} -
- - Review Changes - -
- +
+ Review Changes +
+ #827
{/* Commit & Push section */} -
-
+
+
Commit message...