Keep/_bmad-output/planning-artifacts/sprint-2-simplify-notecard-interface.md
sepehr ddb67ba9e5 fix: unify theme system - fix theme switching persistence
- 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
2026-01-18 22:33:41 +01:00

17 KiB

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.