63 lines
2.4 KiB
TypeScript
63 lines
2.4 KiB
TypeScript
import React from "react";
|
|
import type { Metadata } from "next";
|
|
import { Toaster } from "sonner";
|
|
import { LocaleProvider } from "@/components/locale-provider";
|
|
import { ThemeProvider } from "@/components/theme-provider";
|
|
import { RouteReveal } from "@/components/route-reveal";
|
|
import "./globals.css";
|
|
|
|
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,
|
|
},
|
|
icons: {
|
|
icon: [
|
|
{ url: "/icon-light-32x32.png", sizes: "32x32", type: "image/png", media: "(prefers-color-scheme: light)" },
|
|
{ url: "/icon-dark-32x32.png", sizes: "32x32", type: "image/png", media: "(prefers-color-scheme: dark)" },
|
|
{ url: "/icon.svg", type: "image/svg+xml" },
|
|
],
|
|
apple: "/apple-icon.png",
|
|
},
|
|
};
|
|
|
|
export default function RootLayout({ children }: Readonly<{ children: React.ReactNode }>) {
|
|
return (
|
|
<html lang="en">
|
|
<body className="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>
|
|
<RouteReveal />
|
|
{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" } }} />
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|