- 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
39 lines
1.5 KiB
Markdown
39 lines
1.5 KiB
Markdown
# 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.toggle` vs `setAttribute`
|
|
- 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`.
|
|
|
|
```yaml
|
|
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.
|