| | |
| | import type { Metadata, Viewport } from "next"; |
| | import { Inter, PT_Sans } from "next/font/google"; |
| | import { cookies } from "next/headers"; |
| |
|
| | import TanstackProvider from "@/components/providers/tanstack-query-provider"; |
| | import "@/assets/globals.css"; |
| | import { Toaster } from "@/components/ui/sonner"; |
| | import MY_TOKEN_KEY from "@/lib/get-cookie-name"; |
| | import { apiServer } from "@/lib/api"; |
| | import AppContext from "@/components/contexts/app-context"; |
| |
|
| | const inter = Inter({ |
| | variable: "--font-inter-sans", |
| | subsets: ["latin"], |
| | }); |
| |
|
| | const ptSans = PT_Sans({ |
| | variable: "--font-ptSans-mono", |
| | subsets: ["latin"], |
| | weight: ["400", "700"], |
| | }); |
| |
|
| | export const metadata: Metadata = { |
| | title: "DeepSite | Build with AI ✨", |
| | description: |
| | "DeepSite is a web development tool that helps you build websites with AI, no code required. Let's deploy your website with DeepSite and enjoy the magic of AI.", |
| | openGraph: { |
| | title: "DeepSite | Build with AI ✨", |
| | description: |
| | "DeepSite is a web development tool that helps you build websites with AI, no code required. Let's deploy your website with DeepSite and enjoy the magic of AI.", |
| | url: "https://deepsite.hf.co", |
| | siteName: "DeepSite", |
| | images: [ |
| | { |
| | url: "https://deepsite.hf.co/banner.png", |
| | width: 1200, |
| | height: 630, |
| | alt: "DeepSite Open Graph Image", |
| | }, |
| | ], |
| | }, |
| | twitter: { |
| | card: "summary_large_image", |
| | title: "DeepSite | Build with AI ✨", |
| | description: |
| | "DeepSite is a web development tool that helps you build websites with AI, no code required. Let's deploy your website with DeepSite and enjoy the magic of AI.", |
| | images: ["https://deepsite.hf.co/banner.png"], |
| | }, |
| | appleWebApp: { |
| | capable: true, |
| | title: "DeepSite", |
| | statusBarStyle: "black-translucent", |
| | }, |
| | themeColor: "#000000", |
| | icons: { |
| | icon: "/logo.svg", |
| | shortcut: "/logo.svg", |
| | apple: "/logo.svg", |
| | }, |
| | }; |
| |
|
| | export const viewport: Viewport = { |
| | initialScale: 1, |
| | maximumScale: 1, |
| | themeColor: "#000000", |
| | }; |
| |
|
| | async function getMe() { |
| | const cookieStore = await cookies(); |
| | const token = cookieStore.get(MY_TOKEN_KEY())?.value; |
| | if (!token) return { user: null, errCode: null }; |
| | try { |
| | const res = await apiServer.get("/me", { |
| | headers: { |
| | Authorization: `Bearer ${token}`, |
| | }, |
| | }); |
| | return { user: res.data.user, errCode: null }; |
| | } catch (err: any) { |
| | return { user: null, errCode: err.status }; |
| | } |
| | } |
| |
|
| | export default async function RootLayout({ |
| | children, |
| | }: Readonly<{ |
| | children: React.ReactNode; |
| | }>) { |
| | const data = await getMe(); |
| | return ( |
| | <html lang="en"> |
| | <body |
| | className={`${inter.variable} ${ptSans.variable} antialiased bg-black dark`} |
| | > |
| | <Toaster richColors position="bottom-center" /> |
| | <TanstackProvider> |
| | <AppContext me={data}>{children}</AppContext> |
| | </TanstackProvider> |
| | </body> |
| | </html> |
| | ); |
| | } |
| |
|