1- import {
2- ArrowRightIcon ,
3- DatabaseIcon ,
4- HistoryIcon ,
5- KeyRoundIcon ,
6- MessageSquareIcon ,
7- } from "lucide-react" ;
1+ import { ArrowRightIcon } from "lucide-react" ;
82import Link from "next/link" ;
93import {
104 landingCard ,
@@ -14,49 +8,27 @@ import {
148 MotionDiv ,
159 MotionSection ,
1610} from "@/components/landing/motion" ;
11+ import { HeroConsole } from "@/components/landing/visuals" ;
1712import { Badge } from "@/components/ui/badge" ;
1813import { Button } from "@/components/ui/button" ;
19- import {
20- Card ,
21- CardAction ,
22- CardContent ,
23- CardDescription ,
24- CardFooter ,
25- CardHeader ,
26- CardTitle ,
27- } from "@/components/ui/card" ;
28- import { Separator } from "@/components/ui/separator" ;
29-
30- const overviewRows = [
31- { label : "Ingest" , value : "POST /api/v1/conversations" } ,
32- { label : "Retrieve" , value : "GET /api/v1/conversations/:id" } ,
33- { label : "Analyze" , value : "GET /api/v1/analytics/summary" } ,
34- ] as const ;
35-
36- const productSignals = [
37- { icon : MessageSquareIcon , label : "Conversation threads" } ,
38- { icon : DatabaseIcon , label : "D1-backed storage" } ,
39- { icon : HistoryIcon , label : "Cursor history" } ,
40- { icon : KeyRoundIcon , label : "API key controls" } ,
41- ] as const ;
4214
4315export function Hero ( ) {
4416 return (
4517 < MotionSection
4618 animate = "visible"
47- className = "max-w-5xl mx-auto px-6 py-16 sm:py-20 "
19+ className = "max-w-5xl mx-auto px-6 py-12 sm:py-16 "
4820 initial = "hidden"
4921 variants = { landingContainer }
5022 >
51- < div className = "grid gap-8 lg:grid-cols-[1fr_24rem ] lg:items-start " >
52- < div className = "flex flex-col gap-6 " >
23+ < div className = "grid gap-8 lg:grid-cols-[minmax(0,1fr)_30rem ] lg:items-center " >
24+ < div className = "flex flex-col gap-5 " >
5325 < MotionDiv className = "flex flex-wrap gap-2" variants = { landingItem } >
5426 < Badge variant = "outline" > REST API</ Badge >
5527 < Badge variant = "outline" > Cloudflare D1</ Badge >
5628 < Badge variant = "outline" > Agent memory</ Badge >
5729 </ MotionDiv >
5830 < MotionDiv className = "flex flex-col gap-4" variants = { landingItem } >
59- < h1 className = "text-4xl font-semibold tracking-tight text-balance sm:text-5xl md:text-6xl " >
31+ < h1 className = "max-w-3xl text-5xl font-semibold tracking-tight text-balance sm:text-6xl md:text-7xl " >
6032 AgentState
6133 </ h1 >
6234 < p className = "max-w-2xl text-lg leading-relaxed text-pretty text-muted-foreground sm:text-xl" >
@@ -82,65 +54,10 @@ export function Hero() {
8254 API reference
8355 </ Button >
8456 </ MotionDiv >
85- < MotionDiv className = "grid gap-3 sm:grid-cols-2" variants = { landingContainer } >
86- { productSignals . map ( ( { icon : Icon , label } ) => (
87- < MotionDiv key = { label } variants = { landingCard } whileHover = { landingHover } >
88- < Card size = "sm" >
89- < CardHeader >
90- < CardTitle className = "flex items-center gap-2" >
91- < span className = "flex size-8 items-center justify-center rounded-lg bg-muted text-muted-foreground" >
92- < Icon aria-hidden = "true" />
93- </ span >
94- { label }
95- </ CardTitle >
96- </ CardHeader >
97- </ Card >
98- </ MotionDiv >
99- ) ) }
100- </ MotionDiv >
10157 </ div >
10258
103- < MotionDiv variants = { landingCard } whileHover = { landingHover } >
104- < Card >
105- < CardHeader >
106- < CardTitle > Operations overview</ CardTitle >
107- < CardDescription >
108- One API surface for runtime memory and audit history.
109- </ CardDescription >
110- < CardAction >
111- < Badge variant = "secondary" > Live</ Badge >
112- </ CardAction >
113- </ CardHeader >
114- < CardContent className = "flex flex-col gap-4" >
115- { overviewRows . map ( ( row ) => (
116- < div key = { row . value } className = "flex flex-col gap-1" >
117- < div className = "flex items-center justify-between gap-3" >
118- < span className = "text-sm font-medium" > { row . label } </ span >
119- < Badge variant = "outline" > v1</ Badge >
120- </ div >
121- < code className = "truncate rounded-md bg-muted px-3 py-2 font-mono text-sm text-muted-foreground" >
122- { row . value }
123- </ code >
124- </ div >
125- ) ) }
126- < Separator />
127- < div className = "grid grid-cols-2 gap-3" >
128- < div className = "flex flex-col gap-1" >
129- < span className = "text-sm font-medium" > Memory API</ span >
130- < span className = "text-sm text-muted-foreground" > Store and retrieve context</ span >
131- </ div >
132- < div className = "flex flex-col gap-1" >
133- < span className = "text-sm font-medium" > Ops dashboard</ span >
134- < span className = "text-sm text-muted-foreground" > Monitor usage and exports</ span >
135- </ div >
136- </ div >
137- </ CardContent >
138- < CardFooter >
139- < p className = "text-sm text-muted-foreground" >
140- Built for agents that need stable memory across deploys, sessions, and frameworks.
141- </ p >
142- </ CardFooter >
143- </ Card >
59+ < MotionDiv variants = { landingCard } whileHover = { landingHover } whileTap = { { scale : 0.99 } } >
60+ < HeroConsole />
14461 </ MotionDiv >
14562 </ div >
14663 </ MotionSection >
0 commit comments