Files
AgentCompany/landing/app/layout.tsx
T
ZacharyZhang-NYandClaude Opus 5.5 2d7af224dd
CI / Typecheck, lint, tests, e2e (push) Failing after 3m51s
Website: 16-bit pixel-art rebuild with a live Three.js office, downloads from Gitea v1.5.1
- Title screen over a real-time voxel office rendered at low resolution and quantized to a rotating 32-colour palette with Bayer dithering; day part and season re-light the scene and every surface.
- 16-bit UI kit: name-plate dialogs, menu cursor, inventory, XP bar, badges, NPC speech, GAME OVER with CONTINUE, hand-placed 12x12 icons, Fusion Pixel font (Latin subset preloaded).
- Sections as a game: quest log (onboarding), character select (AI CEO / AI Co-Founder), inventory (features), party roster (providers), live download XP, save point (all v1.5.1 builds), FAQ as NPC dialog, credits.
- Downloads and source point to the Gitea release; the download function only redirects to git.zacharyzhang.com.
- Tailwind and the old components removed; unit tests for platform/downloads, rewritten e2e suite.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 23:37:23 -04:00

76 lines
2.3 KiB
TypeScript

import type { Metadata, Viewport } from "next";
import type { ReactNode } from "react";
import "./globals.css";
import { PaletteClock } from "../components/pixel";
import { description, faqs } from "../lib/content";
import { RELEASE_PAGE_URL, releaseVersion } from "../lib/release-links";
import { WEBSITE_URL } from "../lib/site-constants";
const title = "AgentCompany · Run an autonomous AI company on your desktop";
export const metadata: Metadata = {
metadataBase: new URL(WEBSITE_URL),
title,
description,
alternates: { canonical: "/" },
openGraph: {
title,
description,
url: "/",
siteName: "AgentCompany",
locale: "en_US",
type: "website",
images: [{ url: "/images/og.jpg", width: 1200, height: 630, alt: "The AgentCompany desktop app" }],
},
twitter: { card: "summary_large_image", title, description, images: ["/images/og.jpg"] },
robots: { index: true, follow: true },
icons: {
icon: [
{ url: "/favicon.ico?v=2", sizes: "any", type: "image/x-icon" },
{ url: "/icon.png?v=2", type: "image/png" },
],
apple: "/icon.png?v=2",
},
};
export const viewport: Viewport = { width: "device-width", initialScale: 1 };
const jsonLd = [
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "AgentCompany",
applicationCategory: "BusinessApplication",
operatingSystem: "macOS, Windows, Linux",
softwareVersion: releaseVersion,
url: WEBSITE_URL,
downloadUrl: RELEASE_PAGE_URL,
description,
offers: { "@type": "Offer", price: "0", priceCurrency: "USD" },
inLanguage: ["en", "zh-Hans"],
},
{
"@context": "https://schema.org",
"@type": "FAQPage",
mainEntity: faqs.map((faq) => ({
"@type": "Question",
name: faq.question,
acceptedAnswer: { "@type": "Answer", text: faq.answer.join(" ") },
})),
},
];
export default function RootLayout({ children }: Readonly<{ children: ReactNode }>) {
return (
<html lang="en" suppressHydrationWarning>
<head>
<link rel="preload" href="/fonts/FusionPixel-12px-latin.woff2" as="font" type="font/woff2" crossOrigin="anonymous" />
<script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />
</head>
<body>
<PaletteClock>{children}</PaletteClock>
</body>
</html>
);
}