From a21bd6a6710d123ef3bfc3c9aab37fc0c276f9c5 Mon Sep 17 00:00:00 2001 From: ertopogo Date: Thu, 19 Feb 2026 11:34:16 +0100 Subject: feat: initial project setup - Next.js 16, Payload CMS v3, palette Mapuche Next.js 16 App Router + TypeScript + Tailwind CSS v4. Payload CMS v3 with PostgreSQL adapter. Mapuche Corporate palette. Public pages, Docker Compose + Caddy, security middleware. Co-authored-by: Cursor --- src/components/layout/Footer.tsx | 113 +++++++++++++++++++++++++++++++++++++++ src/components/layout/Header.tsx | 93 ++++++++++++++++++++++++++++++++ 2 files changed, 206 insertions(+) create mode 100644 src/components/layout/Footer.tsx create mode 100644 src/components/layout/Header.tsx (limited to 'src/components') diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx new file mode 100644 index 0000000..472e029 --- /dev/null +++ b/src/components/layout/Footer.tsx @@ -0,0 +1,113 @@ +import Link from "next/link"; +import { Shield, Mail, Linkedin, Github } from "lucide-react"; + +const footerLinks = { + services: [ + { name: "Audit IAM", href: "/services#audit" }, + { name: "Intégration OIDC", href: "/services#oidc" }, + { name: "Migration Zero Trust", href: "/services#zero-trust" }, + { name: "Sécurisation AD / Entra", href: "/services#ad-entra" }, + ], + resources: [ + { name: "Articles", href: "/articles" }, + { name: "Démo OIDC", href: "/demos/oidc-flow" }, + { name: "Démo OAuth", href: "/demos/oauth-playground" }, + { name: "Démo Zero Trust", href: "/demos/zero-trust" }, + ], +}; + +export function Footer() { + return ( +
+
+
+
+ +
+ +
+ Der-topogo + +

+ Consulting senior en Identity & Access Management et sécurité + informatique. Expert OIDC, OAuth, Zero Trust, AD, Entra ID. +

+
+ +
+

+ Services +

+
    + {footerLinks.services.map((link) => ( +
  • + + {link.name} + +
  • + ))} +
+
+ +
+

+ Ressources +

+
    + {footerLinks.resources.map((link) => ( +
  • + + {link.name} + +
  • + ))} +
+
+ +
+

+ Contact +

+ +
+
+ +
+

+ © {new Date().getFullYear()} Der-topogo. Tous droits réservés. +

+
+
+
+ ); +} diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx new file mode 100644 index 0000000..01cc271 --- /dev/null +++ b/src/components/layout/Header.tsx @@ -0,0 +1,93 @@ +"use client"; + +import { useState } from "react"; +import Link from "next/link"; +import { Menu, X, Shield } from "lucide-react"; +import { cn } from "@/lib/utils"; + +const navigation = [ + { name: "Accueil", href: "/" }, + { name: "Services", href: "/services" }, + { name: "Articles", href: "/articles" }, + { name: "Démos", href: "/demos" }, + { name: "À propos", href: "/about" }, +]; + +export function Header() { + const [mobileMenuOpen, setMobileMenuOpen] = useState(false); + + return ( +
+ +
+ ); +} -- cgit v1.2.3