SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
3.1 KB · 70 lines tsx
Raw Blame History
1import type { Metadata, Viewport } from "next";2import { GeistSans } from "geist/font/sans";3import { GeistMono } from "geist/font/mono";4import { ThemeProvider } from "next-themes";5import { APP_URL } from "@/lib/env";6import { Toaster } from "@/components/ui/toast";7import { TooltipProvider } from "@/components/ui/tooltip";8import "./globals.css";910export const metadata: Metadata = {11  metadataBase: new URL(APP_URL),12  title: { default: "PolyLLM — One interface. Every model.", template: "%s · PolyLLM" },13  description:14    "PolyLLM is a universal control center for AI models. Bring your own API keys for OpenAI, Anthropic, Google Gemini, xAI, Mistral, DeepSeek, Kimi, OpenRouter and Cerebras, discover the latest models, configure them precisely and chat through one premium interface.",15  applicationName: "PolyLLM",16  keywords: ["LLM", "AI chat", "BYOK", "OpenAI", "Anthropic", "Gemini", "xAI", "Grok", "Claude", "GPT", "model comparison", "arena"],17  openGraph: {18    type: "website",19    siteName: "PolyLLM",20    title: "PolyLLM — One interface. Every model.",21    description: "Bring your own keys. Compare models. Control every parameter. Track every token. Your models. Your keys. One workspace.",22    locale: "en_US",23    url: APP_URL,24    images: [{ url: "/og.png", width: 1200, height: 630, alt: "PolyLLM" }],25  },26  twitter: { card: "summary_large_image", title: "PolyLLM — One interface. Every model.", description: "Bring your own keys. Compare models. Control every parameter. Track every token.", images: ["/og.png"] },27  authors: [{ name: "Simon-Pierre Boucher", url: "https://www.maclustr.io" }],28  creator: "Simon-Pierre Boucher",29  icons: {30    icon: [31      { url: "/icon.svg", type: "image/svg+xml" },32      { url: "/favicon-32.png", sizes: "32x32", type: "image/png" },33      { url: "/favicon-16.png", sizes: "16x16", type: "image/png" },34    ],35    shortcut: "/favicon.ico",36    apple: [{ url: "/apple-icon.png", sizes: "180x180" }],37  },38  manifest: "/manifest.webmanifest",39  appleWebApp: { capable: true, title: "PolyLLM", statusBarStyle: "black-translucent" },40  formatDetection: { telephone: false },41  robots: { index: true, follow: true },42};4344export const viewport: Viewport = {45  themeColor: [46    { media: "(prefers-color-scheme: light)", color: "#f7f7f5" },47    { media: "(prefers-color-scheme: dark)", color: "#0b0c10" },48  ],49  width: "device-width",50  initialScale: 1,51  viewportFit: "cover",52  // Let the browser resize the layout viewport when the keyboard opens (Chrome/Android); iOS uses visualViewport.53  interactiveWidget: "resizes-content",54};5556export default function RootLayout({ children }: { children: React.ReactNode }) {57  return (58    <html lang="en" suppressHydrationWarning className={`${GeistSans.variable} ${GeistMono.variable}`}>59      <body className="min-h-dvh bg-bg text-fg antialiased">60        <ThemeProvider attribute="class" defaultTheme="system" enableSystem disableTransitionOnChange>61          <TooltipProvider delayDuration={250}>62            {children}63            <Toaster />64          </TooltipProvider>65        </ThemeProvider>66      </body>67    </html>68  );69}70