46 lines
1.4 KiB
TypeScript
46 lines
1.4 KiB
TypeScript
import type { Metadata, Viewport } from "next";
|
|
import "./globals.css";
|
|
import { BottomNav } from "@/components/BottomNav";
|
|
import { Providers } from "@/components/Providers";
|
|
import { ErrorBoundary } from "@/components/ErrorBoundary";
|
|
import { SearchOverlay } from "@/components/SearchOverlay";
|
|
|
|
export const metadata: Metadata = {
|
|
title: "Hermes OS",
|
|
description: "Mobile dashboard for Hermes Agent",
|
|
icons: { icon: "/favicon.svg", apple: "/icon-192.png" },
|
|
appleWebApp: { capable: true, statusBarStyle: "black-translucent", title: "Hermes" },
|
|
};
|
|
|
|
export const viewport: Viewport = {
|
|
themeColor: "#0a0a0f",
|
|
width: "device-width",
|
|
initialScale: 1,
|
|
maximumScale: 1,
|
|
viewportFit: "cover",
|
|
};
|
|
|
|
export default function RootLayout({ children }: { children: React.ReactNode }) {
|
|
return (
|
|
<html lang="en">
|
|
<head>
|
|
<link rel="manifest" href="/manifest.json" />
|
|
</head>
|
|
<body className="antialiased">
|
|
<Providers>
|
|
<main className="min-h-screen pb-safe px-4 pt-4 max-w-lg mx-auto">
|
|
<ErrorBoundary>{children}</ErrorBoundary>
|
|
</main>
|
|
<BottomNav />
|
|
<SearchOverlay />
|
|
</Providers>
|
|
<script
|
|
dangerouslySetInnerHTML={{
|
|
__html: `if("serviceWorker"in navigator)window.addEventListener("load",()=>navigator.serviceWorker.register("/sw.js"))`,
|
|
}}
|
|
/>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|