File size: 3,387 Bytes
13ae717
 
 
 
0b6b0ac
13ae717
 
 
 
 
 
829f9f6
bd69b27
13ae717
 
 
0b6b0ac
 
 
13ae717
 
0b6b0ac
13ae717
0b6b0ac
 
 
bd69b27
13ae717
bd69b27
13ae717
bd69b27
13ae717
bd69b27
13ae717
bd69b27
13ae717
 
 
 
 
bd69b27
13ae717
 
 
 
 
bd69b27
13ae717
bd69b27
13ae717
 
 
 
bd69b27
13ae717
 
 
bd69b27
 
 
13ae717
 
 
 
 
 
 
0b6b0ac
 
13ae717
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ec51066
 
13ae717
0b6b0ac
 
 
 
13ae717
0b6b0ac
 
829f9f6
 
 
 
 
0b6b0ac
ec1f23a
0b6b0ac
93d579e
13ae717
 
 
 
0b6b0ac
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/* eslint-disable @typescript-eslint/no-explicit-any */
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";
import Script from "next/script";
import { BRAND_NAME, BRAND_ICON_SRC } from "@/lib/branding";

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: `${BRAND_NAME} | Build with AI ✨`,
  description:
    `${BRAND_NAME} is a web development tool that helps you build websites with AI, no code required. Let's deploy your website and enjoy the magic of AI.`,
  openGraph: {
    title: `${BRAND_NAME} | Build with AI ✨`,
    description:
      `${BRAND_NAME} is a web development tool that helps you build websites with AI, no code required. Let's deploy your website and enjoy the magic of AI.`,
    url: "https://deepsite.hf.co",
    siteName: BRAND_NAME,
    images: [
      {
        url: "https://deepsite.hf.co/banner.png",
        width: 1200,
        height: 630,
        alt: `${BRAND_NAME} Open Graph Image`,
      },
    ],
  },
  twitter: {
    card: "summary_large_image",
    title: `${BRAND_NAME} | Build with AI ✨`,
    description:
      `${BRAND_NAME} is a web development tool that helps you build websites with AI, no code required. Let's deploy your website and enjoy the magic of AI.`,
    images: ["https://deepsite.hf.co/banner.png"],
  },
  appleWebApp: {
    capable: true,
    title: BRAND_NAME,
    statusBarStyle: "black-translucent",
  },
  icons: {
    icon: BRAND_ICON_SRC,
    shortcut: BRAND_ICON_SRC,
    apple: BRAND_ICON_SRC,
  },
};

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 };
  }
}

// if domain isn't deepsite.hf.co or enzostvs-deepsite.hf.space redirect to deepsite.hf.co

export default async function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  const data = await getMe();
  return (
    <html lang="en">
      <Script
        defer
        data-domain="deepsite.hf.co"
        src="https://plausible.io/js/script.js"
      ></Script>
      <body
        className={`${inter.variable} ${ptSans.variable} antialiased bg-black dark h-[100dvh] overflow-hidden`}
      >
  {/* Iframe embed warning removed; EMBED_MODE controls behavior */}
        <Toaster richColors position="bottom-center" />
        <TanstackProvider>
          <AppContext me={data}>{children}</AppContext>
        </TanstackProvider>
      </body>
    </html>
  );
}