a7ec5395dd
Three reviewer-flagged corrections, none with UX impact: - Category Routing block on the landing page still showed pre-v4.0 model labels (`ultrabrain → GPT 5.4`, `deep → GPT 5.3 Codex`, `quick → Claude Haiku 4.5`) which contradicted the rest of the page after the model refresh. Pinned them to the actual primary chains (`ultrabrain → GPT 5.5 xHigh`, `deep → GPT 5.5 Medium`, `quick → GPT 5.4 Mini`). Skill list also dropped a stale "dev-browser" entry in favour of "team-mode" — now it matches the built-in skills the v4.0 release ships. - OG/Twitter image metadata in app/layout.tsx claimed the hero was 1536×1024 — actual file is 1024×683. Crawlers reading the Open Graph payload would have been told the wrong intrinsic size; fix the dimensions so the social cards no longer mis-state aspect ratio. - e2e/example.spec.ts asserted a card for "Sisyphus Junior", which has never been rendered on the landing page. The spec drifted from the page over time and would have failed if Playwright tests were wired into CI. Pruned the list to the nine agents actually rendered.
114 lines
3.4 KiB
TypeScript
114 lines
3.4 KiB
TypeScript
import type { Metadata } from "next"
|
|
import { GeistSans } from "geist/font/sans"
|
|
import { GeistMono } from "geist/font/mono"
|
|
import Script from "next/script"
|
|
import "./globals.css"
|
|
|
|
const primarySiteUrl = "https://ohmyopenagent.com"
|
|
|
|
export const metadata: Metadata = {
|
|
metadataBase: new URL(primarySiteUrl),
|
|
title: {
|
|
default: "Oh My OpenAgent — The Best Agent Harness",
|
|
template: "%s | Oh My OpenAgent",
|
|
},
|
|
description:
|
|
"Meet Sisyphus: The batteries-included agent that codes like you. Multi-model orchestration, Team Mode, background agents, 50+ lifecycle hooks.",
|
|
keywords: [
|
|
"opencode",
|
|
"oh-my-opencode",
|
|
"openagent",
|
|
"oh-my-openagent",
|
|
"ai agent",
|
|
"code agent",
|
|
"sisyphus",
|
|
"multi-model",
|
|
"team mode",
|
|
"agent orchestration",
|
|
"claude",
|
|
"gpt",
|
|
"gemini",
|
|
"coding assistant",
|
|
],
|
|
authors: [{ name: "Yeongyu Kim", url: "https://github.com/code-yeongyu" }],
|
|
creator: "Yeongyu Kim",
|
|
openGraph: {
|
|
type: "website",
|
|
locale: "en_US",
|
|
url: primarySiteUrl,
|
|
siteName: "Oh My OpenAgent",
|
|
title: "Oh My OpenAgent — The Best Agent Harness",
|
|
description:
|
|
"Meet Sisyphus: The batteries-included agent that codes like you. Multi-model orchestration, Team Mode, background agents, 50+ lifecycle hooks.",
|
|
images: [{ url: "/images/hero.webp", width: 1024, height: 683, alt: "Oh My OpenAgent" }],
|
|
},
|
|
twitter: {
|
|
card: "summary_large_image",
|
|
title: "Oh My OpenAgent — The Best Agent Harness",
|
|
description: "Meet Sisyphus: The batteries-included agent that codes like you.",
|
|
images: ["/images/hero.webp"],
|
|
},
|
|
robots: {
|
|
index: true,
|
|
follow: true,
|
|
googleBot: {
|
|
index: true,
|
|
follow: true,
|
|
},
|
|
},
|
|
}
|
|
|
|
const jsonLd = {
|
|
"@context": "https://schema.org",
|
|
"@type": "SoftwareApplication",
|
|
name: "Oh My OpenAgent",
|
|
applicationCategory: "DeveloperApplication",
|
|
operatingSystem: "macOS, Linux, Windows",
|
|
url: primarySiteUrl,
|
|
author: {
|
|
"@type": "Person",
|
|
name: "Yeongyu Kim",
|
|
url: "https://github.com/code-yeongyu",
|
|
},
|
|
description:
|
|
"The batteries-included agent harness for OpenCode. Multi-model orchestration, Team Mode, background agents, 50+ lifecycle hooks.",
|
|
offers: {
|
|
"@type": "Offer",
|
|
price: "0",
|
|
priceCurrency: "USD",
|
|
},
|
|
}
|
|
|
|
const gaMeasurementId = "G-S0QJFKT46Q"
|
|
const gaTrackedDomain = "ohmyopenagent.com"
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html
|
|
lang="en"
|
|
className={`dark ${GeistSans.variable} ${GeistMono.variable}`}
|
|
suppressHydrationWarning
|
|
>
|
|
<body className="flex min-h-screen flex-col bg-[#0a0a0a] text-[#ededed] antialiased">
|
|
<Script id="google-analytics-loader" strategy="lazyOnload">
|
|
{`if (typeof window !== 'undefined' && window.location.hostname === '${gaTrackedDomain}') {
|
|
var s = document.createElement('script');
|
|
s.async = true;
|
|
s.src = 'https://www.googletagmanager.com/gtag/js?id=${gaMeasurementId}';
|
|
document.head.appendChild(s);
|
|
window.dataLayer = window.dataLayer || [];
|
|
function gtag(){dataLayer.push(arguments);}
|
|
gtag('js', new Date());
|
|
gtag('config', '${gaMeasurementId}', { cookie_domain: '${gaTrackedDomain}' });
|
|
}`}
|
|
</Script>
|
|
<script
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
|
|
/>
|
|
{children}
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|