- Next.js 16 App Router with TypeScript + Tailwind CSS v4 - YAML config read at runtime via server components (force-dynamic) - Zod validation for config schema (site, theme, sections, links) - Dark/light theme with CSS variables and client-side toggle - Dashboard layout: header (logo + title), sections, responsive card grid - Horizontal card layout (icon left, text right) with optional vertical mode - Lucide React icons with fallback, custom iconUrl support for SVG icons - Glassmorphism cards with hover/focus/keyboard accessibility - Mobile responsive: 2 columns on mobile, up to 5 on xl screens - Docker multi-stage build with docker-compose volume for config - Standalone Next.js output for production - CONFIGURATION.md and ROADMAP.md documentation
1.5 KiB
1.5 KiB
Roadmap
iOS — Bouton thème non fonctionnel
Le bouton de bascule thème clair/sombre ne répond pas au toucher sur Firefox iOS.
Pistes :
- Contourner le système d'événements React (addEventListener natif) — essayé, sans effet
- Remplacer
<button>par un<a>ou<div role="button>— à tester - Vérifier le comportement iOS WebKit avec
classList.togglevssetAttribute - Tester avec un bouton complètement isolé (hors du header, hors des composants dashboard)
- Vérifier si le problème persiste dans une page vide sans CSS gradient
Filtrage par en-têtes HTTP (ex: Authelia)
Masquer/afficher des sections ou des liens en fonction des en-têtes HTTP envoyés par un reverse proxy ou un provider d'authentification (Authelia, Authentik, etc.).
Cas d'usage : un lien d'administration n'apparaît que si l'utilisateur a le groupe admin dans X-Forwarded-Groups.
links:
- id: "admin"
name: "Admin"
url: "https://admin.example.com"
icon: "Shield"
requiredHeaders:
X-Forwarded-Groups: "admin"
sections:
- id: "superviseurs"
title: "Supervision"
requiredHeaders:
X-Forwarded-Groups: "superviseur"
Côté serveur : utiliser headers() de next/headers pour lire les en-têtes au SSR et filtrer les sections/liens avant le rendu.
Sécurité : les en-têtes ne sont pas modifiables côté client (ils viennent du reverse proxy). Pas de risque de contournement par un utilisateur non auth.