Spaces:
Running
Running
File size: 4,277 Bytes
c10f8f8 33718e1 de2f961 c10f8f8 8bce833 c10f8f8 de2f961 c10f8f8 de2f961 c10f8f8 de2f961 8bce833 c10f8f8 8bce833 c10f8f8 8bce833 c10f8f8 de2f961 56f47b1 dd2ee70 56f47b1 c10f8f8 de2f961 33718e1 56f47b1 8bce833 6cca3b1 8bce833 6cca3b1 8bce833 de2f961 5994edd 8bce833 5994edd 8b785d6 5994edd c10f8f8 56f47b1 c10f8f8 de2f961 |
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 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
/* eslint-disable @typescript-eslint/no-explicit-any */
import type { Metadata, Viewport } from "next";
import { Inter, PT_Sans } from "next/font/google";
import Script from "next/script";
import { headers } from "next/headers";
import { redirect } from "next/navigation";
import "@/assets/globals.css";
import { Toaster } from "@/components/ui/sonner";
import IframeDetector from "@/components/iframe-detector";
import AppContext from "@/components/contexts/app-context";
import TanstackContext from "@/components/contexts/tanstack-query-context";
import { LoginProvider } from "@/components/contexts/login-context";
import { ProProvider } from "@/components/contexts/pro-context";
import { generateSEO, generateStructuredData } from "@/lib/seo";
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 = {
...generateSEO({
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.",
path: "/",
}),
appleWebApp: {
capable: true,
title: "DeepSite",
statusBarStyle: "black-translucent",
},
icons: {
icon: "/logo.svg",
shortcut: "/logo.svg",
apple: "/logo.svg",
},
verification: {
google: process.env.GOOGLE_SITE_VERIFICATION,
},
};
export const viewport: Viewport = {
initialScale: 1,
maximumScale: 1,
themeColor: "#000000",
};
// async function getMe() {
// const cookieStore = await cookies();
// const cookieName = MY_TOKEN_KEY();
// const token = cookieStore.get(cookieName)?.value;
// if (!token) return { user: null, projects: [], errCode: null };
// try {
// const res = await apiServer.get("/me", {
// headers: {
// Authorization: `Bearer ${token}`,
// },
// });
// return { user: res.data.user, projects: res.data.projects, errCode: null };
// } catch (err: any) {
// return { user: null, projects: [], errCode: err.status };
// }
// }
export default async function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
// Domain redirect check
const headersList = await headers();
const forwardedHost = headersList.get("x-forwarded-host");
const host = headersList.get("host");
const hostname = (forwardedHost || host || "").split(":")[0];
const isLocalDev =
hostname === "localhost" ||
hostname === "127.0.0.1" ||
hostname.startsWith("192.168.");
const isHuggingFace =
hostname === "huggingface.co" || hostname.endsWith(".huggingface.co");
if (!isHuggingFace && !isLocalDev) {
const pathname = headersList.get("x-invoke-path") || "/deepsite";
redirect(`https://huggingface.co${pathname}`);
}
// const data = await getMe();
// Generate structured data
const structuredData = generateStructuredData("WebApplication", {
name: "DeepSite",
description: "Build websites with AI, no code required",
url: "https://huggingface.co/deepsite",
});
const organizationData = generateStructuredData("Organization", {
name: "DeepSite",
url: "https://huggingface.co/deepsite",
});
return (
<html lang="en">
<body
className={`${inter.variable} ${ptSans.variable} antialiased bg-black dark h-[100dvh] overflow-hidden`}
>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify(structuredData),
}}
/>
);
}
|