import Footer from "@/component/layout/Footer"; import NavBar from "@/component/layout/NavBar"; import CookieBanner from "@/component/ui/CookieBanner"; import GridBackground from "@/component/ui/GridBackground"; import type { Metadata, Viewport } from "next"; import { Inter } from "next/font/google"; import { ReactNode } from "react"; import "./globals.css"; const inter = Inter({ subsets: ["latin"], display: "swap", variable: "--font-inter", }); const siteConfig = { name: "Jessy David", title: "Jessy David | Développeur Web Full-Stack", description: "Développeur Web Full-Stack passionné, spécialisé en React, Next.js et Node.js. Création de sites web modernes, applications web performantes et solutions digitales sur mesure.", url: "https://jessy-david.dev", ogImage: "https://jessy-david.dev/og-image.jpg", author: "Jessy David", keywords: [ "développeur web", "développeur full-stack", "React", "Next.js", "Node.js", "TypeScript", "JavaScript", "création site web", "freelance", "France", "portfolio", "Jessy David", ], twitterHandle: "@jessydavid", }; export const metadata: Metadata = { title: { default: siteConfig.title, template: `%s | ${siteConfig.name}`, }, description: siteConfig.description, keywords: siteConfig.keywords, authors: [{ name: siteConfig.author, url: siteConfig.url }], creator: siteConfig.author, publisher: siteConfig.author, metadataBase: new URL(siteConfig.url), alternates: { canonical: "/", languages: { "fr-FR": "/", }, }, robots: { index: true, follow: true, nocache: false, googleBot: { index: true, follow: true, noimageindex: false, "max-video-preview": -1, "max-image-preview": "large", "max-snippet": -1, }, }, openGraph: { type: "website", locale: "fr_FR", url: siteConfig.url, siteName: siteConfig.name, title: siteConfig.title, description: siteConfig.description, images: [ { url: siteConfig.ogImage, width: 1200, height: 630, alt: `${siteConfig.name} - Portfolio Développeur Web`, type: "image/jpeg", }, ], }, twitter: { card: "summary_large_image", title: siteConfig.title, description: siteConfig.description, creator: siteConfig.twitterHandle, images: [siteConfig.ogImage], }, icons: { icon: [ { url: "/favicon.ico", sizes: "any" }, { url: "/favicon-16x16.png", sizes: "16x16", type: "image/png" }, { url: "/favicon-32x32.png", sizes: "32x32", type: "image/png" }, ], apple: [ { url: "/apple-touch-icon.png", sizes: "180x180", type: "image/png", }, ], }, manifest: "/site.webmanifest", category: "technology", verification: { google: "ton-code-google-search-console", }, other: { "msapplication-TileColor": "#0f172a", "theme-color": "#0f172a", }, }; export const viewport: Viewport = { themeColor: [ { media: "(prefers-color-scheme: light)", color: "#ffffff" }, { media: "(prefers-color-scheme: dark)", color: "#0f172a" }, ], width: "device-width", initialScale: 1, maximumScale: 5, userScalable: true, colorScheme: "dark", }; const jsonLd = { "@context": "https://schema.org", "@graph": [ { "@type": "WebSite", "@id": `${siteConfig.url}/#website`, url: siteConfig.url, name: siteConfig.name, description: siteConfig.description, inLanguage: "fr-FR", }, { "@type": "Person", "@id": `${siteConfig.url}/#person`, name: siteConfig.name, url: siteConfig.url, image: siteConfig.ogImage, jobTitle: "Développeur Web Full-Stack", description: siteConfig.description, sameAs: [ "https://github.com/jessydavid-dev", "https://linkedin.com/in/jessy-david", "https://twitter.com/jessydavid", ], knowsAbout: [ "React", "Next.js", "TypeScript", "Node.js", "JavaScript", "Tailwind CSS", "PostgreSQL", "MongoDB", ], }, { "@type": "ProfilePage", "@id": `${siteConfig.url}/#profilepage`, url: siteConfig.url, name: `Portfolio de ${siteConfig.name}`, description: siteConfig.description, mainEntity: { "@id": `${siteConfig.url}/#person` }, inLanguage: "fr-FR", }, ], }; export default function RootLayout({ children, }: Readonly<{ children: ReactNode; }>) { return ( {/* Google Tag Manager - Consent Mode par défaut */}