diff --git a/app/layout.tsx b/app/layout.tsx index 07529a624..0a774cc8c 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -3,28 +3,35 @@ import { Toaster } from "sonner"; import { ThemeProvider } from "@/components/theme-provider"; import { FaviconUpdater } from "@/components/favicon-updater"; import { ImageDeliveryOptimizer } from "@/components/image-delivery-optimizer"; +import { getSiteSettings } from "@/lib/db/queries"; import "./globals.css"; import { SessionProvider } from "next-auth/react"; const metadataBase = resolveMetadataBase(); -export const metadata: Metadata = { - metadataBase, - title: { - template: "%s | yedir-ai", - default: "yedir-ai", - }, - description: "AI design workspace for Canvas, Agent workflows, image editing, 3D/CAD, and local AI operations.", - icons: { - icon: [ - { url: "/api/favicon", sizes: "any" }, - { url: "/api/favicon", type: "image/x-icon" }, - ], - apple: "/api/favicon", - shortcut: "/api/favicon", - }, -}; +export async function generateMetadata(): Promise { + const settings = await getSiteSettings().catch(() => null); + const siteName = String(settings?.siteName || "").trim() || "AI Chatbot"; + + return { + metadataBase, + title: { + template: `%s | ${siteName}`, + default: siteName, + }, + description: + "AI design workspace for Canvas, Agent workflows, image editing, 3D/CAD, and local AI operations.", + icons: { + icon: [ + { url: "/api/favicon", sizes: "any" }, + { url: "/api/favicon", type: "image/x-icon" }, + ], + apple: "/api/favicon", + shortcut: "/api/favicon", + }, + }; +} function resolveMetadataBase() { const candidate =