Bootstrap posthog-js with the persisted install ID from the server, forward distinctId to API routes, and restructure feedback traces to use chronological conversation order.
56 lines
1.7 KiB
TypeScript
56 lines
1.7 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import { Suspense } from "react";
|
|
import { getOrCreateAnonymousId } from "@/lib/telemetry";
|
|
import { PostHogProvider } from "./components/posthog-provider";
|
|
import "./globals.css";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "DenchClaw",
|
|
description:
|
|
"AI Workspace with an agent that connects to your apps and does the work for you",
|
|
};
|
|
|
|
export const viewport: Viewport = {
|
|
width: "device-width",
|
|
initialScale: 1,
|
|
maximumScale: 1,
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
const anonymousId = getOrCreateAnonymousId();
|
|
|
|
return (
|
|
<html lang="en" suppressHydrationWarning>
|
|
<head>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
<link
|
|
rel="preconnect"
|
|
href="https://fonts.gstatic.com"
|
|
crossOrigin="anonymous"
|
|
/>
|
|
<link
|
|
href="https://fonts.googleapis.com/css2?family=Instrument+Serif:ital@0;1&family=Inter:wght@300;400;500;600;700&display=swap"
|
|
rel="stylesheet"
|
|
/>
|
|
{/* Inline script to prevent FOUC — reads localStorage or system preference */}
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `try{if(localStorage.theme==="dark"||(!("theme" in localStorage)&&window.matchMedia("(prefers-color-scheme: dark)").matches)){document.documentElement.classList.add("dark")}else{document.documentElement.classList.remove("dark")}}catch(e){}`,
|
|
}}
|
|
/>
|
|
</head>
|
|
<body className="antialiased">
|
|
<Suspense fallback={null}>
|
|
<PostHogProvider anonymousId={anonymousId}>
|
|
{children}
|
|
</PostHogProvider>
|
|
</Suspense>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|