Next.js 14 website with standalone output configured for Docker deployment. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { Syne, Plus_Jakarta_Sans } from "next/font/google";
|
||
import "./globals.css";
|
||
import { Header } from "@/components/layout/Header";
|
||
import { Footer } from "@/components/layout/Footer";
|
||
import { WhatsAppButton } from "@/components/shared/WhatsAppButton";
|
||
import { CookieConsent } from "@/components/shared/CookieConsent";
|
||
import { generateOrganizationSchema, generateLocalBusinessSchema } from "@/lib/structured-data";
|
||
|
||
const syne = Syne({
|
||
subsets: ["latin"],
|
||
variable: "--font-syne",
|
||
display: "swap",
|
||
});
|
||
|
||
const jakarta = Plus_Jakarta_Sans({
|
||
subsets: ["latin"],
|
||
variable: "--font-jakarta",
|
||
display: "swap",
|
||
});
|
||
|
||
export const metadata: Metadata = {
|
||
title: "The Anatolian Edit | Istanbul's Asian Side, Curated for You",
|
||
description:
|
||
"Curated experiences on Istanbul's Asian side. Small-group tours through Kadıköy, Moda, Bağdat Caddesi and the coastline that 90% of visitors never see.",
|
||
metadataBase: new URL("https://theanatolianedit.com"),
|
||
openGraph: {
|
||
title: "The Anatolian Edit | Istanbul's Asian Side, Curated for You",
|
||
description:
|
||
"Curated experiences on Istanbul's Asian side. Small-group tours through Kadıköy, Moda, Bağdat Caddesi and the coastline that 90% of visitors never see.",
|
||
url: "https://theanatolianedit.com",
|
||
siteName: "The Anatolian Edit",
|
||
locale: "en_US",
|
||
type: "website",
|
||
},
|
||
twitter: {
|
||
card: "summary_large_image",
|
||
title: "The Anatolian Edit",
|
||
description:
|
||
"Curated experiences on Istanbul's Asian side.",
|
||
},
|
||
robots: {
|
||
index: true,
|
||
follow: true,
|
||
},
|
||
};
|
||
|
||
export default function RootLayout({
|
||
children,
|
||
}: Readonly<{
|
||
children: React.ReactNode;
|
||
}>) {
|
||
return (
|
||
<html lang="en" className={`${syne.variable} ${jakarta.variable}`}>
|
||
<head>
|
||
<script
|
||
type="application/ld+json"
|
||
dangerouslySetInnerHTML={{
|
||
__html: JSON.stringify(generateOrganizationSchema()),
|
||
}}
|
||
/>
|
||
<script
|
||
type="application/ld+json"
|
||
dangerouslySetInnerHTML={{
|
||
__html: JSON.stringify(generateLocalBusinessSchema()),
|
||
}}
|
||
/>
|
||
</head>
|
||
<body className="font-body text-deep-nazar bg-aegean-white antialiased">
|
||
<Header />
|
||
<main>{children}</main>
|
||
<Footer />
|
||
<WhatsAppButton />
|
||
<CookieConsent />
|
||
</body>
|
||
</html>
|
||
);
|
||
}
|