sochboard/ROADMAP.md
maxsoch 528e8bcbbb feat: initial Sochboard dashboard
- 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
2026-07-24 08:59:17 +02:00

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.