V0.801 Release Scope — UX/UI Polish, Accessibilité & PWA
Statut : Planifié
Phase : 8 (Polish & Scale — Lot 1)
Prérequis : v0.703 (taguée)
Date cible : TBD
Estimation : ~3 sprints (15 jours ouvrés)
Précédente : v0.703
1. Objectif
Première version de la Phase 8. Améliore l'expérience utilisateur avec les thèmes avancés (contraste élevé, compact, accents personnalisables), l'accessibilité WCAG AA (clavier, screen reader, ARIA), et le renforcement PWA (offline, add-to-home-screen, background playback). Ces améliorations touchent l'ensemble de l'interface sans modifier les fonctionnalités métier.
2. État actuel (post-v0.703)
Composant
État
Détail
Thème clair/sombre
✅ Livré
ThemeProvider, toggle dans Settings
Thème auto (système)
✅ Livré
prefers-color-scheme détecté
Contraste élevé
❌ Absent
Pas de mode high contrast
Mode compact/confortable
❌ Absent
Layout unique, pas de densité configurable
Couleur d'accent
❌ Absent
Couleur primary fixe dans design tokens
Navigation clavier
⚠️ Partiel
Certains composants focusables, pas systématique
Screen reader (ARIA)
⚠️ Partiel
Labels manquants sur boutons icônes, tables, modales
Focus visible
⚠️ Partiel
Outline CSS basique, pas toujours visible
Taille de police ajustable
❌ Absent
Tailles fixes dans design tokens
prefers-reduced-motion
❌ Absent
Animations non conditionnées
PWA Service Worker
⚠️ Partiel
SW de base, pas d'offline caching
Add-to-home-screen
❌ Absent
Pas de manifest complet ni prompt
Background playback
❌ Absent
Audio s'arrête en background mobile
3. Lots
Lot UX1 — Thèmes avancés
Objectif : Offrir des options de personnalisation visuelle complètes.
#
Tâche
Fichiers impactés
Effort
UX1-01
Mode contraste élevé — palette high-contrast dans index.css, toggle dans SettingsAppearance
apps/web/src/index.css, apps/web/src/components/settings/SettingsAppearance.tsx
M
UX1-02
Mode compact/confortable — réduire spacing/padding/gap de 25% en mode compact, CSS variables
apps/web/src/index.css, ThemeProvider
M
UX1-03
Couleur d'accent personnalisable — color picker dans Settings, CSS variable --color-primary, persistence localStorage
apps/web/src/components/settings/SettingsAppearance.tsx, ThemeProvider
M
UX1-04
Persistence des préférences — stocker theme, contrast, density, accent dans localStorage + compte utilisateur (PUT /users/me/preferences)
apps/web/src/stores/, backend
M
UX1-05
Migration backend — ajout colonne preferences JSONB sur users
migrations/118_users_preferences.sql
S
UX1-06
Tests — theme toggle, accent change, compact mode rendering
Tests
S
Lot UX2 — Accessibilité WCAG AA
Objectif : Atteindre la conformité WCAG AA sur tous les composants critiques.
#
Tâche
Fichiers impactés
Effort
UX2-01
Audit a11y — lister tous les composants UI avec aria-label manquant, focus trap incomplet, contraste insuffisant
Audit doc
M
UX2-02
Navigation clavier complète — tabindex, Enter/Space handlers sur tous les composants interactifs (Button, Card, Menu, Tab, Modal)
apps/web/src/components/ui/
L
UX2-03
ARIA labels — ajouter aria-label sur boutons icônes, aria-describedby sur forms, role sur régions
apps/web/src/components/
M
UX2-04
Focus visible amélioré — focus-visible ring distinct (2px solid, offset), skip-to-content link
apps/web/src/index.css, layout
S
UX2-05
Taille de police ajustable — slider dans Settings (14px– 20px), CSS variable --font-size-base, scale proportionnel
apps/web/src/index.css, Settings
M
UX2-06
prefers-reduced-motion — conditionner toutes les animations/transitions CSS, respecter l'OS preference
apps/web/src/index.css
S
UX2-07
Contraste WCAG AA — vérifier ratio 4.5:1 sur tous les textes, ajuster les couleurs secondaires si nécessaire
apps/web/src/index.css
M
UX2-08
Tests a11y — axe-core intégré dans Storybook (addon-a11y), 0 violations critiques
apps/web/.storybook/
M
Lot UX3 — PWA & Mobile
Objectif : Améliorer l'expérience mobile avec offline, installation, et background playback.
#
Tâche
Fichiers impactés
Effort
UX3-01
Manifest PWA complet — icons (192, 512, maskable), theme_color, background_color, display: standalone, shortcuts
apps/web/public/manifest.json
S
UX3-02
Service worker offline — cache app shell, pages visitées, fallback offline page
apps/web/src/sw.ts ou vite-plugin-pwa
M
UX3-03
Add-to-home-screen prompt — beforeinstallprompt handler, bouton "Install App" dans Settings
apps/web/src/hooks/usePWAInstall.ts, Settings
M
UX3-04
Background playback mobile — Audio element persist, page visibility API, prevent sleep (WakeLock API)
apps/web/src/features/player/hooks/
M
UX3-05
Tests PWA — Lighthouse PWA score, offline fallback, install prompt
Tests
S
Lot QA1 — Tests & Release
#
Tâche
Fichiers impactés
Effort
QA1-01
Smoke test v0.801
docs/SMOKE_TEST_V0801.md
S
QA1-02
Mise à jour PROJECT_STATE, FEATURE_STATUS, CHANGELOG
docs/
S
QA1-03
Rétrospective, archivage, placeholder v0.802, tag
docs/, Git
S
4. Hors scope v0.801
Élément
Version cible
Cloud Storage avancé
v0.802
Gear warranty tracking
v0.802
OpenAPI/Swagger
v0.803
GDPR compliance complet
v0.803
Wishlists marketplace
v0.901
Layouts personnalisables (drag & drop modules)
v2.0
Thèmes communautaires
v2.0
Mode dyslexie-friendly
v2.0
Transcriptions vidéo auto
v2.0
Sous-titres auto-générés
v2.0
5. Détail technique
5.1 Design tokens contraste élevé
[ data-contrast = "high" ] {
--color-foreground : #000000 ;
--color-background : #ffffff ;
--color-muted : #4a4a4a ;
--color-border : #000000 ;
--color-primary : #0000cc ;
--color-destructive : #cc0000 ;
}
. dark [ data-contrast = "high" ] {
--color-foreground : #ffffff ;
--color-background : #000000 ;
--color-muted : #cccccc ;
--color-border : #ffffff ;
--color-primary : #6666ff ;
--color-destructive : #ff6666 ;
}
5.2 Mode compact
[ data-density = "compact" ] {
--spacing-unit : 0.75 ;
--font-size-base : 13 px ;
}
[ data-density = "comfortable" ] {
--spacing-unit : 1 ;
--font-size-base : 15 px ;
}
5.3 Couleur d'accent
function applyAccentColor ( hue : number ) {
document . documentElement . style . setProperty ( '--color-primary' , `hsl( ${ hue } , 70%, 50%)` );
document . documentElement . style . setProperty ( '--color-primary-foreground' , `hsl( ${ hue } , 70%, 98%)` );
localStorage . setItem ( 'veza-accent-hue' , String ( hue ));
}
5.4 prefers-reduced-motion
@ media ( prefers-reduced-motion : reduce ) {
*, * :: before , * :: after {
animation-duration : 0.01 ms !important ;
animation-iteration-count : 1 !important ;
transition-duration : 0.01 ms !important ;
scroll-behavior : auto !important ;
}
}
5.5 Background Playback (WakeLock)
async function requestWakeLock() {
if ( 'wakeLock' in navigator ) {
try {
const lock = await navigator . wakeLock . request ( 'screen' );
return lock ;
} catch ( e ) {
// WakeLock denied — battery saver, etc.
}
}
return null ;
}
6. Fichiers impactés (récapitulatif)
Backend (nouveau)
Fichier
Action
migrations/118_users_preferences.sql
Nouveau — colonne preferences JSONB
Backend (modifier)
Fichier
Action
internal/models/user.go
Ajout champ Preferences
internal/handlers/user_handler.go
PUT /users/me/preferences
Frontend (nouveau)
Fichier
Action
apps/web/src/hooks/usePWAInstall.ts
Nouveau — beforeinstallprompt handler
apps/web/src/hooks/useReducedMotion.ts
Nouveau — prefers-reduced-motion hook
Frontend (modifier)
Fichier
Action
apps/web/src/index.css
Design tokens contrast, compact, accent, reduced-motion, font-size
apps/web/src/components/settings/SettingsAppearance.tsx
Toggle contrast, density, color picker, font size slider
apps/web/src/components/ui/
ARIA labels, focus handlers, keyboard nav
apps/web/public/manifest.json
PWA manifest complet
apps/web/src/features/player/hooks/
WakeLock, background playback
apps/web/.storybook/
addon-a11y
7. Critères d'acceptation
Mode contraste élevé activable dans Settings, couleurs WCAG AA ratio 4.5:1
Mode compact réduit spacing de 25%, confortable par défaut
Couleur d'accent personnalisable via color picker, persistée
Navigation clavier complète (Tab, Enter, Space, Escape) sur tous les composants UI
ARIA labels sur tous les boutons icônes, modales, formulaires
Focus visible ring distinct, skip-to-content link
Taille de police ajustable (14px– 20px) via slider Settings
prefers-reduced-motion respecté (animations désactivées)
axe-core 0 violations critiques dans Storybook
PWA installable (manifest complet, icons, display standalone)
Offline : app shell cachée, page fallback
Background playback mobile avec WakeLock
Tag v0.801 créé
8. Risques
Risque
Mitigation
Accent color casse le contraste
Validation ratio contraste automatique sur selection
ARIA labels verbeux sur screen reader
Tester avec VoiceOver/NVDA réels
Service worker cache stale
Cache-first + network fallback avec versioning
WakeLock non supporté partout
Feature detection, fallback gracieux
Compact mode casse des layouts
Tests visuels sur résolutions critiques (320px, 768px, 1920px)
9. Références