portfolio_v2/app/layout.tsx
franck ec005b1622 Refonte du portfolio : profil GitHub, CV, SEO, export statique
- Accueil façon profil GitHub (bio, homelab, projets épinglés, parcours)
  avec fond dégradé et panneaux liquid glass
- /cv : consultable en ligne (thème sombre), imprimable en PDF propre
  (thème clair, 1 page) ; numéro de téléphone non scrapable
- Pages d'erreur 404 / 500 / global-error animées (GSAP)
- Métadonnées : Open Graph, Twitter, JSON-LD Person, sitemap, robots
  (allowlist Google + bots d'aperçu, reste bloqué)
- Images OG et favicon en PNG statiques
- Contenu du CV : Saint-Paul, langues, expériences détaillées
- Export statique (output: export) + DEPLOY.md
- Retrait de l'indicateur de dev Next.js et des fichiers du starter

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T3hzMzvei419MwkKFZkvMX
2026-09-08 19:33:47 +04:00

87 lines
2.1 KiB
TypeScript

import type { Metadata, Viewport } from "next";
import "./globals.css";
import Intro from "./intro";
const SITE = "https://francktwl.fr";
const NAME = "Franck Thiaw-Woaye-Lapierre";
const TAGLINE = "Développeur web & DevOps à La Réunion";
const DESCRIPTION =
"Franck Thiaw-Woaye-Lapierre — étudiant en L3 informatique à La Réunion. " +
"Développement web (Laravel, React) et DevOps : serveurs Linux, Docker, auto-hébergement.";
export const metadata: Metadata = {
metadataBase: new URL(SITE),
title: {
default: `${NAME} — ${TAGLINE}`,
template: `%s · ${NAME}`,
},
description: DESCRIPTION,
applicationName: `${NAME} · Portfolio`,
authors: [{ name: NAME, url: SITE }],
creator: NAME,
publisher: NAME,
keywords: [
NAME,
"Franck Thiaw Woaye Lapierre",
"francktwl",
"développeur La Réunion",
"développeur web Réunion",
"DevOps La Réunion",
"DevOps Réunion 974",
"administrateur système Réunion",
"développeur Laravel Réunion",
"auto-hébergement",
"Linux",
"Docker",
"portfolio développeur Réunion",
],
category: "technology",
alternates: { canonical: "/" },
openGraph: {
type: "profile",
firstName: "Franck",
lastName: "Thiaw-Woaye-Lapierre",
username: "francktwl",
url: SITE,
siteName: `${NAME} — Portfolio`,
title: `${NAME} — ${TAGLINE}`,
description: DESCRIPTION,
locale: "fr_FR",
},
twitter: {
card: "summary_large_image",
title: `${NAME} — ${TAGLINE}`,
description: DESCRIPTION,
},
robots: {
index: true,
follow: true,
googleBot: {
index: true,
follow: true,
"max-image-preview": "large",
"max-snippet": -1,
"max-video-preview": -1,
},
},
};
export const viewport: Viewport = {
themeColor: "#0d1117",
};
export default function RootLayout({ children }: LayoutProps<"/">) {
return (
<html lang="fr" className="h-full">
<body className="min-h-full antialiased">
{children}
<Intro />
<noscript>
<style>{`[data-intro-overlay]{display:none!important}`}</style>
</noscript>
</body>
</html>
);
}