From 08e16c5431777d19598a3ad559ea169fe357898d Mon Sep 17 00:00:00 2001 From: codebanditssss Date: Fri, 3 Jul 2026 23:02:18 +0530 Subject: [PATCH] made it btr --- frontend/src/landing/app/landing/layout.tsx | 6 +- .../landing/components/LandingAgentsBar.tsx | 67 +++++----- .../landing/components/LandingFeatures.tsx | 125 ++++++++---------- .../src/landing/components/LandingHero.tsx | 8 +- .../landing/components/LandingSocialProof.tsx | 2 +- .../src/landing/components/LandingVideo.tsx | 2 +- frontend/src/landing/styles/globals.css | 76 +++++++---- 7 files changed, 158 insertions(+), 128 deletions(-) diff --git a/frontend/src/landing/app/landing/layout.tsx b/frontend/src/landing/app/landing/layout.tsx index cc782ff10..14fa68907 100644 --- a/frontend/src/landing/app/landing/layout.tsx +++ b/frontend/src/landing/app/landing/layout.tsx @@ -3,14 +3,14 @@ import type { Metadata } from "next"; export const metadata: Metadata = { title: "Agent Orchestrator", description: - "Open-source platform for running parallel AI coding agents. Spawn Claude Code, Codex, Aider, and more in isolated worktrees — all managed from one dashboard.", + "Open-source platform for running parallel AI coding agents. Spawn Claude Code, Codex, Aider, and more in isolated worktrees - all managed from one dashboard.", openGraph: { type: "website", url: "https://aoagents.dev/landing", siteName: "Agent Orchestrator", title: "Agent Orchestrator", description: - "Open-source platform for running parallel AI coding agents. Spawn Claude Code, Codex, Aider, and more in isolated worktrees — all managed from one dashboard.", + "Open-source platform for running parallel AI coding agents. Spawn Claude Code, Codex, Aider, and more in isolated worktrees - all managed from one dashboard.", images: [{ url: "/og-image.png", width: 1024, height: 1024, alt: "Agent Orchestrator" }], }, twitter: { @@ -19,7 +19,7 @@ export const metadata: Metadata = { creator: "@aoagents", title: "Agent Orchestrator", description: - "Open-source platform for running parallel AI coding agents. Spawn Claude Code, Codex, Aider, and more in isolated worktrees — all managed from one dashboard.", + "Open-source platform for running parallel AI coding agents. Spawn Claude Code, Codex, Aider, and more in isolated worktrees - all managed from one dashboard.", images: ["/og-image.png"], }, alternates: { diff --git a/frontend/src/landing/components/LandingAgentsBar.tsx b/frontend/src/landing/components/LandingAgentsBar.tsx index 91648ecce..bfa21536b 100644 --- a/frontend/src/landing/components/LandingAgentsBar.tsx +++ b/frontend/src/landing/components/LandingAgentsBar.tsx @@ -31,40 +31,47 @@ export function LandingAgentsBar() {
-
-
-
- Coverage -

- One Daemon. 23 Agent Harnesses. -

+
+
+
+
+ Coverage +

+ Use the agent you already trust. + AO keeps the workflow the same. +

+
-

- Swap harnesses per project. The daemon does not care which CLI is in the pane - adapters obey one port. -

-
-
-
-
-
-
-
- {marqueeAgents.map((agent, index) => ( -
-
- +
+
+
+
+ {marqueeAgents.map((agent, index) => ( +
+
+ +
+
{agent.name}
-
- {agent.name} -
-
- ))} + ))} +
+
+ +
+ 23 harnesses + one daemon + per-project agent choice
diff --git a/frontend/src/landing/components/LandingFeatures.tsx b/frontend/src/landing/components/LandingFeatures.tsx index 5cc3276dc..f2ff29ff9 100644 --- a/frontend/src/landing/components/LandingFeatures.tsx +++ b/frontend/src/landing/components/LandingFeatures.tsx @@ -329,25 +329,7 @@ export function LandingFeatures() { return (
-
-
-
-
What's inside
-

- Run the agent you already use. - AO wraps the workflow around it. -

-
-
-

- Your agents stay native terminal tools. AO standardizes launch, restore, hooks, and PR ownership through - one adapter contract. -

-
-
-
- - {/* Desktop: pinned, snapping viewport — text + mockup crossfade per feature. */} + {/* Desktop: pinned, snapping viewport - text + mockup crossfade per feature. */}
@@ -422,8 +404,8 @@ function FeatureNarrative({ worker, orchestrator }: { worker: AgentHarness; orch >

Run {worker.name}, {orchestrator.name}, Cursor, or - Aider unchanged. AO standardizes the workflow around them —{" "} - restore, prompts, hooks, and ownership — so you can pick one agent to write and + Aider unchanged. AO standardizes the workflow around them -{" "} + restore, prompts, hooks, and ownership - so you can pick one agent to write and another to supervise.

@@ -449,8 +431,8 @@ function AgentHarnessDemo({ const visibleAgents = primaryAgents.filter((agent) => ["claude-code", "codex", "cursor", "goose"].includes(agent.id)); return ( -
-
+
+
@@ -458,22 +440,22 @@ function AgentHarnessDemo({
/repo/agent-orchestrator
-
- adapter contract +
+ adapter
-
-
-
+
+
+
setTargetSlot("worker")} /> setTargetSlot("orchestrator")} @@ -493,7 +475,7 @@ function AgentHarnessDemo({ setTargetSlot("orchestrator"); onOrchestratorChange(agent.id); }} - className={`group relative flex min-h-[70px] cursor-pointer flex-col items-start justify-between overflow-hidden rounded-md border p-3 text-left transition duration-200 ease-out hover:-translate-y-0.5 hover:border-white/15 hover:bg-white/[0.045] ${ + className={`group relative flex min-h-[64px] cursor-pointer flex-col items-start justify-between overflow-hidden rounded-md border p-2.5 text-left transition duration-200 ease-out hover:-translate-y-0.5 hover:border-white/15 hover:bg-white/[0.045] ${ workerId === agent.id ? "border-white/18 bg-white/[0.055]" : "border-[color:var(--border)] bg-white/[0.025]" @@ -501,33 +483,33 @@ function AgentHarnessDemo({ aria-pressed={workerId === agent.id} >
- + {agent.restore.includes("fresh") ? "new" : "resume"}
-
{agent.name}
+
{agent.name}
{agent.org}
))}
-
- Click sets the worker. Double-click promotes. +
+ Click sets worker. Double-click promotes.
-
-
+
+
-
Launch preview
+
Launch preview
same daemon route, different native CLI
-
+
ready
@@ -549,6 +531,9 @@ function AgentHarnessDemo({
+
+ selected route stays local +
@@ -568,15 +553,15 @@ function AgentSelectLabel({ }) { return ( @@ -754,7 +739,7 @@ function WorkspaceIsolationDemo({
-
+
@@ -793,7 +778,7 @@ function WorkspaceNarrative({ workspace }: { workspace: (typeof workspaceSession meta={workspace.id} >

- Each session runs in its own git worktree — separate branch, terminal, and diff. + Each session runs in its own git worktree - separate branch, terminal, and diff. One agent can fail CI while another keeps shipping, and cleanup is just removing the worktree.

@@ -819,7 +804,7 @@ function FeedbackNarrative({ feedback }: { feedback: (typeof feedbackSessions)[n >

AO watches CI, reviews, and PR state, then routes each result to the session that - owns the branch — so the agent gets actionable context, not a vague “CI failed” ping you have to trace yourself. + owns the branch - so the agent gets actionable context, not a vague “CI failed” ping you have to trace yourself.

); @@ -837,7 +822,7 @@ function FeedbackRoutingDemo({ const [sentSession, setSentSession] = useState(null); return ( -
+
Pull requests
@@ -850,8 +835,8 @@ function FeedbackRoutingDemo({
-
- -
-
-
+
+
+
{feedback.number} -

+

{feedback.title}

@@ -906,9 +894,9 @@ function FeedbackRoutingDemo({
@@ -939,6 +927,9 @@ function FeedbackRoutingDemo({
+
+ feedback routes to session {feedback.session} +
@@ -947,7 +938,7 @@ function FeedbackRoutingDemo({ function DaemonControlDemo() { return ( -
+
Local control plane
@@ -1028,7 +1019,7 @@ function DaemonNarrative() { >

The desktop app and ao CLI are clients of one local daemon that owns{" "} - sessions, worktrees, and live events. Start in the terminal, inspect in the app — + sessions, worktrees, and live events. Start in the terminal, inspect in the app - same control plane.

diff --git a/frontend/src/landing/components/LandingHero.tsx b/frontend/src/landing/components/LandingHero.tsx index 31f601472..0b809f372 100644 --- a/frontend/src/landing/components/LandingHero.tsx +++ b/frontend/src/landing/components/LandingHero.tsx @@ -580,6 +580,7 @@ export function LandingHero() { async function loadGitHubStars() { try { const response = await fetch(GITHUB_REPO_API_URL, { + cache: "no-store", headers: { Accept: "application/vnd.github+json", }, @@ -599,9 +600,11 @@ export function LandingHero() { } void loadGitHubStars(); + const intervalId = window.setInterval(loadGitHubStars, 5 * 60 * 1000); return () => { cancelled = true; + window.clearInterval(intervalId); }; }, []); @@ -655,7 +658,7 @@ export function LandingHero() { />
diff --git a/frontend/src/landing/components/LandingVideo.tsx b/frontend/src/landing/components/LandingVideo.tsx index 8e78b6ff0..95886c181 100644 --- a/frontend/src/landing/components/LandingVideo.tsx +++ b/frontend/src/landing/components/LandingVideo.tsx @@ -13,7 +13,7 @@ export function LandingVideo() {
diff --git a/frontend/src/landing/styles/globals.css b/frontend/src/landing/styles/globals.css index baf1e01bf..3d022a9f2 100644 --- a/frontend/src/landing/styles/globals.css +++ b/frontend/src/landing/styles/globals.css @@ -240,7 +240,7 @@ body::-webkit-scrollbar, letter-spacing: -0.02em; } -/* Pinned feature swap layers — GSAP owns visibility once mounted; this is just +/* Pinned feature swap layers - GSAP owns visibility once mounted; this is just the pre-JS / first-paint state so only the first feature shows (no stacking). */ .fp-panel, .fp-mock { @@ -252,32 +252,34 @@ body::-webkit-scrollbar, } .landing-hero-heading { - max-width: 1080px; - font-size: clamp(44px, 5.1vw, 66px); - font-weight: 650; - line-height: 1; + max-width: 980px; + font-family: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia, ui-serif, serif; + font-size: clamp(48px, 5.55vw, 76px); + font-weight: 700; + line-height: 0.96; letter-spacing: 0; color: var(--fg); } .landing-hero-heading-setup { font-size: 1em; - font-weight: 650; - line-height: 1; + font-weight: 700; + line-height: 0.96; color: color-mix(in oklab, var(--fg) 72%, var(--fg-muted)); } .landing-hero-heading-action { - margin-top: 0; + margin-top: 0.04em; font-size: 1em; - font-weight: 650; - line-height: 1; + font-weight: 700; + line-height: 0.96; color: var(--fg); } .landing-hero-heading-accent { color: #82aaff; - font-weight: 650; + font-style: italic; + font-weight: 700; } .landing-body { @@ -308,8 +310,8 @@ body::-webkit-scrollbar, letter-spacing: 0; } -/* Fluid, non-jittery hover. No scale/translate on the button itself — scaling - text rasterises it and looks blurry — so hover is expressed purely through +/* Fluid, non-jittery hover. No scale/translate on the button itself - scaling + text rasterises it and looks blurry - so hover is expressed purely through brightness + shadow. Only a brief press uses a tiny transform. */ .hero-pressable { transition: @@ -374,7 +376,7 @@ body::-webkit-scrollbar, transition-duration: 90ms; } -/* GitHub "star" celebration — the count badge lights up and the star pops +/* GitHub "star" celebration - the count badge lights up and the star pops with a couple of sparkles when the button is hovered. */ .gh-star-btn .gh-star { transition: @@ -467,6 +469,38 @@ body::-webkit-scrollbar, background: rgba(255, 255, 255, 0.025); } +.agent-logo-pill { + border: 1px solid rgba(255, 255, 255, 0.07); + border-radius: 999px; + background: rgba(255, 255, 255, 0.025); + transition: + border-color 0.16s ease, + background 0.16s ease; +} + +.agent-logo-pill:hover { + border-color: rgba(255, 255, 255, 0.16); + background: rgba(255, 255, 255, 0.045); +} + +.agent-logo-pill-icon { + display: flex; + align-items: center; + justify-content: center; + width: 28px; + height: 28px; +} + +.agent-logo-pill-icon .agent-logo-image { + width: 100%; + height: 100%; +} + +.agent-logo-image-kilocode { + filter: brightness(2.2) contrast(1.15); + opacity: 0.95; +} + .agent-logo-frame { display: flex; align-items: center; @@ -485,11 +519,8 @@ body::-webkit-scrollbar, } .agent-logo-tile .agent-logo-image { - filter: grayscale(1) saturate(0) brightness(1.65) contrast(0.72); - opacity: 0.72; - transition: - opacity 0.16s ease, - filter 0.16s ease; + opacity: 0.9; + transition: opacity 0.16s ease; } .group:hover .agent-logo-image { @@ -497,8 +528,7 @@ body::-webkit-scrollbar, } .group:hover .agent-logo-tile .agent-logo-image { - filter: grayscale(1) saturate(0) brightness(1.9) contrast(0.84); - opacity: 0.92; + opacity: 1; } @keyframes agents-marquee { @@ -942,7 +972,7 @@ body::-webkit-scrollbar, animation-iteration-count: 1; } -/* Stacked feature panel — front slides up into view, peek fades in behind */ +/* Stacked feature panel - front slides up into view, peek fades in behind */ @keyframes landing-stack-front { from { transform: translateY(28px); @@ -1017,7 +1047,7 @@ body::-webkit-scrollbar, animation: landing-node-pulse 1.5s ease-out infinite; } -/* Git-graph node pulse (SVG circle — box-shadow doesn't apply, so animate r/opacity) */ +/* Git-graph node pulse (SVG circle - box-shadow doesn't apply, so animate r/opacity) */ @keyframes landing-graph-pulse { 0% { r: 5px;