diff --git a/README.md b/README.md index da6628a..13442ab 100644 --- a/README.md +++ b/README.md @@ -2,21 +2,21 @@ Portfolio personnel de développeur web, construit avec **Next.js** et un ensemble de technologies modernes. - - - + + +  --- ## ✨ Fonctionnalités -- ⚡ **Next.js App Router** & Server Components -- 🎨 **Tailwind CSS** pour un design moderne et responsive -- 📧 **Formulaire de contact** via API Route -- 🗺️ **Sitemap dynamique** pour un SEO optimisé -- 🌐 **PWA Ready** (manifest + icônes) -- 🔥 **Animations fluides** et transitions modernes +- ⚡ **Next.js App Router** & Server Components +- 🎨 **Tailwind CSS** pour un design moderne et responsive +- 📧 **Formulaire de contact** via API Route +- 🗺️ **Sitemap dynamique** pour un SEO optimisé +- 🌐 **PWA Ready** (manifest + icônes) +- 🔥 **Animations fluides** et transitions modernes --- @@ -115,9 +115,9 @@ Ce projet est sous licence **MIT** – voir le fichier [LICENSE](LICENSE) pour p **Jessy David** -- 🌐 Website : [jessy-david.dev](https://jessy-david.dev) -- 🐙 GitHub : [@jessydavid-dev](https://github.com/jessydavid-dev) -- 📧 Email : [contact@jessy-david.dev](mailto:contact@jessy-david.dev) +- 🌐 Website : [jessy-david.dev](https://jessy-david.dev) +- 🐙 GitHub : [@jessydavid-dev](https://github.com/jessydavid-dev) +- 📧 Email : [contact@jessy-david.dev](mailto:contact@jessy-david.dev) --- diff --git a/app/layout.tsx b/app/layout.tsx index be7a855..6d755e5 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,5 +1,6 @@ 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"; @@ -7,216 +8,257 @@ import { ReactNode } from "react"; import "./globals.css"; const inter = Inter({ - subsets: ["latin"], - display: "swap", - variable: "--font-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", + 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}`, + 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, - keywords: siteConfig.keywords, - authors: [{ name: siteConfig.author, url: siteConfig.url }], - creator: siteConfig.author, - publisher: siteConfig.author, + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: `${siteConfig.name} - Portfolio Développeur Web`, + type: "image/jpeg", + }, + ], + }, - metadataBase: new URL(siteConfig.url), - alternates: { - canonical: "/", - languages: { - "fr-FR": "/", - }, - }, + twitter: { + card: "summary_large_image", + title: siteConfig.title, + description: siteConfig.description, + creator: siteConfig.twitterHandle, + images: [siteConfig.ogImage], + }, - 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, - }, - }, + 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", + }, + ], + }, - 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", - }, - ], - }, + manifest: "/site.webmanifest", - twitter: { - card: "summary_large_image", - title: siteConfig.title, - description: siteConfig.description, - creator: siteConfig.twitterHandle, - images: [siteConfig.ogImage], - }, + category: "technology", - 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", - }, - ], - }, + verification: { + google: "ton-code-google-search-console", + }, - manifest: "/site.webmanifest", - - category: "technology", - - verification: { - google: "ton-code-google-search-console", - }, - - other: { - "msapplication-TileColor": "#0f172a", - "theme-color": "#0f172a", - }, + 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", + 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", - }, - ], + "@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, + children, }: Readonly<{ - children: ReactNode; + children: ReactNode; }>) { - return ( - -
- + return ( + + + {/* Google Tag Manager - Consent Mode par défaut */} + + {/* Google Tag Manager */} + - - + - - - -+ Conformément à la loi n° 2004-575 du 21 juin 2004 pour la confiance + dans l'économie numérique +
++ Nom : Jessy DAVID +
++ Adresse : Angers, France +
++ Email :{" "} + + contact@jessy-david.dev + +
++ Site web :{" "} + + https://jessy-david.dev + +
++ Nom : QuantumCraft Studios +
++ Adresse : 58 RUE DE MONCEAU 75008 PARIS, FRANCE +
++ Site web :{" "} + + https://quantumcraft-studios.com + +
++ L'ensemble du contenu de ce site (textes, images, vidéos, + logos, graphismes, etc.) est la propriété exclusive de Jessy + DAVID, sauf mention contraire. Toute reproduction, + représentation, modification, publication, adaptation de tout ou + partie des éléments du site, quel que soit le moyen ou le + procédé utilisé, est interdite sans l'autorisation écrite + préalable de Jessy DAVID. +
++ Toute exploitation non autorisée du site ou de l'un + quelconque des éléments qu'il contient sera considérée + comme constitutive d'une contrefaçon et poursuivie + conformément aux dispositions des articles L.335-2 et suivants + du Code de Propriété Intellectuelle. +
++ Jessy DAVID s'efforce d'assurer au mieux de ses + possibilités l'exactitude et la mise à jour des + informations diffusées sur ce site, dont il se réserve le droit + de corriger, à tout moment et sans préavis, le contenu. + Toutefois, Jessy DAVID ne peut garantir l'exactitude, la + précision ou l'exhaustivité des informations mises à + disposition sur ce site. +
++ En conséquence, Jessy DAVID décline toute responsabilité pour + toute imprécision, inexactitude ou omission portant sur des + informations disponibles sur ce site. +
++ Le site jessy-david.dev peut contenir des liens hypertextes vers + d'autres sites. Jessy DAVID n'exerce aucun contrôle + sur ces sites et décline toute responsabilité quant à leur + contenu. La décision d'activer les liens appartient + exclusivement aux visiteurs du site. +
++ Conformément au Règlement Général sur la Protection des Données + (RGPD) et à la loi n° 78-17 du 6 janvier 1978 modifiée (loi + Informatique et Libertés), vous disposez d'un droit + d'accès, de rectification, de suppression et + d'opposition aux données personnelles vous concernant. +
++ Pour plus d'informations sur la collecte et le traitement + de vos données, veuillez consulter la{" "} + + Politique de Confidentialité + + . +
++ Pour exercer vos droits, vous pouvez me contacter à + l'adresse suivante :{" "} + + contact@jessy-david.dev + +
++ Ce site utilise des cookies pour améliorer l'expérience + utilisateur. Pour plus d'informations sur + l'utilisation des cookies, veuillez consulter la{" "} + + Politique de Confidentialité + + . +
++ Les présentes mentions légales sont régies par le droit + français. En cas de litige, les tribunaux français seront seuls + compétents. +
++ Conformément au RGPD et à la loi n° 78-17 du 6 janvier 1978 modifiée +
++ La présente politique de confidentialité a pour but + d'informer les utilisateurs du site jessy-david.dev de la + manière dont leurs données personnelles sont collectées, + traitées et protégées, conformément au Règlement Général sur la + Protection des Données (RGPD - Règlement UE 2016/679) et à la + loi n° 78-17 du 6 janvier 1978 relative à l'informatique, + aux fichiers et aux libertés, modifiée par la loi n° 2004-801 du + 6 août 2004. +
+
+ Responsable du traitement : Jessy DAVID
+
+ Email :{" "}
+
+ contact@jessy-david.dev
+
+
+ Je collecte les données personnelles suivantes dans le cadre de + l'utilisation de ce site : +
++ Les données personnelles sont collectées pour les finalités + suivantes : +
++ Vos données personnelles sont conservées pour une durée limitée + : +
++ À l'expiration de ces délais, vos données sont supprimées + ou anonymisées. +
++ Vos données personnelles sont strictement confidentielles et ne + sont communiquées qu'aux destinataires suivants : +
++ Je ne vends, ne loue, ni ne partage vos données personnelles + avec des tiers à des fins commerciales. +
++ Certains de mes prestataires (hébergeur, Cloudflare) peuvent + être situés en dehors de l'Union Européenne. Dans ce cas, + je m'assure que ces transferts sont encadrés par des + garanties appropriées conformément au RGPD (Clauses + Contractuelles Types, Data Privacy Framework, etc.). +
++ Ce site utilise des cookies pour assurer son bon fonctionnement + et améliorer votre expérience de navigation. +
+ ++ Vous pouvez à tout moment modifier vos préférences en matière de + cookies via la bannière de gestion des cookies accessible depuis + le bas de page. +
++ Conformément au RGPD et à la loi Informatique et Libertés, vous + disposez des droits suivants sur vos données personnelles : +
+
+
+ Je répondrai à votre demande dans un délai maximum de 30
+ jours.
+
+
+ Si vous estimez que le traitement de vos données personnelles + constitue une violation de vos droits, vous pouvez introduire + une réclamation auprès de la Commission Nationale de + l'Informatique et des Libertés (CNIL) : +
++ CNIL +
+3 Place de Fontenoy - TSA 80715
+75334 PARIS CEDEX 07
++ Site web :{" "} + + www.cnil.fr + +
++ Je mets en œuvre toutes les mesures techniques et + organisationnelles appropriées pour garantir un niveau de + sécurité adapté au risque : +
++ Je me réserve le droit de modifier cette politique de + confidentialité à tout moment. En cas de modification + substantielle, je vous en informerai par une notification + visible sur ce site. La date de dernière mise à jour sera + toujours indiquée en bas de cette page. +
++ Ce site utilise des cookies pour améliorer votre + expérience. Les cookies nécessaires sont essentiels au bon + fonctionnement du site. Vous pouvez choisir + d'accepter ou de refuser les cookies analytiques.{" "} + + En savoir plus + +
+ + {/* Boutons */} ++ Personnalisez vos préférences de cookies ci-dessous. +
+ + {/* Options de cookies */} ++ Essentiels au fonctionnement du site (session, + sécurité, préférences). +
++ Google Analytics pour comprendre comment vous + utilisez ce site. +
+