Files
0pt/app/layout.tsx
T
adminandClaude Sonnet 4.6 ec97fbe910 feat: open graph + robots metadata for social sharing
Adds metadataBase, og:title/description/url/siteName/type, twitter card,
and robots index/follow to the root layout for proper link previews when
0pt.app links are shared in Slack, email, or social.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 17:50:34 +02:00

57 lines
2.3 KiB
TypeScript

import React from "react";
import type { Metadata } from "next";
import { Inter, JetBrains_Mono } from "next/font/google";
import { Analytics } from "@vercel/analytics/next";
import { Toaster } from "sonner";
import { LocaleProvider } from "@/components/locale-provider";
import { ThemeProvider } from "@/components/theme-provider";
import "./globals.css";
const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
const jetbrainsMono = JetBrains_Mono({ subsets: ["latin"], variable: "--font-jetbrains-mono" });
export const metadata: Metadata = {
title: "0pt — your data",
description:
"Data services on demand for the Nordics & Europe. Provenance per field, GDPR-native. Compose your data job, pay 50% to start, watch production live, and validate the result with full transparency.",
generator: "0pt.app",
metadataBase: new URL("https://0pt.app"),
openGraph: {
title: "0pt — your data",
description: "Nordic & European data services. Provenance per field. GDPR-native. 50/50 escrow.",
url: "https://0pt.app",
siteName: "0pt",
locale: "en_US",
type: "website",
},
twitter: {
card: "summary",
title: "0pt — your data",
description: "Nordic & European data services. Provenance per field. GDPR-native.",
},
robots: {
index: true,
follow: true,
},
};
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
return (
<html lang="en">
<body className={`${inter.variable} ${jetbrainsMono.variable} font-sans antialiased`}>
<a
href="#main-content"
className="sr-only focus:not-sr-only focus:fixed focus:left-4 focus:top-4 focus:z-[100] focus:bg-foreground focus:px-4 focus:py-2 focus:font-mono focus:text-[11px] focus:uppercase focus:tracking-[0.12em] focus:text-background"
>
Skip to content
</a>
<ThemeProvider attribute="class" defaultTheme="light" enableSystem={false}>
<LocaleProvider>{children}</LocaleProvider>
</ThemeProvider>
<Toaster position="bottom-right" toastOptions={{ classNames: { toast: "font-mono text-xs tracking-[0.06em] rounded-none border border-border bg-background text-foreground", title: "font-mono", description: "font-mono text-muted-foreground" } }} />
<Analytics />
</body>
</html>
);
}