- Unified localStorage key to 'theme-preference' across all components
- Fixed header.tsx using wrong localStorage key ('theme' instead of 'theme-preference')
- Added localStorage hybrid persistence for instant theme changes
- Removed router.refresh() which was causing stale data revert
- Replaced Blue theme with Sepia
- Consolidated auth() calls to prevent race conditions
- Updated UserSettingsData types to include all themes
470 lines
17 KiB
Markdown
470 lines
17 KiB
Markdown
# Sprint #2: Simplification de l'Interface NoteCard
|
|
|
|
## Métadonnées
|
|
|
|
| Propriété | Valeur |
|
|
|------------|---------|
|
|
| **Nom du Sprint** | Simplification de l'Interface NoteCard |
|
|
| **ID du Sprint** | sprint-2-simplify-notecard-interface |
|
|
| **Epic** | Epic 9: Simplify NoteCard Interface |
|
|
| **Date de début** | 2026-01-17 |
|
|
| **Durée prévue** | 1 semaine (5 jours ouvrés) |
|
|
| **Statut** | 🟡 Prêt à démarrer |
|
|
| **Priorité** | 🟡 Medium (UX improvement) |
|
|
| **Capacité** | 5 stories |
|
|
| **Lead** | Frontend Engineer + UX Designer |
|
|
|
|
---
|
|
|
|
## 🎯 Goal (Objectif du Sprint)
|
|
|
|
**Objectif principal:** Simplifier l'interface du NoteCard en remplaçant les 5 boutons visibles par un seul menu d'actions, tout en préservant TOUT le contenu existant (avatar, images, liens HTML, labels, dates).
|
|
|
|
**Métriques de succès:**
|
|
- ✅ Interface moins encombrée (5 boutons → 1 menu)
|
|
- ✅ Toutes les actions restent accessibles
|
|
- ✅ Avatar reste en bas à gauche (position inchangée)
|
|
- ✅ Images restent visibles et cliquables
|
|
- ✅ Liens HTML restent avec prévisualisation complète
|
|
- ✅ Labels et dates restent visibles
|
|
- ✅ Aucune régression fonctionnelle
|
|
- ✅ Amélioration de l'expérience utilisateur
|
|
|
|
---
|
|
|
|
## 📋 Backlog (Stories du Sprint)
|
|
|
|
### 🟡 MEDIUM (Toutes les stories sont de priorité Medium)
|
|
|
|
#### Story 9.1: Create NoteActionMenu Component
|
|
**Priorité:** Medium
|
|
**Estimation:** 2 heures
|
|
**Complexité:** Faible
|
|
|
|
**En tant que:** Développeur Frontend
|
|
**Je veux:** Créer un composant réutilisable `NoteActionMenu` qui regroupe toutes les actions de note dans un menu dropdown.
|
|
**Afin de:** Centraliser toutes les actions dans une interface unique et cohérente.
|
|
|
|
**Critères d'acceptation:**
|
|
- ✅ Composant créé dans `keep-notes/components/note-action-menu.tsx`
|
|
- ✅ Utilise DropdownMenu de Radix UI
|
|
- ✅ Affiche un bouton "..." (MoreHorizontal icon)
|
|
- ✅ Menu contient toutes les actions : Pin, Move to notebook, Reminder, Connections, Color, Share, Archive, Delete
|
|
- ✅ Chaque action a une icône appropriée
|
|
- ✅ Menu aligné à droite (end)
|
|
- ✅ Supporte la navigation clavier
|
|
- ✅ Fonctionne en light et dark theme
|
|
- ✅ Bouton visible au hover sur desktop, toujours visible sur mobile
|
|
|
|
**Contexte technique:**
|
|
- **Nouveau fichier:** `keep-notes/components/note-action-menu.tsx`
|
|
- **Icônes:** Pin, FolderOpen, Bell, Link2, Palette, Share2, Archive, Trash2 (lucide-react)
|
|
- **Menu width:** `w-56` (224px)
|
|
- **Position:** `absolute top-2 right-2 z-20`
|
|
- **Hover:** `opacity-0 group-hover:opacity-100` (desktop), `opacity-100` (mobile)
|
|
|
|
**Tests:**
|
|
- ✅ Test manuel: Ouvrir le menu, vérifier toutes les actions
|
|
- ✅ Test clavier: Navigation avec Tab, Arrow keys, Enter, Escape
|
|
- ✅ Test mobile: Menu toujours visible, touch targets 44x44px
|
|
- ✅ Test thèmes: Light et dark mode
|
|
|
|
**Dépendances:** Aucune (story fondatrice)
|
|
|
|
---
|
|
|
|
#### Story 9.2: Replace Multiple Buttons with Action Menu in NoteCard
|
|
**Priorité:** Medium
|
|
**Estimation:** 3 heures
|
|
**Complexité:** Moyenne
|
|
|
|
**En tant que:** Utilisateur
|
|
**Je veux:** Voir une interface NoteCard plus claire avec moins de boutons visibles.
|
|
**Afin de:** Avoir une interface moins encombrée et plus facile à scanner.
|
|
|
|
**Critères d'acceptation:**
|
|
- ✅ Les 5 boutons en haut sont remplacés par 1 seul menu "..."
|
|
- ✅ Le drag handle reste visible sur mobile (top-left, `md:hidden`)
|
|
- ✅ L'icône de rappel reste visible si un rappel est actif
|
|
- ✅ TOUT le contenu reste inchangé :
|
|
- Avatar en bas à gauche (`bottom-2 left-2`) - **AUCUN CHANGEMENT**
|
|
- Images pleine largeur, visibles et cliquables - **AUCUN CHANGEMENT**
|
|
- Liens HTML avec prévisualisation complète - **AUCUN CHANGEMENT**
|
|
- Labels visibles sous le contenu - **AUCUN CHANGEMENT**
|
|
- Date visible en bas à droite - **AUCUN CHANGEMENT**
|
|
- Badges Memory Echo visibles en haut - **AUCUN CHANGEMENT**
|
|
- ✅ Le menu apparaît au hover sur desktop (transition d'opacité)
|
|
- ✅ Le menu est toujours visible sur mobile
|
|
- ✅ Toutes les actions fonctionnent correctement depuis le menu
|
|
|
|
**Contexte technique:**
|
|
- **Fichier modifié:** `keep-notes/components/note-card.tsx`
|
|
- **Lignes à supprimer:** ~289-333 (boutons individuels)
|
|
- **Lignes à ajouter:** Import et utilisation de `<NoteActionMenu />`
|
|
- **Drag handle:** Conserver `md:hidden` (visible uniquement sur mobile)
|
|
- **Reminder icon:** Conserver la logique existante (visible si `note.reminder` est dans le futur)
|
|
|
|
**Tests:**
|
|
- ✅ Test visuel: Vérifier qu'il n'y a plus que 1 bouton au lieu de 5
|
|
- ✅ Test fonctionnel: Toutes les actions fonctionnent depuis le menu
|
|
- ✅ Test contenu: Vérifier que avatar, images, liens, labels, dates sont tous visibles
|
|
- ✅ Test desktop: Menu apparaît au hover
|
|
- ✅ Test mobile: Menu toujours visible
|
|
- ✅ Test régression: Aucune fonctionnalité cassée
|
|
|
|
**Dépendances:** Story 9.1 (doit être complétée avant)
|
|
|
|
---
|
|
|
|
#### Story 9.3: Ensure Content Preservation After Simplification
|
|
**Priorité:** Medium
|
|
**Estimation:** 2 heures
|
|
**Complexité:** Faible
|
|
|
|
**En tant que:** Utilisateur
|
|
**Je veux:** Que tout le contenu de mes notes reste visible et fonctionnel après la simplification.
|
|
**Afin de:** Ne perdre aucune information ou fonctionnalité.
|
|
|
|
**Critères d'acceptation:**
|
|
- ✅ Avatar reste en bas à gauche (`bottom-2 left-2`)
|
|
- ✅ Avatar reste 24x24px (w-6 h-6)
|
|
- ✅ Avatar affiche les initiales du propriétaire
|
|
- ✅ Images restent pleine largeur et cliquables
|
|
- ✅ Liens HTML restent avec prévisualisation complète (image, titre, description, hostname)
|
|
- ✅ Liens HTML restent cliquables
|
|
- ✅ Labels restent visibles sous le contenu
|
|
- ✅ Labels conservent leur codage couleur
|
|
- ✅ Date reste visible en bas à droite
|
|
- ✅ Badges Memory Echo restent visibles en haut
|
|
- ✅ Tout le contenu conserve son style et comportement actuel
|
|
|
|
**Contexte technique:**
|
|
- **Aucun changement** dans la logique de rendu du contenu
|
|
- **Seuls changements** dans l'interface des boutons/actions
|
|
- **Vérifier** que tous les composants de contenu restent inchangés :
|
|
- `NoteImages` component
|
|
- Link preview rendering (lignes 436-461)
|
|
- `LabelBadge` components
|
|
- Date formatting
|
|
- Avatar rendering (lignes 492-504)
|
|
|
|
**Tests:**
|
|
- ✅ Test avec notes contenant des images
|
|
- ✅ Test avec notes contenant des liens HTML
|
|
- ✅ Test avec notes contenant plusieurs labels
|
|
- ✅ Test avec notes avec rappels actifs
|
|
- ✅ Test avec notes avec badges Memory Echo
|
|
- ✅ Vérifier position avatar sur toutes les tailles d'écran
|
|
- ✅ Vérifier que tout le contenu est cliquable et fonctionnel
|
|
|
|
**Dépendances:** Story 9.2 (doit être complétée avant)
|
|
|
|
---
|
|
|
|
#### Story 9.4: Mobile Optimization for Action Menu
|
|
**Priorité:** Medium
|
|
**Estimation:** 2 heures
|
|
**Complexité:** Faible
|
|
|
|
**En tant que:** Utilisateur mobile
|
|
**Je veux:** Accéder facilement aux actions de note sur mon appareil mobile.
|
|
**Afin de:** Gérer mes notes efficacement avec des interactions tactiles.
|
|
|
|
**Critères d'acceptation:**
|
|
- ✅ Le bouton menu est toujours visible sur mobile (pas caché au hover)
|
|
- ✅ Le bouton menu a une taille minimale de 44x44px (touch target)
|
|
- ✅ Chaque item du menu a une taille minimale de 44x44px
|
|
- ✅ Le menu est facile à naviguer avec le toucher
|
|
- ✅ Le menu se ferme quand on tape en dehors
|
|
- ✅ Le menu se ferme après sélection d'une action
|
|
- ✅ Toutes les actions fonctionnent correctement sur mobile
|
|
|
|
**Contexte technique:**
|
|
- **Menu button:** `opacity-100` sur mobile (toujours visible)
|
|
- **Menu button:** `min-h-[44px] min-w-[44px]` pour touch target
|
|
- **Menu items:** `min-h-[44px]` pour touch targets
|
|
- **Breakpoint:** `< 768px` pour mobile
|
|
|
|
**Tests:**
|
|
- ✅ Test sur Galaxy S22 Ultra
|
|
- ✅ Test sur iPhone SE
|
|
- ✅ Test sur différents appareils Android
|
|
- ✅ Test en portrait et paysage
|
|
- ✅ Vérifier que tous les touch targets sont ≥ 44x44px
|
|
- ✅ Vérifier que le menu est facile à utiliser avec une seule main
|
|
|
|
**Dépendances:** Story 9.2 (peut être fait en parallèle avec 9.3)
|
|
|
|
---
|
|
|
|
#### Story 9.5: Keyboard Navigation for Action Menu
|
|
**Priorité:** Medium
|
|
**Estimation:** 1.5 heures
|
|
**Complexité:** Faible
|
|
|
|
**En tant que:** Utilisateur clavier
|
|
**Je veux:** Naviguer et utiliser le menu d'actions uniquement avec le clavier.
|
|
**Afin de:** Accéder à toutes les actions sans utiliser la souris.
|
|
|
|
**Critères d'acceptation:**
|
|
- ✅ Je peux Tab jusqu'au bouton menu
|
|
- ✅ Le bouton menu a un indicateur de focus visible
|
|
- ✅ Je peux ouvrir le menu avec Enter ou Space
|
|
- ✅ Je peux naviguer les items du menu avec les flèches
|
|
- ✅ Je peux sélectionner une action avec Enter
|
|
- ✅ Je peux fermer le menu avec Escape
|
|
- ✅ Le focus revient au bouton menu après fermeture
|
|
- ✅ Toutes les actions sont accessibles via clavier
|
|
|
|
**Contexte technique:**
|
|
- **Radix UI DropdownMenu** a un support clavier natif
|
|
- **Focus indicators:** Visibles (WCAG 2.1 AA)
|
|
- **Test screen reader:** NVDA, VoiceOver
|
|
|
|
**Tests:**
|
|
- ✅ Test clavier: Tab, Enter, Space, Arrow keys, Escape
|
|
- ✅ Test screen reader: NVDA (Windows), VoiceOver (Mac)
|
|
- ✅ Test focus indicators: Visibles et contrastés
|
|
- ✅ Test accessibilité: WCAG 2.1 AA compliant
|
|
|
|
**Dépendances:** Story 9.2 (peut être fait en parallèle avec 9.3 et 9.4)
|
|
|
|
---
|
|
|
|
## 🗂 Dépendances Entre Stories
|
|
|
|
### Ordre Suggéré
|
|
|
|
1. **Story 9.1** (Create NoteActionMenu Component) - **DOIT ÊTRE PREMIÈRE**
|
|
- Raison: Composant fondateur requis par toutes les autres stories
|
|
- Blocking: Story 9.2
|
|
- Si échoue, toutes les autres stories échouent aussi
|
|
|
|
2. **Story 9.2** (Replace Multiple Buttons with Action Menu)
|
|
- Dépendance: Story 9.1
|
|
- Blocking: Stories 9.3, 9.4, 9.5
|
|
- Intègre le menu dans le NoteCard
|
|
|
|
3. **Stories 9.3, 9.4, 9.5** (Content Preservation, Mobile, Keyboard)
|
|
- Dépendance: Story 9.2
|
|
- **Peuvent être faites en parallèle** après Story 9.2
|
|
- Validation et optimisation
|
|
|
|
### Graph de Dépendances Visuel
|
|
|
|
```
|
|
Story 9.1 (Create NoteActionMenu)
|
|
└─> Story 9.2 (Replace Buttons with Menu)
|
|
├─> Story 9.3 (Content Preservation)
|
|
├─> Story 9.4 (Mobile Optimization)
|
|
└─> Story 9.5 (Keyboard Navigation)
|
|
```
|
|
|
|
---
|
|
|
|
## 🎬 Acceptation Criteria (Critères d'Acceptation Globaux)
|
|
|
|
### Pour Toutes les Stories
|
|
|
|
- ✅ **Fonctionnalité:** L'interface est simplifiée et toutes les actions fonctionnent
|
|
- ✅ **Contenu préservé:** Avatar, images, liens HTML, labels, dates restent visibles
|
|
- ✅ **Tests:** Tests manuels et automatisés passent
|
|
- ✅ **UX:** L'expérience utilisateur est améliorée (interface moins encombrée)
|
|
- ✅ **Code:** Le code est propre, bien documenté et suit les conventions
|
|
- ✅ **Régression:** Aucune régression détectée dans d'autres fonctionnalités
|
|
- ✅ **Accessibilité:** Navigation clavier et screen reader fonctionnent
|
|
|
|
### Critères Spécifiques
|
|
|
|
#### Stories de Simplification UI
|
|
- ✅ Interface moins encombrée (5 boutons → 1 menu)
|
|
- ✅ Toutes les actions restent accessibles
|
|
- ✅ Le contenu n'est pas affecté
|
|
|
|
#### Stories de Validation
|
|
- ✅ Avatar position confirmée (bas à gauche)
|
|
- ✅ Images confirmées (visibles et cliquables)
|
|
- ✅ Liens HTML confirmés (prévisualisation complète)
|
|
- ✅ Labels confirmés (visibles)
|
|
- ✅ Dates confirmées (visibles)
|
|
|
|
---
|
|
|
|
## 🚨 Risques et Blockers
|
|
|
|
### Risques Identifiés
|
|
|
|
1. **Risque de Régression**
|
|
- **Description:** La simplification peut casser des fonctionnalités existantes
|
|
- **Probabilité:** Faible
|
|
- **Impact:** Élevé - pourrait affecter l'expérience utilisateur
|
|
- **Mitigation:** Tests approfondis, Story 9.3 dédiée à la validation
|
|
|
|
2. **Risque de Contenu Masqué**
|
|
- **Description:** Par erreur, du contenu pourrait être masqué
|
|
- **Probabilité:** Faible
|
|
- **Impact:** Élevé - perte d'information pour l'utilisateur
|
|
- **Mitigation:** Story 9.3 dédiée à la validation du contenu, checklist exhaustive
|
|
|
|
3. **Risque de Position Avatar**
|
|
- **Description:** L'avatar pourrait être déplacé par erreur
|
|
- **Probabilité:** Très faible
|
|
- **Impact:** Moyen - confusion utilisateur
|
|
- **Mitigation:** Story 9.3 vérifie explicitement la position (`bottom-2 left-2`)
|
|
|
|
4. **Risque de Mobile UX**
|
|
- **Description:** Le menu pourrait être difficile à utiliser sur mobile
|
|
- **Probabilité:** Faible
|
|
- **Impact:** Moyen - mauvaise expérience mobile
|
|
- **Mitigation:** Story 9.4 dédiée à l'optimisation mobile, touch targets 44x44px
|
|
|
|
### Blockers Actuels
|
|
|
|
- Aucun blocker identifié
|
|
- Tous les fichiers sont accessibles et modifiables
|
|
- L'environnement de développement est opérationnel
|
|
- Les composants Radix UI sont disponibles
|
|
|
|
---
|
|
|
|
## 📅 Timeline Estimée
|
|
|
|
### Par Story
|
|
|
|
| Story | Estimation | Notes |
|
|
|-------|-----------|-------|
|
|
| Story 9.1: Create NoteActionMenu | 2 heures | Fondateur - faire en priorité |
|
|
| Story 9.2: Replace Buttons with Menu | 3 heures | Intégration principale |
|
|
| Story 9.3: Content Preservation | 2 heures | Validation - peut être fait en parallèle |
|
|
| Story 9.4: Mobile Optimization | 2 heures | Optimisation - peut être fait en parallèle |
|
|
| Story 9.5: Keyboard Navigation | 1.5 heures | Accessibilité - peut être fait en parallèle |
|
|
|
|
**Total estimé:** 10.5 heures (1 semaine à 50% de capacité)
|
|
|
|
### Timeline Suggérée
|
|
|
|
**Jour 1-2:**
|
|
- Story 9.1 (Create NoteActionMenu Component) - 2h
|
|
- Story 9.2 (Replace Buttons with Menu) - 3h
|
|
|
|
**Jour 3-4:**
|
|
- Story 9.3 (Content Preservation) - 2h
|
|
- Story 9.4 (Mobile Optimization) - 2h
|
|
- Story 9.5 (Keyboard Navigation) - 1.5h
|
|
|
|
**Jour 5:**
|
|
- Tests finaux et validation
|
|
- Code review
|
|
- Documentation
|
|
|
|
---
|
|
|
|
## 🎯 Objectifs de Démo (Pour Sprint Review)
|
|
|
|
Si vous voulez présenter le travail à la fin du Sprint:
|
|
|
|
1. **Comparaison Visuelle:**
|
|
- Screenshot avant (5 boutons visibles)
|
|
- Screenshot après (1 menu "...")
|
|
- Montrer que le contenu est identique
|
|
|
|
2. **Démonstration Fonctionnelle:**
|
|
- Ouvrir le menu, montrer toutes les actions
|
|
- Tester sur desktop (hover)
|
|
- Tester sur mobile (tap)
|
|
- Tester avec clavier (navigation)
|
|
|
|
3. **Validation Contenu:**
|
|
- Montrer avatar en bas à gauche
|
|
- Montrer images visibles et cliquables
|
|
- Montrer liens HTML avec prévisualisation
|
|
- Montrer labels et dates visibles
|
|
|
|
4. **Métriques de Succès:**
|
|
- Nombre de boutons réduit: 5 → 1
|
|
- Contenu préservé: 100%
|
|
- Actions accessibles: 100%
|
|
- Tests passés: 100%
|
|
|
|
---
|
|
|
|
## 📝 Notes pour l'Équipe
|
|
|
|
### Bonnes Pratiques
|
|
|
|
1. **Respecter le contenu existant**
|
|
- Ne PAS modifier la position de l'avatar (bas à gauche)
|
|
- Ne PAS masquer les images, liens HTML, labels, dates
|
|
- Seulement modifier l'interface des boutons
|
|
|
|
2. **Tester exhaustivement**
|
|
- Tester avec notes contenant images
|
|
- Tester avec notes contenant liens HTML
|
|
- Tester avec notes contenant labels
|
|
- Tester sur desktop et mobile
|
|
- Tester avec clavier et screen reader
|
|
|
|
3. **Documenter les changements**
|
|
- Commenter pourquoi on remplace les boutons
|
|
- Documenter que le contenu reste inchangé
|
|
- Mettre à jour le changelog
|
|
|
|
### Outils et Ressources
|
|
|
|
- **Documentation:** Voir `_bmad-output/design-proposals/design-simplification-proposal.md`
|
|
- **Epic:** Voir `_bmad-output/planning-artifacts/epics.md` (Epic 9)
|
|
- **Composants UI:** Radix UI DropdownMenu (`@/components/ui/dropdown-menu`)
|
|
|
|
### Communication
|
|
|
|
- Signaler immédiatement si du contenu est accidentellement masqué
|
|
- Vérifier la position de l'avatar à chaque étape
|
|
- Valider que les images et liens HTML restent visibles
|
|
|
|
---
|
|
|
|
## 🎉 Critères de Succès du Sprint
|
|
|
|
Le Sprint sera considéré comme **succès** si:
|
|
|
|
### Must-Have (Doit être complété)
|
|
- ✅ Toutes les 5 stories sont complétées
|
|
- ✅ Story 9.1 (NoteActionMenu) est fonctionnelle
|
|
- ✅ Story 9.2 (Replace Buttons) est intégrée
|
|
- ✅ Avatar reste en bas à gauche (position confirmée)
|
|
- ✅ Images restent visibles et cliquables
|
|
- ✅ Liens HTML restent avec prévisualisation complète
|
|
- ✅ Labels et dates restent visibles
|
|
- ✅ Aucune régression fonctionnelle
|
|
|
|
### Nice-to-Have (Souhaitable)
|
|
- ✅ Interface perçue comme moins encombrée (feedback utilisateur)
|
|
- ✅ Toutes les actions sont facilement accessibles
|
|
- ✅ Amélioration de l'expérience utilisateur mesurable
|
|
- ✅ Code propre et maintenable
|
|
- ✅ Documentation à jour
|
|
|
|
### UX Targets
|
|
- ✅ Interface moins encombrée (5 boutons → 1 menu)
|
|
- ✅ Toutes les actions accessibles en ≤ 2 clics/taps
|
|
- ✅ Menu facile à utiliser sur desktop et mobile
|
|
- ✅ Navigation clavier complète et fluide
|
|
|
|
---
|
|
|
|
## 🔄 Status Actuel
|
|
|
|
🟡 **En préparation** - Sprint créé, prêt à commencer
|
|
|
|
**Prochaine étape:**
|
|
1. Révision du Sprint avec l'équipe ou les parties prenantes
|
|
2. Affectation des stories aux développeurs
|
|
3. Création des branches git si nécessaire
|
|
4. Commencement avec Story 9.1 (Create NoteActionMenu)
|
|
|
|
**Estimation de début:** Immédiatement après validation
|
|
|
|
---
|
|
|
|
*Créé le 2026-01-17 pour simplifier l'interface NoteCard tout en préservant tout le contenu existant.*
|