Files
wehub-resource-sync 1a390b2815
Scorecard supply-chain security / Scorecard analysis (push) Failing after 1s
/ test (push) Failing after 0s
secretlint / Run secretlint to diff files (push) Failing after 1s
UI-TARS E2E Test / E2E (macos-13) (push) Has been cancelled
UI-TARS E2E Test / E2E (macos-latest) (push) Has been cancelled
UI-TARS E2E Test / E2E (windows-latest) (push) Has been cancelled
CI Test, Typecheck / Test & Typecheck (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:08:49 +08:00

61 lines
1.5 KiB
TypeScript

import { Analytics } from '@vercel/analytics/next';
import type { Metadata } from 'next';
import { Inter } from 'next/font/google';
import localFont from 'next/font/local';
import './globals.css';
import { PostHogProvider } from './components/PosthogProvider';
const inter = Inter({
subsets: ['latin'],
variable: '--font-inter',
});
const ppNeue = localFont({
src: '../fonts/PPNeueMontreal-Medium.otf',
variable: '--font-pp-neue',
});
const ppSupply = localFont({
src: '../fonts/PPSupplySans-Regular.otf',
variable: '--font-pp-supply',
});
export const metadata: Metadata = {
title: 'Open Operator',
description: 'Watch AI browse the web, for free',
openGraph: {
images: ['/og.png'],
title: 'Open Operator',
description: 'Watch AI browse the web, for free',
url: 'https://operator.browserbase.com',
},
icons: {
icon: [
{ url: '/favicon.svg', type: 'image/svg+xml' },
{ url: '/favicon.ico' },
],
},
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<head>
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
{/* Fallback for browsers that don't support SVG favicons */}
<link rel="alternate icon" href="/favicon.ico" />
</head>
<body
className={`${inter.variable} ${ppNeue.variable} ${ppSupply.variable} font-sans antialiased bg-white text-gray-900`}
>
<PostHogProvider>{children}</PostHogProvider>
<Analytics />
</body>
</html>
);
}