Keep/_bmad-output/planning-artifacts/memory-echo-connections-ux-specification.md
sepehr 7fb486c9a4 feat: Complete internationalization and code cleanup
## Translation Files
- Add 11 new language files (es, de, pt, ru, zh, ja, ko, ar, hi, nl, pl)
- Add 100+ missing translation keys across all 15 languages
- New sections: notebook, pagination, ai.batchOrganization, ai.autoLabels
- Update nav section with workspace, quickAccess, myLibrary keys

## Component Updates
- Update 15+ components to use translation keys instead of hardcoded text
- Components: notebook dialogs, sidebar, header, note-input, ghost-tags, etc.
- Replace 80+ hardcoded English/French strings with t() calls
- Ensure consistent UI across all supported languages

## Code Quality
- Remove 77+ console.log statements from codebase
- Clean up API routes, components, hooks, and services
- Keep only essential error handling (no debugging logs)

## UI/UX Improvements
- Update Keep logo to yellow post-it style (from-yellow-400 to-amber-500)
- Change selection colors to #FEF3C6 (notebooks) and #EFB162 (nav items)
- Make "+" button permanently visible in notebooks section
- Fix grammar and syntax errors in multiple components

## Bug Fixes
- Fix JSON syntax errors in it.json, nl.json, pl.json, zh.json
- Fix syntax errors in notebook-suggestion-toast.tsx
- Fix syntax errors in use-auto-tagging.ts
- Fix syntax errors in paragraph-refactor.service.ts
- Fix duplicate "fusion" section in nl.json

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

Ou une version plus courte si vous préférez :

feat(i18n): Add 15 languages, remove logs, update UI components

- Create 11 new translation files (es, de, pt, ru, zh, ja, ko, ar, hi, nl, pl)
- Add 100+ translation keys: notebook, pagination, AI features
- Update 15+ components to use translations (80+ strings)
- Remove 77+ console.log statements from codebase
- Fix JSON syntax errors in 4 translation files
- Fix component syntax errors (toast, hooks, services)
- Update logo to yellow post-it style
- Change selection colors (#FEF3C6, #EFB162)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-11 22:26:13 +01:00

1106 lines
44 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.

---
specificationType: 'feature-ux-design'
featureName: 'Memory Echo Connections Management'
project: Keep
author: Sally (UX Designer) & Ramez
date: '2026-01-10'
status: 'draft'
version: '1.0'
---
# UX Design Specification - Memory Echo Connections Management
**Project:** Keep (Memento)
**Feature:** Gestion Évoluée des Connexions Memory Echo
**Author:** Sally (UX Designer) & Ramez
**Date:** 2026-01-10
**Version:** 1.0
---
## Table des Matières
1. [Executive Summary](#executive-summary)
2. [Context & Problem Statement](#context--problem-statement)
3. [User Personas & Scenarios](#user-personas--scenarios)
4. [Design Principles](#design-principles)
5. [User Flow Diagrams](#user-flow-diagrams)
6. [Interface Specifications](#interface-specifications)
7. [Interaction Design](#interaction-design)
8. [Visual Design Specifications](#visual-design-specifications)
9. [Technical Considerations](#technical-considerations)
10. [Implementation Roadmap](#implementation-roadmap)
11. [Success Metrics](#success-metrics)
---
## Executive Summary
### Vision
Transformer Memory Echo d'une feature "push only" (notifications uniquement) à un système **interactif de gestion des connexions**, permettant aux utilisateurs de visualiser, comprendre et agir sur les relations sémantiques entre leurs notes.
### Objectifs Principaux
1. **Visibilité permanente** - Les connexions ne disparaissent plus après un clic
2. **Exploration flexible** - L'utilisateur peut voir les connexions à différents niveaux de détail
3. **Actions intelligentes** - Fusion et gestion des notes similaires
4. **Scalabilité** - Fonctionne de 2 à 22+ connexions sans surcharger l'interface
### Philosophie de Design
**"Révélation Progressive" (Progressive Disclosure)**
> Les informations et actions apparaissent graduellement, du plus simple au plus détaillé, selon le besoin de l'utilisateur.
- **Niveau 1** : Indicateur visuel discret
- **Niveau 2** : Vue d'ensemble rapide (overlay)
- **Niveau 3** : Détails et actions complètes (éditeur)
---
## Context & Problem Statement
### État Actuel
**Memory Echo (Phase 1)** :
- ✅ Détection automatique des connexions sémantiques
- ✅ Notifications push quand nouvelles connexions
- ✅ Modal temporaire pour voir 2 notes côte à côte
- ✅ Feedback utilisateur (pouces haut/bas)
**Limites Identifiées** :
1. **Modal éphémère** - Le modal se ferme et on perd la vue
2. **Pas de vue globale** - Impossible de voir toutes les connexions d'une note
3. **Actions limitées** - Pas de fusion ou gestion des notes similaires
4. **Pas scalable** - Avec 22 notes similaires, le modal actuel est inadapté
### Scénario Problème
> Ramez a créé 22 notes sur "Project X" depuis 3 mois. Memory Echo détecte toutes ces connexions. Il clique sur "View Connection", voit 2 notes dans un modal... puis le modal se ferme. Il doit cliquer à nouveau pour voir les 2 notes suivantes. Il n'a PAS de vue globale. Il ne peut PAS fusionner ces 22 notes facilement. C'est fastidieux.
### Besoins Utilisateur
**Primary Use Case** :
"Je veux voir toutes les notes connexes d'un coup, comprendre les relations, et décider quoi faire (fusionner, garder séparé, etc.)"
**Secondary Use Cases** :
- Explorer les connexions sans obligation d'action
- Fusionner intelligemment des notes dupliquées
- Comprendre pourquoi deux notes sont connectées
- Naviguer rapidement entre notes connexes
---
## User Personas & Scenarios
### Persona Principal : Ramez
**Profile** :
- Développeur intermédiaire
- Utilise Keep quotidiennement pour notes techniques
- Beaucoup de notes sur des sujets similaires
- Veut de l'efficacité, pas de la friction
**Motivations** :
- "Je ne veux pas perdre de temps à chercher mes notes"
- "Si j'ai 3 fois la même info, je veux fusionner"
- "Montre-moi ce qui est pertinent, cache le reste"
**Frustrations Actuelles** :
- Modal qui disparaît trop vite
- Pas de vue globale des connexions
- Fusion manuelle chronophage
### User Journey
#### Journey 1 : Découverte de Connexions Multiples
```
1. Ramez ouvre Keep
→ Voir badge "⚡ 12 connexions" sur une note
2. Il clique sur le badge
→ Overlay s'ouvre avec liste des 12 notes connexes
3. Il parcourt la liste
→ Voit similarité % pour chaque note
4. Il décide de voir plus en détail
→ Clique "Voir côte à côte" sur 3 notes
5. Modal s'ouvre avec les 3 notes
→ Il comprend les relations
6. Il décide de fusionner
→ Clique "Fusionner intelligemment"
7. Preview de la fusion
→ Il valide
8. Fusion réussie !
→ Les 3 notes originales archivées
→ Nouvelle note combinée créée
```
#### Journey 2 : Exploration Sans Action
```
1. Ramez ouvre une note dans l'éditeur
2. En bas, section "⚡ Notes Connexes (8)"
3. Il parcourt les connexions
→ Clique sur une note connexe
4. Cette note s'ouvre dans un nouvel onglet/panel
→ Il compare les deux
5. Il décide de NE PAS fusionner
→ Ferme la note connexe
6. Il continue d'explorer
→ Clique sur une autre connexion
7. Il revient à sa note originale
→ Continuer son travail
```
---
## Design Principles
### 1. **Révélation Progressive**
Les informations apparaissent graduellement :
- Toujours visible : Badge discret sur les notes
- Au clic : Overlay avec liste des connexions
- En éditor : Section permanente avec détails
### 2. **Non-Intrusif**
La feature ne gêne pas l'utilisation normale :
- Badge visible mais pas dominant
- Overlay se ferme facilement
- Section dans l'éditor peut être réduite
### 3. **Contextuel**
Les actions sont au bon endroit :
- Dans la grille → Quick view (overlay)
- Dans l'éditeur → Actions détaillées
- Dans le modal → Fusion intelligente
### 4. **Scalable**
Fonctionne avec peu ou beaucoup de connexions :
- 2-3 connexions : Affichage direct
- 4-10 connexions : Liste avec pagination
- 11+ connexions : Liste + filtres + tri
### 5. **Performant**
Rapide et fluide :
- Lazy loading des connexions
- Pagination si besoin
- Pas de rechargement de page
---
## User Flow Diagrams
### Flow 1 : Découverte depuis la Grille
```
┌─────────────────────────────────────────────────────────────┐
│ GRILLE PRINCIPALE │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Note A │ │ Note B │ │ Note C │ │
│ │ │ │ │ │ │ │
│ │ ⚡ 5 connex. │ │ │ │ ⚡ 12 connex. │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────┘
Clic sur badge "⚡ 5 connex."
┌─────────────────────────────────────────────────────────────┐
│ OVERLAY CONNEXIONS │
│ │
│ ⚡ Notes Connexes (5) [X] │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📝 Note A1 - Related Topic 94% │ │
│ │ [Voir] [Voir côte à côte ▼] │ │
│ ├─────────────────────────────────────────────────────┤ │
│ │ 📝 Note A2 - Similar Content 89% │ │
│ │ [Voir] [Voir côte à côte ▼] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ [Voir tout côte à côte] │
└─────────────────────────────────────────────────────────────┘
┌───────────┴───────────┐
▼ ▼
Clic "Voir" Clic "Voir côte à côte"
│ │
▼ ▼
Ouvre note MODAL COMPARAISON
dans éditeur (2-3 notes côte à côte)
Actions:
- Fusionner
- Voir note
- Fermer
```
### Flow 2 : Gestion dans l'Éditeur
```
┌─────────────────────────────────────────────────────────────┐
│ ÉDITEUR DE NOTE │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ 📝 Ma Note │ │
│ │ │ │
│ │ [Contenu de la note...] │ │
│ │ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ ⚡ Notes Connexes (5) [] │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ 📝 Note A1 - Related Topic 94% │ │ │
│ │ │ [Voir] [Fusionner ▼] │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ 📝 Note A2 - Similar Content 89% │ │ │
│ │ │ [Voir] [Fusionner ▼] │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ [Tout voir côte à côte] [Tout fusionner...] │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
### Flow 3 : Fusion Intelligente
```
┌─────────────────────────────────────────────────────────────┐
│ MODAL FUSION │
│ │
│ 🔗 Fusion Intelligente │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Sélection: 3 notes │ │
│ │ │ │
│ │ ┌──────────────────────┐ │ │
│ │ │ 📝 Note 1 │ │ │
│ │ │ "Meeting about..." │ │ │
│ │ └──────────────────────┘ │ │
│ │ + │ │
│ │ ┌──────────────────────┐ │ │
│ │ │ 📝 Note 2 │ │ │
│ │ │ "Discussed..." │ │ │
│ │ └──────────────────────┘ │ │
│ │ + │ │
│ │ ┌──────────────────────┐ │ │
│ │ │ 📝 Note 3 │ │ │
│ │ │ "Project X..." │ │ │
│ │ └──────────────────────┘ │ │
│ │ = │ │
│ │ ┌──────────────────────┐ │ │
│ │ │ 📝 NOTE FUSIONNÉE │ ← Preview IA │ │
│ │ │ "Team meeting about │ │ │
│ │ │ Project X: discussed│ │ │
│ │ │ deadlines and..." │ │ │
│ │ └──────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ Options: │
│ ☑ Archiver les notes originales │
│ ☑ Conserver les tags de toutes les notes │
│ │
│ [Annuler] [Modifier manuellement] [Confirmer la fusion] │
└─────────────────────────────────────────────────────────────┘
```
---
## Interface Specifications
### Composant 1 : Badge de Connexions (Grille)
**Emplacement** : Coin inférieur droit de chaque note card dans la grille Masonry
**Apparence** :
```
┌─────────────────────────────┐
│ Titre de la note │
│ │
│ Contenu de la note... │
│ │
│ ⚡ 5 connexions ◀─────── Badge
└─────────────────────────────┘
```
**Spécifications** :
- **Couleur** : Fond ambre/or clair (`bg-amber-100 dark:bg-amber-900/30`)
- **Texte** : "⚡ X connexions" en ambre foncé (`text-amber-700 dark:text-amber-400`)
- **Icône** : ⚡ (Sparkles de Lucide-react)
- **Police** : xs (12px), font-weight normal
- **Border-radius** : rounded-md
- **Padding** : px-2 py-1
- **Position** : absolute bottom-2 right-2
- **Z-index** : 10 (au-dessus du contenu)
- **États** :
- **Normal** : Opacité 100%
- **Hover** : Opacité 100%, cursor pointer, bordure ambre
- **Disabled/Aucune connexion** : Non affiché
**Interaction** :
- Click → Ouvre l'overlay des connexions
- Hover → Léger zoom + tooltip "Voir les connexions"
**Condition d'affichage** :
- Si 1+ connexions → Afficher le badge
- Si 0 connexions → Masquer
### Composant 2 : Overlay Connexions
**Type** : Modal/Dialog centré
**Dimensions** :
- Largeur : max-w-2xl (672px)
- Hauteur : max-h-[80vh]
- Position : fixed inset-0, centré
**Structure** :
```
┌─────────────────────────────────────────────────┐
│ ⚡ Notes Connexes (12) [X] │
├─────────────────────────────────────────────────┤
│ 🔍 [Filtrer...] [Tri par: similarité ▼] │
├─────────────────────────────────────────────────┤
│ ┌───────────────────────────────────────────┐ │
│ │ 📝 Note connexe 1 94% [▾] │ │
│ │ Preview du contenu... │ │
│ │ [Voir] [Voir côte à côte ▼] │ │
│ └───────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────┐ │
│ │ 📝 Note connexe 2 89% [▾] │ │
│ │ Preview du contenu... │ │
│ │ [Voir] [Voir côte à côte ▼] │ │
│ └───────────────────────────────────────────┘ │
│ │
│ [< 1 2 3 4 5 >] (pagination si 10+ connexions) │
├─────────────────────────────────────────────────┤
│ [Voir tout côte à côte] │
└─────────────────────────────────────────────────┘
```
**Spécifications** :
**Header** :
- Titre : "⚡ Notes Connexes (X)"
- Bouton close (X) en haut à droite
- Icône ⚡ en ambre
**Filtres et Tri** (optionnel, visible si 7+ connexions) :
- Input recherche : filtrer par titre/contenu
- Dropdown tri : "Plus similaire", "Plus récent", "Plus ancien"
**Liste des connexions** :
- Chaque connexion = carte avec :
- Titre de la note connexe (gras, cliquable)
- Badge pourcentage de similarité (coins haut à droite)
- Preview du contenu (line-clamp-2, 2 lignes max)
- Tags/labels si présents
- Dropdown menu [▾] :
- "Voir cette note"
- "Voir côte à côte"
- "Fusionner avec..."
- "Masquer cette connexion"
- Boutons rapides :
- [Voir] → Ouvre la note dans l'éditeur
- [Voir côte à côte ▼] → Menu : sélectionner 2-3 notes à comparer
**Pagination** :
- Si > 10 connexions : afficher 10 par page
- Pagination en bas : [< 1 2 3 4 5 >]
**Footer** :
- Bouton principal : [Voir tout côte à côte]
- Ouvre modal avec toutes les connexions (max 5)
### Composant 3 : Modal Comparaison Côte à Côte
**Dimensions** :
- Largeur : max-w-6xl (896px) pour 2 notes, max-w-7xl (1024px) pour 3 notes
- Hauteur : max-h-[90vh]
**Layout** : Grid avec 2 ou 3 colonnes selon sélection
**Structure** :
```
┌─────────────────────────────────────────────────────────────┐
│ ⚡ Comparaison de Notes [X] │
│ Ces notes sont connectées par 94% de similarité │
├─────────────────────────────────────────────────────────────┤
│ 💡 Insight: "Ces notes traitent toutes du même │
│ sujet sous des angles complémentaires..." │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────────────┐ ┌─────────────────────┐ │
│ │ 📝 Note 1 │ │ 📝 Note 2 │ │
│ │ [Titre] │ │ [Titre] │ │
│ │ │ │ │ │
│ │ [Contenu...] │ │ [Contenu...] │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ └─────────────────────┘ └─────────────────────┘ │
│ [Cliquez pour ouvrir] [Cliquez pour ouvrir] │
├─────────────────────────────────────────────────────────────┤
│ [← Ajouter une note] [Fusionner tout ▼] │
└─────────────────────────────────────────────────────────────┘
```
**Spécifications** :
**Header** :
- Titre : "⚡ Comparaison de Notes"
- Sous-titre : "Ces notes sont connectées par X% de similarité"
- Pourcentage affiché en ambre
**Section Insight IA** (optionnelle) :
- Fond ambre clair
- Icône 💡
- Texte explicatif généré par l'IA
- "Ces notes traitent toutes du même sujet..."
**Grille de notes** :
- Layout : `grid grid-cols-2 gap-6` (2 notes) ou `grid grid-cols-3 gap-4` (3 notes)
- Chaque note :
- Bordure fine
- Hover : bordure ambre, curseur pointer
- Titre en gras (couleur distincte par note)
- Contenu avec `line-clamp-8` (8 lignes max)
- Bas de carte : "Cliquez pour ouvrir"
**Footer** :
- Bouton gauche : [← Ajouter une note] (si < 3 notes)
- Bouton droit : [Fusionner tout ▼]
- Dropdown : "Fusionner intelligemment", "Fusionner manuellement"
### Composant 4 : Section Connexions (Éditeur)
**Emplacement** : En bas de l'éditeur de note, après le contenu
**États** :
- **Ouvert** : Affiche toutes les connexions
- **Réduit** : Affiche juste le header
**Structure - État Ouvert** :
```
┌───────────────────────────────────────────────────────────┐
│ 📝 Ma Note │
│ [Éditeur...] │
├───────────────────────────────────────────────────────────┤
│ ⚡ Notes Connexes (5) [] │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📝 Note A1 - Related Topic 94% │ │
│ │ [Preview...] │ │
│ │ [Voir] [Fusionner ▼] │ │
│ └─────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📝 Note A2 - Similar Content 89% │ │
│ │ [Preview...] │ │
│ │ [Voir] [Fusionner ▼] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ [Tout voir côte à côte] [Tout fusionner...] │
└───────────────────────────────────────────────────────────┘
```
**Structure - État Réduit** :
```
┌───────────────────────────────────────────────────────────┐
│ ⚡ Notes Connexes (5) [+] │
└───────────────────────────────────────────────────────────┘
```
**Spécifications** :
- Header avec bouton []/[+] pour réduire/ouvrir
- Même layout que l'overlay, mais intégré dans l'éditeur
- Pas de bouton close (X)
- Scrollable si beaucoup de connexions
- Sticky header si scroll
### Composant 5 : Modal Fusion Intelligente
**Dimensions** :
- Largeur : max-w-3xl (768px)
- Hauteur : auto (adaptable au contenu)
**Structure** :
```
┌─────────────────────────────────────────────────────────────┐
│ 🔗 Fusion Intelligente │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📝 Notes à fusionner │ │
│ │ ┌───────────────────────────────────────────────┐ │ │
│ │ │ ☑ Note 1: "Meeting about Project X" │ │ │
│ │ │ Created: Jan 5, 2026 │ │ │
│ │ ├───────────────────────────────────────────────┤ │ │
│ │ │ ☑ Note 2: "Discussed deadlines..." │ │ │
│ │ │ Created: Jan 8, 2026 │ │ │
│ │ ├───────────────────────────────────────────────┤ │ │
│ │ │ ☑ Note 3: "Project X deliverables" │ │ │
│ │ │ Created: Jan 10, 2026 │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ [+ Ajouter une note] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 💬 Prompt de fusion (optionnel) │ │
│ │ [Instruction optionnelle pour l'IA...] │ │
│ │ │ │
│ │ [Générer la fusion] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 📝 Preview de la note fusionnée │ │
│ │ ┌───────────────────────────────────────────────┐ │ │
│ │ │ "Team meeting about Project X: discussed │ │ │
│ │ │ deadlines and deliverables. Key points:..." │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ │ │ │
│ │ [Modifier manuellement] │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Options de fusion │ │
│ │ ☑ Archiver les notes originales │ │
│ │ ☑ Conserver tous les tags │ │
│ │ ☐ Conserver la note la plus récente comme titre │ │
│ │ ☐ Créer un rétrolien vers les notes originales │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ [Annuler] [Modifier manuellement] [✓ Confirmer la fusion] │
└─────────────────────────────────────────────────────────────┘
```
**Spécifications** :
**Section 1 : Sélection des notes**
- Liste avec checkboxes (toutes cochées par défaut)
- Chaque note : titre + date de création
- Hover : preview du contenu (tooltip)
- Bouton [+ Ajouter une note] pour en inclure d'autres
**Section 2 : Prompt (optionnel)**
- Input textarea pour instruction personnalisée
- Exemple : "Garder le style formel de la note 1"
- Par défaut : vide = l'IA fait de son mieux
**Bouton [Générer la fusion]** :
- Appelle l'IA pour générer la note fusionnée
- Show loading spinner pendant génération
- Preview apparaît dans la section suivante
**Section 3 : Preview**
- Zone de texte éditable
- Peut être modifiée manuellement
- Syntax highlighting/markdown support
- Scrollable si long contenu
**Section 4 : Options**
- Checkboxes pour comportement post-fusion
- Toutes cochées par défaut (sauf exception)
**Actions footer** :
- **[Annuler]** : Ferme le modal, annule tout
- **[Modifier manuellement]** : Focus sur la preview, désactive le bouton "Générer"
- **[✓ Confirmer la fusion]** : Crée la nouvelle note, archive les originaux
---
## Interaction Design
### Interactions Badge Connexions
**États** :
1. **Normal** : Badge visible, statique
2. **Hover** :
- Opacity: 100% 100% (pas de changement)
- Transform: scale(1.05)
- Border: 1px solid ambre
- Cursor: pointer
- Tooltip: "Voir les X connexions"
3. **Active** : Click ouvre overlay
**Transitions** :
- Duration: 150ms
- Easing: ease-out
- Properties: transform, border-color
**Feedback** :
- Click : Overlay apparaît avec fade-in + slide-up (200ms)
### Interactions Overlay
**Ouverture** :
- Animation : fade-in (0% 100%) + scale(0.95 1)
- Duration : 200ms
- Easing : ease-out
- Backdrop : bg-black/50 avec backdrop-blur-sm
**Fermeture** :
- Click sur X ou backdrop
- Animation : fade-out + scale(1 0.95)
- Duration : 150ms
- Escape key : ferme aussi
**Scroll** :
- Si > 5 connexions : overflow-y-auto
- Scrollbar stylisée (ambre)
- Max-height : 60vh
**Hover sur une connexion** :
- Background : hover:bg-gray-50 dark:hover:bg-zinc-800
- Border-left : 3px solid ambre
- Transform: translateX(4px)
- Duration: 150ms
### Interactions Modal Comparaison
**Clic sur une note** :
- Ouvre la note dans l'éditeur
- Ferme le modal
- Toast: "Note ouverte"
**Bouton [← Ajouter une note]** :
- Ouvre dropdown avec les autres connexions
- Max 3 notes dans le modal
**Bouton [Fusionner tout ▼]** :
- Dropdown : "Fusionner intelligemment", "Fusionner manuellement"
- "Fusionner intelligemment" → Ouvre modal fusion intelligente
- "Fusionner manuellement" → Ouvre modal d'édition de fusion
### Interactions Modal Fusion
**Génération IA** :
- Click [Générer la fusion]
- Button → loading state avec spinner
- Toast: "Génération en cours..."
- Après 2-3s : Preview apparaît
- Toast: "Fusion générée !"
**Modification manuelle** :
- Click [Modifier manuellement]
- Focus sur textarea de preview
- Button désactivé : [Générer la fusion]
- Button activé : [Confirmer la fusion]
**Confirmation** :
- Click [✓ Confirmer la fusion]
- Loading state sur le bouton
- API call pour créer la note
- Archives des notes originales
- Modal ferme
- Toast: "✓ Notes fusionnées avec succès !"
- Éditeur s'ouvre avec la nouvelle note
### Interactions Section Éditeur
**Toggle Ouvert/Réduit** :
- Click sur [] ou [+]
- Animation : slide-up / slide-down
- Duration : 200ms
- Easing : ease-in-out
- Icon transition : rotate(0deg) ↔ rotate(180deg)
**Scroll** :
- Section scrollable indépendamment
- Header sticky en haut
- Max-height : 300px
---
## Visual Design Specifications
### Palette de Couleurs
**Primary (Amber/Memory Echo)** :
- `amber-50` : bg-amber-50 (sous-fonds très clairs)
- `amber-100` : bg-amber-100 (badges, cards)
- `amber-200` : border-amber-200 (bordures légères)
- `amber-400` : text-amber-400 (texte secondaire dark mode)
- `amber-500` : text-amber-500 (texte principal)
- `amber-600` : bg-amber-600 (boutons primary)
- `amber-700` : text-amber-700 (texte dark mode)
- `amber-900/30` : bg-amber-900/30 (badges dark mode)
- `amber-950/20` : bg-amber-950/20 (sous-fonds dark mode)
**Neutral (Gray/Zinc)** :
- Utiliser la palette existante de l'appli
- `gray-50`, `gray-100`, ..., `gray-900`
- `zinc-50`, `zinc-100`, ..., `zinc-900` (dark mode)
**Sémantique** :
- Success (fusion réussie) : `green-600`
- Error (erreur fusion) : `red-600`
- Warning (confirmation action) : `yellow-600`
### Typographie
**Familles** : Utiliser les fonts de l'appli (probablement Inter ou system-ui)
**Tailles** :
- Badge : text-xs (12px)
- Titre note : text-base (16px), font-semibold
- Preview contenu : text-sm (14px)
- Similarity % : text-xs (12px), font-medium
- Insight IA : text-sm (14px)
**Weights** :
- Regular : 400
- Medium : 500
- Semibold : 600
- Bold : 700
### Espacements
**Badges** : px-2 py-1 (8px horizontal, 4px vertical)
**Cards connexions** : p-3 (12px padding)
**Modal** : p-6 (24px padding)
**Sections** : gap-3, gap-4 entre éléments
### Icônes
**Source** : Lucide React
**Tailles** :
- Small : h-3 w-3, h-4 w-4
- Medium : h-5 w-5
- Large : h-6 w-6
**Icônes utilisées** :
- ⚡ Sparkles : connexions Memory Echo
- 💡 Lightbulb : insights IA
- 🔗 Link : fusion
- 👁️ Eye : voir
- ✏️ Edit : modifier
- ✓ Check : confirmer
- ✕ X : fermer/annuler
- ▼ ChevronDown : dropdowns
- ▲ ChevronUp : toggle ouvert
- Plus : ajouter
- ➔ ArrowRight : navigation
### Ombres & Bordures
**Ombres** :
- Badge : shadow-sm
- Card : shadow
- Modal : shadow-xl
**Bordures** :
- Badge : border-amber-200
- Card : border-gray-200 dark:border-zinc-700
- Modal : border-gray-200
**Border-radius** :
- Badge : rounded-md (4px)
- Card : rounded-lg (8px)
- Modal : rounded-lg (8px)
---
## Technical Considerations
### Performance
**Lazy Loading** :
- Charger les connexions au clic sur le badge
- Pas précharger toutes les connexions de toutes les notes
- Pagination pour 10+ connexions
**Caching** :
- Cache les connexions récupérées (session storage)
- Invalider le cache quand une note est modifiée
- TTL : 5 minutes
**API Calls** :
- Endpoint : `/api/ai/echo/connections?noteId={id}`
- Response format :
```json
{
"connections": [
{
"noteId": "xxx",
"title": "Note connexe",
"content": "Preview...",
"similarity": 0.94,
"insight": "Ces notes sont..."
}
],
"total": 12
}
```
### Responsive Design
**Mobile** :
- Badge : toujours visible en bas à droite
- Overlay : full-screen au lieu de modal centré
- Modal comparaison : grid 1 colonne au lieu de 2-3
- Section éditeur : collapsée par défaut
**Tablet** :
- Similar to desktop
- Réduire largeur modale (max-w-xl au lieu de max-w-2xl)
**Desktop** :
- Spécifications détaillées ci-dessus
### Accessibility
**ARIA Labels** :
- Badge : `aria-label="Voir les 5 connexions de cette note"`
- Overlay : `role="dialog" aria-modal="true"`
- Boutons : `aria-label` descriptifs
**Keyboard Navigation** :
- Tab : naviguer entre les connexions
- Enter/Space : sélectionner une connexion
- Escape : fermer overlay/modal
- Arrow keys : naviguer dans la liste
**Screen Readers** :
- Annoncer "5 connexions disponibles"
- Lire la similarité en pourcentage
- Annoncer les actions disponibles
**Focus Management** :
- Ouverture overlay : focus sur première connexion
- Fermeture : focus retourne sur le badge
- Modal fusion : focus sur première checkbox
### États & Gestion d'État
**États nécessaires** :
```typescript
interface ConnectionsState {
// Overlay
isOverlayOpen: boolean
selectedNoteId: string | null
// Modal comparaison
isComparisonModalOpen: boolean
comparisonNotes: string[] (max 3)
// Modal fusion
isFusionModalOpen: boolean
selectedNotesForFusion: string[]
fusionPreview: string | null
isGeneratingFusion: boolean
// Section éditeur
isConnectionSectionExpanded: boolean
// Données
connections: Connection[]
isLoadingConnections: boolean
}
```
**Events** :
- `onOpenConnections` : ouvrir overlay
- `onCloseConnections` : fermer overlay
- `onSelectConnection` : sélectionner une connexion
- `onOpenComparison` : ouvrir modal comparaison
- `onOpenFusion` : ouvrir modal fusion
- `onGenerateFusion` : générer fusion IA
- `onConfirmFusion` : confirmer fusion
- `onToggleSection` : toggle section éditeur
### Error Handling
**Cas d'erreur** :
1. **Échec chargement connexions** :
- Message : "Impossible de charger les connexions"
- Action : bouton "Réessayer"
2. **Échec génération fusion** :
- Message : "Erreur lors de la génération"
- Action : bouton "Réessayer" ou "Modifier manuellement"
3. **Échec création note fusionnée** :
- Message : "Erreur lors de la création de la note"
- Action : conserver dans le modal pour retry
4. **Pas de connexions** :
- Badge non affiché
- Message dans section : "Aucune connexion détectée"
---
## Implementation Roadmap
### Phase 1 : Fondations (Semaine 1)
**Sprint 1.1 : Backend API**
- [ ] Créer endpoint `/api/ai/echo/connections`
- [ ] Implémenter la logique de récupération des connexions
- [ ] Ajouter pagination si > 10 connexions
- [ ] Tests unitaires
**Sprint 1.2 : Composant Badge**
- [ ] Créer `ConnectionsBadge.tsx`
- [ ] Intégrer dans `NoteCard.tsx`
- [ ] Gérer l'état de visibilité
- [ ] Tests composant
### Phase 2 : Overlay & Découverte (Semaine 2)
**Sprint 2.1 : Overlay Connexions**
- [ ] Créer `ConnectionsOverlay.tsx`
- [ ] Implémenter la liste des connexions
- [ ] Ajouter filtres et tri
- [ ] Pagination si > 10
- [ ] Animations d'ouverture/fermeture
**Sprint 2.2 : Modal Comparaison**
- [ ] Créer `ComparisonModal.tsx`
- [ ] Grid 2-3 colonnes
- [ ] Insight IA optionnel
- [ ] Actions rapides
### Phase 3 : Éditeur & Actions (Semaine 3)
**Sprint 3.1 : Section Éditeur**
- [ ] Créer `EditorConnectionsSection.tsx`
- [ ] Toggle ouvert/réduit
- [ ] Liste des connexions
- [ ] Actions rapides
**Sprint 3.2 : Modal Fusion (Partie 1)**
- [ ] Créer `FusionModal.tsx`
- [ ] UI de sélection des notes
- [ ] Preview area
- [ ] Options de fusion
### Phase 4 : Fusion Intelligente (Semaine 4)
**Sprint 4.1 : Backend Fusion**
- [ ] Endpoint `/api/ai/echo/merge`
- [ ] Intégrer génération IA (prompt)
- [ ] Créer la note fusionnée
- [ ] Archiver les notes originales
**Sprint 4.2 : Modal Fusion (Partie 2)**
- [ ] Connecter au backend
- [ ] Loading states
- [ ] Error handling
- [ ] Toast notifications
### Phase 5 : Polish & Tests (Semaine 5)
**Sprint 5.1 : UX Refinement**
- [ ] Micro-interactions
- [ ] Animations fluides
- [ ] Responsive design
- [ ] Accessibility audit
**Sprint 5.2 : Testing & Documentation**
- [ ] Tests E2E
- [ ] Tests d'intégration
- [ ] Documentation utilisateur
- [ ] Migration guide
---
## Success Metrics
### Metrics Quantitatives
**Adoption** :
- % d'utilisateurs qui cliquent sur le badge dans les 7 premiers jours
- Nombre moyen de connexions vues par session
- Taux d'utilisation de la fusion
**Engagement** :
- Temps passé dans l'overlay
- Nombre de connexions explorées avant action
- Taux de conversion (vue → action)
**Performance** :
- Temps de chargement des connexions < 500ms
- Temps de génération fusion < 3s
- 0 bugs critiques
### Metrics Qualitatifs
**User Feedback** :
- Feedback positif sur les connexions trouvées
- "Les fusions sont utiles"
- "Je trouve ce que je cherche plus vite"
**UX Quality** :
- L'overlay est intuitif (pas de confusion)
- La fusion donne de bons résultats
- La feature ne gêne pas l'utilisation normale
### Success Criteria
**MVP Success** (Phase 1-2) :
- Badge visible sur les notes avec connexions
- Overlay fonctionnel avec liste des connexions
- Modal comparaison pour 2-3 notes
- 0 régression bug
**Full Success** (Phase 1-4) :
- Toutes les fonctionnalités implémentées
- Fusion intelligente fonctionnelle
- Section éditeur intégrée
- 90%+ satisfaction utilisateur
**Stretch Goals** (Phase 5+) :
- Vue mind-map/graph (backlog)
- Fusion en lot (batch merge)
- Connexions transientes (A B C)
- Export des connexions en JSON
---
## Conclusion
Cette spécification UX fournit un plan complet pour la gestion évoluée des connexions Memory Echo, en suivant le principe de **révélation progressive** et en respectant la philosophie **"Zéro Prise de Tête"**.
**Points clés** :
- Visibilité permanente des connexions
- Exploration flexible à 3 niveaux
- Actions intelligentes (fusion)
- Scalable de 2 à 22+ connexions
- Non-intrusif et performant
La priorisation par phases permet un développement itératif avec des valeur livrables dès la Phase 1.
---
**Document Status** : Draft v1.0 - Ready for Review
**Next Steps** : Validation avec Ramez, puis implémentation Phase 1
---
*Generated by Sally (UX Designer) & Ramez - Keep Project*
*Date: 2026-01-10*