feat: wire up landing page routes and layout

This commit is contained in:
codebanditssss 2026-06-03 21:57:38 +05:30
parent d0c053e99e
commit 93f904e429
4 changed files with 100 additions and 0 deletions

View File

@ -0,0 +1,32 @@
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.",
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.",
images: [{ url: "/og-image.png", width: 1024, height: 1024, alt: "Agent Orchestrator" }],
},
twitter: {
card: "summary",
site: "@aoagents",
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.",
images: ["/og-image.png"],
},
alternates: {
canonical: "https://aoagents.dev/",
},
};
export default function LandingLayout({ children }: { children: React.ReactNode }) {
return <>{children}</>;
}

View File

@ -0,0 +1,44 @@
import { LandingNav } from "../../components/LandingNav";
import { LandingHero } from "../../components/LandingHero";
import { LandingAbout } from "../../components/LandingAbout";
import { LandingAgentsBar } from "../../components/LandingAgentsBar";
import { LandingStats } from "../../components/LandingStats";
import { LandingVideo } from "../../components/LandingVideo";
import { LandingFeatures } from "../../components/LandingFeatures";
import { LandingWorkflow } from "../../components/LandingWorkflow";
import { LandingUseCases } from "../../components/LandingUseCases";
import { LandingTestimonials } from "../../components/LandingTestimonials";
import { LandingHowItWorks } from "../../components/LandingHowItWorks";
import { LandingQuickStart } from "../../components/LandingQuickStart";
import { LandingCTA } from "../../components/LandingCTA";
import { ScrollRevealProvider } from "../../components/ScrollRevealProvider";
import { PageConstellation } from "../../components/PageConstellation";
import { formatCompactNumber, getGitHubRepoStats } from "../../lib/github-repo";
export default async function LandingPage() {
const githubStats = await getGitHubRepoStats();
return (
<ScrollRevealProvider>
<PageConstellation />
<div className="relative z-10">
<LandingNav />
<LandingHero starsLabel={formatCompactNumber(githubStats.stars)} />
<LandingAbout />
<LandingAgentsBar />
<LandingFeatures />
<div id="workflow"><LandingWorkflow /></div>
<div id="usecases"><LandingUseCases /></div>
<LandingHowItWorks />
<LandingVideo />
<LandingStats stats={githubStats} />
<LandingTestimonials />
<div id="quickstart"><LandingQuickStart /></div>
<LandingCTA />
<footer className="py-12 px-8 text-center text-[var(--landing-muted)] opacity-30 text-[0.8125rem] border-t border-white/[0.04]">
MIT Licensed · Open Source
</footer>
</div>
</ScrollRevealProvider>
);
}

View File

@ -0,0 +1,15 @@
import type { Metadata } from "next";
import "../styles/globals.css";
export const metadata: Metadata = {
title: "Agent Orchestrator",
description: "Open-source platform for running parallel AI coding agents.",
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<body>{children}</body>
</html>
);
}

View File

@ -0,0 +1,9 @@
import LandingPage from "./landing/page";
export default function HomePage() {
return (
<div className="landing-page min-h-screen">
<LandingPage />
</div>
);
}