|
1
|
import type { Metadata } from "next"; |
|
2
|
import { Inter } from "next/font/google"; |
|
3
|
import "./globals.css"; |
|
4
|
import { SiteNav } from "@/components/site-nav"; |
|
5
|
import { SiteFooter } from "@/components/site-footer"; |
|
6
|
|
|
7
|
const inter = Inter({ |
|
8
|
subsets: ["latin"], |
|
9
|
variable: "--font-inter", |
|
10
|
display: "swap", |
|
11
|
}); |
|
12
|
|
|
13
|
const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL ?? "https://getsiti.5mb.app"; |
|
14
|
|
|
15
|
export const metadata: Metadata = { |
|
16
|
metadataBase: new URL(SITE_URL), |
|
17
|
title: { |
|
18
|
default: "Siti AI: a private on-device AI assistant", |
|
19
|
template: "%s · Siti AI", |
|
20
|
}, |
|
21
|
description: |
|
22
|
"Siti AI is a private, on-device AI assistant for macOS and iOS. Your conversations stay on your device.", |
|
23
|
openGraph: { |
|
24
|
title: "Siti AI: a private on-device AI assistant", |
|
25
|
description: |
|
26
|
"A private, on-device AI assistant for macOS and iOS. Your conversations stay on your device.", |
|
27
|
url: SITE_URL, |
|
28
|
siteName: "Siti AI", |
|
29
|
type: "website", |
|
30
|
}, |
|
31
|
twitter: { |
|
32
|
card: "summary_large_image", |
|
33
|
title: "Siti AI: a private on-device AI assistant", |
|
34
|
description: |
|
35
|
"A private, on-device AI assistant for macOS and iOS. Your conversations stay on your device.", |
|
36
|
}, |
|
37
|
}; |
|
38
|
|
|
39
|
export default function RootLayout({ |
|
40
|
children, |
|
41
|
}: Readonly<{ children: React.ReactNode }>) { |
|
42
|
return ( |
|
43
|
<html lang="en" className={inter.variable}> |
|
44
|
<body className="flex min-h-screen flex-col bg-bg text-ink"> |
|
45
|
<SiteNav /> |
|
46
|
<main className="flex-1">{children}</main> |
|
47
|
<SiteFooter /> |
|
48
|
</body> |
|
49
|
</html> |
|
50
|
); |
|
51
|
} |