cmux/web/app/layout.tsx
Lawrence Chen d25f14a79f Add landing page (web/) with Next.js + Tailwind
- Minimal centered layout with Geist sans font
- Typing animation cycling through agent names
- Light/dark mode toggle via next-themes
- Download for Mac button linking to latest DMG
- Feature list, GitHub + Docs footer links
- Meta tags and Open Graph for SEO
- CI: add web typecheck job (tsc --noEmit)
2026-02-09 20:51:27 -08:00

60 lines
1.6 KiB
TypeScript

import type { Metadata } from "next";
import { Geist, Geist_Mono } from "next/font/google";
import { Providers } from "./providers";
import "./globals.css";
const geistSans = Geist({
variable: "--font-geist-sans",
subsets: ["latin"],
});
const geistMono = Geist_Mono({
variable: "--font-geist-mono",
subsets: ["latin"],
});
export const metadata: Metadata = {
title: "cmux — The terminal built for multitasking",
description:
"Native macOS terminal built on Ghostty. Vertical tabs, notification rings when agents need attention, split panes, and a socket API for automation.",
keywords: [
"terminal",
"macOS",
"coding agents",
"Claude Code",
"Codex",
"Ghostty",
"AI",
],
openGraph: {
title: "cmux — The terminal built for multitasking",
description:
"Native macOS terminal built on Ghostty. Vertical tabs, notification rings, split panes, and a socket API.",
url: "https://cmux.dev",
siteName: "cmux",
type: "website",
},
twitter: {
card: "summary",
title: "cmux — The terminal built for multitasking",
description:
"Native macOS terminal built on Ghostty. Vertical tabs, notification rings, split panes, and a socket API.",
},
metadataBase: new URL("https://cmux.dev"),
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" suppressHydrationWarning>
<body
className={`${geistSans.variable} ${geistMono.variable} font-sans antialiased`}
>
<Providers>{children}</Providers>
</body>
</html>
);
}