Files
benevoles/frontend/README.md
T
AdamThomasandClaude Sonnet 5 ac469f0cd1 Frontend : intégration du design Claude Design (6 écrans)
Portage du projet « Bénévoles Festival.dc.html » en implémentation statique
pilotée par un jeu de démonstration déterministe (portage du générateur du
design : 15 postes, 64 bénévoles, ~209 affectations).

- Système visuel néo-brutaliste : palette + primitives Tailwind, polices
  Archivo / DM Mono, primitives dans components/ui.tsx.
- Domaine (aligné CLAUDE.md) : types, jours/plages, moteur de validation
  (mêmes codes BLOCKING/WARNING que le back-end), sélecteurs, différentiel
  de publication.
- État applicatif : PlanningProvider (reducer) — affecter / désaffecter /
  publier / confirmer / éditer besoins et bénévoles / import simulé / pointage.
- Écrans : 01 Grille des besoins + panneau d'affectation (candidats triés,
  alertes), 02 Vue par bénévole, 03 Publication, 04 Mobile bénévole,
  05 Mobile référent, 06 Configuration (4 sous-onglets).
- i18n : aucun texte d'interface en dur, locales/fr.json.
- Vérifs : build tsc + vite, eslint (0 erreur), rendu headless des 6 écrans
  (npm run smoke).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AwswqSChc3Rwtu61pRXiY2
2026-09-09 23:16:38 +02:00

65 lines
3.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Frontend — Gestion des bénévoles
React + Vite + TypeScript + Tailwind. Interface en français, code en anglais.
Intégration du design Claude Design « Bénévoles Festival »
(`Bénévoles Festival.dc.html`) : les 6 écrans du projet sont implémentés en
statique, pilotés par un **jeu de démonstration déterministe** (portage du
générateur du design). Le branchement sur l'API back-end est l'étape suivante.
## Écrans (onglets)
| # | Route | Écran |
|---|----------------------|----------------------------------------------------------|
| 01 | `/grille` | Grille des besoins (postes × jours × plages) + panneau d'affectation (candidats triés, alertes bloquantes / avertissements) |
| 02 | `/benevoles` | Vue par bénévole (affectations + disponibilités déclarées, surcharge / oubliés) |
| 03 | `/publication` | Différentiel brouillon ↔ version publiée, aperçu du message, publication |
| 04 | `/mobile-benevole` | Maquette mobile : planning personnel, confirmation de créneau |
| 05 | `/mobile-referent` | Maquette mobile : pointage de l'équipe sur le créneau en cours |
| 06 | `/configuration` | Grille des besoins, bénévoles & import, messages & envois, règles du festival |
## Commandes
| Action | Commande |
|------------------------|-----------------------------|
| Installer | `npm install` |
| Dev (hot reload) | `npm run dev` → http://localhost:5173 |
| Build de production | `npm run build` |
| Lint | `npm run lint` |
| Vérif. de types | `npm run typecheck` |
| Rendu headless des 6 écrans | `npm run smoke` |
En dev, Vite proxifie `/api` vers le backend (`VITE_API_TARGET`, défaut
`http://localhost:8000`).
## Conventions
- **Aucun texte d'interface en dur.** Tout passe par `src/i18n` (`t(key, params)`)
et `src/i18n/locales/fr.json`. Les libellés *de données* (nom d'un poste,
d'une plage, d'une journée) sont portés par l'entité — ils viendront de l'API.
- Code, noms de fichiers et de variables en anglais. Alias `@/` → `src/`.
- Vocabulaire métier : glossaire FR ↔ EN de `CLAUDE.md`.
- Le moteur de validation (`src/domain/rules.ts`) reprend le contrat du back-end
(CLAUDE.md §3) : violations typées `BLOCKING` / `WARNING`, jamais de phrase.
## Arborescence
```
src/
├── main.tsx # point d'entrée (Router + PlanningProvider)
├── app/
│ ├── AppShell.tsx # en-tête + onglets + badge brouillon
│ ├── router.tsx # routes (tableau réutilisable)
│ └── planning-store.tsx # état + actions (reducer) sur le jeu de démo
├── domain/
│ ├── types.ts # modèle (aligné CLAUDE.md)
│ ├── festival.ts # jours, plages, helpers temps
│ ├── rules.ts # moteur de validation (portage back-end)
│ ├── selectors.ts # index des affectations, surcharge
│ └── publication.ts # différentiel de publication
├── mock/ # jeu de démonstration déterministe
├── components/ui.tsx # primitives visuelles (bordures/ombres franches)
├── pages/ # un fichier par écran (+ sous-dossiers grille/, config/, mobile/)
└── i18n/ # t() + locales/fr.json
```