diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0371299..04490e8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -113,6 +113,27 @@ Registration (`POST /auth/register`) is handled by `AuthController` and `RegistrationService` (server-side bean validation plus duplicate username/email detection). +#### Design: Mockups and Wireframes + +The frontend look and feel is specified before code: + +- **[Figma file](https://www.figma.com/design/2q1Rt5NGbQ1w8gRtRGoF4A)** + (read-only): low-fidelity wireframes (page structure) and high-fidelity + mockups (Catppuccin theme). +- **[Browsable HTML mockups](docs/design/mockups/index.html)**: the same + pages as static HTML/CSS; their markup and BEM classes are the blueprint + for the future Thymeleaf templates. +- **[docs/design/theme-exploration.md](docs/design/theme-exploration.md)**: + the design tokens and their WCAG contrast ratios; + [mockups-explained.md](docs/design/mockups-explained.md) + (FR: [mockups-explained-fr.md](docs/design/mockups-explained-fr.md)) and + the per-file docs in [docs/design/mockups/](docs/design/mockups/) explain + every tag and CSS rule. + +Frontend contributions are expected to follow the mockups, consume colors +only through the design tokens, and use the BEM naming convention (see +[Code Style and Formatting](#code-style-and-formatting)). + #### MonoRepo We use a **monorepo**, that is a Git repository containing mainly both the **frontend and** the **backend**. diff --git a/README.md b/README.md index 18e7786..7671f6f 100644 --- a/README.md +++ b/README.md @@ -379,6 +379,12 @@ visit [this link](https://github.com/users/ebouchut/projects/7/views/3). - [GLOSSARY.md](GLOSSARY.md) — definitions of the domain and technical terms used across the project (🇫🇷 French version: [GLOSSAIRE.md](GLOSSAIRE.md)). - [Architecture Decision Records](docs/adr/README.md) — A list of design decisions and their trade-offs. +- [Mockups and wireframes (Figma)](https://www.figma.com/design/2q1Rt5NGbQ1w8gRtRGoF4A) — + read-only Figma file with the high-fidelity mockups (Catppuccin theme) and the + low-fidelity wireframes of the frontend pages; the browsable HTML mockups and + their study docs live in [docs/design/](docs/design/theme-exploration.md) + (see [mockups-explained.md](docs/design/mockups-explained.md), + 🇫🇷 [mockups-explained-fr.md](docs/design/mockups-explained-fr.md)). - [Test coverage (Codecov)](https://app.codecov.io/gh/ebouchut/learn-dev) — live coverage dashboard fed by CI (see [ADR-0012](docs/adr/0012-publish-test-coverage-to-codecov.md)); diff --git a/docs/design/mockups-explained-fr.md b/docs/design/mockups-explained-fr.md new file mode 100644 index 0000000..a225ef5 --- /dev/null +++ b/docs/design/mockups-explained-fr.md @@ -0,0 +1,676 @@ +# Les maquettes de learn-dev expliquées : register.html et home.html + +Une lecture commentée de deux fichiers de maquette +([mockups/register.html](mockups/register.html) et +[mockups/home.html](mockups/home.html)) +et du CSS qui les met en forme ([mockups/css/base.css](mockups/css/base.css) + +[mockups/css/theme-catppuccin.css](mockups/css/theme-catppuccin.css)). +Pour chaque élément : la balise choisie et pourquoi, le problème qu'elle +résout, l'ARIA impliqué, et les critères RGAA 4.1 satisfaits (le RGAA est la +déclinaison française de WCAG 2.1 AA à laquelle la certification DWWM fait +référence). + +> [!NOTE] +> 🇬🇧 English version: [mockups-explained.md](mockups-explained.md). +> Les deux fichiers doivent rester synchronisés. + +> Ces fichiers ont été choisis parce qu'à eux deux ils sollicitent tout le système : +> `register.html` est la vitrine de l'accessibilité (formulaires, erreurs, ARIA) ; +> `home.html` est la vitrine de la mise en page (grilles, contenu décoratif, composants). + +--- + +## Partie 1 : structure HTML + +### 1.1 Le squelette du document (les deux pages) + +```html + + +``` + +- **``** fait basculer le navigateur en mode standard. Sans + lui, les navigateurs émulent les bizarreries des années 1990 (modèle de + boîte cassé, rendu incohérent). +- **`lang="en"`** déclare la langue de la page. Les lecteurs d'écran en + déduisent leur voix de synthèse vocale ; les moteurs de recherche et les + traducteurs s'en servent aussi. **RGAA 8.3/8.4** (langue par défaut + présente et pertinente). C'est pourquoi la décision sur la langue compte + avant le vrai frontend : l'attribut doit correspondre à la langue réelle + du contenu. + +```html + + +