- Add AI Provider Testing page (/admin/ai-test) with Tags and Embeddings tests - Add new AI providers: CustomOpenAI, DeepSeek, OpenRouter - Add API routes for AI config, models listing, and testing endpoints - Add UX Design Specification document for Phase 1 MVP AI - Add PRD Phase 1 MVP AI planning document - Update admin settings and sidebar navigation - Fix AI factory for multi-provider support
1586 lines
64 KiB
Markdown
1586 lines
64 KiB
Markdown
---
|
||
stepsCompleted: [1, 2, 3, 4, 6, 7, 8, 9, 10, 11]
|
||
inputDocuments:
|
||
- _bmad-output/analysis/brainstorming-session-2026-01-09.md
|
||
- docs/project-overview.md
|
||
- docs/architecture-keep-notes.md
|
||
- docs/data-models.md
|
||
workflowType: 'prd'
|
||
lastStep: 11
|
||
documentTitle: 'Phase 1 MVP AI - Memento'
|
||
focusArea: 'AI-Powered Note Taking Features'
|
||
status: 'complete'
|
||
completedAt: '2026-01-10'
|
||
---
|
||
|
||
# Product Requirements Document - Phase 1 MVP AI
|
||
|
||
**Project:** Memento
|
||
**Author:** Ramez
|
||
**Date:** 2026-01-10
|
||
**Focus:** Phase 1 MVP IA - AI-Powered Note Taking Features
|
||
|
||
## Executive Summary
|
||
|
||
**Memento Phase 1 MVP AI** transforme l'application de prise de notes existante en un **partenaire cognitif proactif** qui élimine la charge mentale liée à l'organisation, tout en préservant la simplicité et le contrôle total de l'utilisateur. S'appuyant sur l'architecture Next.js 16 + Prisma + SQLite existante, cette évolution ajoute une couche d'intelligence contextuelle conçue pour **suggérer et faciliter, sans jamais imposer**.
|
||
|
||
L'objectif est de créer un flux de travail où la capture reste instantanée, mais l'organisation est accélérée par une **IA qui comprend les relations entre les notes** et propose des connexions proactives. Le système comprend l'intention, mais l'utilisateur garde toujours la main via un pattern ON/OFF granulaire.
|
||
|
||
### What Makes This Special
|
||
|
||
**🚀 Zero-Friction Intelligence (Philosophie "Zéro Prise de Tête")**
|
||
|
||
Contrairement à Google Keep (pas d'IA) et Notion (IA à la demande et complexe), Memento Phase 1 introduit **trois innovations exclusives**:
|
||
|
||
1. **Contextual Smart Assistance** - Les fonctionnalités IA n'apparaissent que quand c'est pertinent:
|
||
- Suggestions de titres uniquement après 50+ mots sans titre
|
||
- Toast non-intrusive avec options "Voir | Plus tard | Ne plus demander"
|
||
- L'utilisateur découvre les features naturellement sans être overwhelmed
|
||
|
||
2. **Hybrid Semantic Discovery** - Recherche unifiée qui "marche juste":
|
||
- L'utilisateur ne sait pas si c'est des mots-clés ou du sens
|
||
- Résultats avec badges: "Correspondance exacte" | "Correspondance sémantique"
|
||
- **"Memory Echo"** - Connexions proactives entre notes liées (jusqu'à 1 insight/jour)
|
||
|
||
3. **Privacy-First Multi-Provider AI**:
|
||
- Support Ollama (100% local, data ne quitte jamais l'infrastructure)
|
||
- Support OpenAI (cloud option pour utilisateurs non-techniques)
|
||
- Architecture multilingue: Prompts système en anglais, données utilisateur en langue locale
|
||
|
||
**🎯 The "Aha!" Moment: "I didn't search, it found me"**
|
||
|
||
Le différenciateur killer de Memento est **"Memory Echo"** - une feature qui révèle des connexions entre notes que l'utilisateur n'avait pas vues:
|
||
|
||
> 💡 *"I noticed something..."*
|
||
>
|
||
> *"You noted `[Node.js performance tips]` in January and `[Next.js optimization]` this week. These notes are connected - want me to link them?"*
|
||
>
|
||
> [View Connection] [Dismiss] [That's clever!]
|
||
|
||
Cela crée un moment unique où l'utilisateur réalise que Memento ne stocke pas seulement ses notes, mais **comprend ses connaissances** et les connecte proactivement.
|
||
|
||
**🌍 Multilingual Out-of-the-Box**
|
||
|
||
Architecture multilingue validée lors du brainstorming:
|
||
- Système: Prompts en anglais (stabilité des modèles)
|
||
- Données utilisateur: Détection automatique par note
|
||
- Pas besoin de configurer la langue - ça fonctionne nativement
|
||
|
||
**⚙️ Granular ON/OFF Control**
|
||
|
||
Respectant la philosophie "zéro prise de tête", chaque feature IA est contrôlable indépendamment:
|
||
- Settings IA avec checkboxes pour chaque fonctionnalité
|
||
- L'utilisateur peut désactiver ce qui ne lui convient pas
|
||
- Mode "Conservatif" (futur Phase 3) pour safety-first
|
||
|
||
### Project Success Vision
|
||
|
||
**Si Phase 1 réussit sauvagement, ce qui change pour les utilisateurs:**
|
||
|
||
- ✅ **"Je retrouve ce que j'ai oublié"** - Les connexions proactives rappellent des notes anciennes liées au travail actuel
|
||
- ✅ **"Je ne perds plus rien"** - Memento se souvient des relations même quand l'utilisateur oublie
|
||
- ✅ **"Je suis plus intelligent"** - Les connexions IA révèlent des patterns que l'utilisateur n'avait pas vus
|
||
- ✅ **"Je reste dans le flow"** - Pas besoin d'organiser manuellement, Memento le fait silencieusement
|
||
|
||
## Project Classification
|
||
|
||
**Technical Type:** web_app
|
||
**Domain:** general
|
||
**Complexity:** medium
|
||
**Project Context:** Brownfield - Extension intelligent avec focus UX
|
||
|
||
### Technical Context
|
||
|
||
**Existing Stack:**
|
||
- Next.js 16.1.1 (App Router) + React 19.2.3 + TypeScript 5
|
||
- Prisma 5.22.0 ORM + SQLite (better-sqlite3)
|
||
- Vercel AI SDK 6.0.23 + OpenAI/Ollama providers
|
||
- NextAuth 5.0.0-beta.30 (authentication)
|
||
|
||
**Current AI Capabilities (Already Implemented):**
|
||
- ✅ Auto-tagging with embeddings
|
||
- ✅ Multi-provider support (OpenAI, Ollama)
|
||
- ✅ Factory pattern for AI providers
|
||
|
||
**Phase 1 Additions:**
|
||
- Contextual title suggestions (3 options, no auto-generation)
|
||
- Enhanced semantic search with connection insights
|
||
- Paragraph-level reformulation (manual trigger)
|
||
- "Memory Echo" proactive connections (max 1 insight/day)
|
||
|
||
### Architecture Alignment
|
||
|
||
Phase 1 respects existing patterns:
|
||
- API Routes in `/api/ai/` namespace
|
||
- Components in shared structure
|
||
- Prisma schema extensions (not rewrites)
|
||
- Multilingual architecture (system prompts English, user data in local language)
|
||
|
||
### Competitive Positioning
|
||
|
||
| Feature | Google Keep | Notion | **Memento Phase 1** |
|
||
|---------|-------------|--------|---------------------|
|
||
| **Fast Capture** | ✅ Yes | ❌ No | ✅ **Yes** |
|
||
| **Integrated AI** | ❌ No | ⚠️ Paid/add-on | ✅ **Yes, native** |
|
||
| **Semantic Search** | ❌ No | ⚠️ Partial | ✅ **Yes, hybrid** |
|
||
| **Proactive Insights** | ❌ No | ❌ No | ✅ **EXCLUSIVE** |
|
||
| **Zero-Config** | ✅ Yes | ❌ No | ✅ **Yes** |
|
||
| **Privacy (Local)** | ❌ No | ❌ No | ✅ **EXCLUSIVE** |
|
||
| **Multilingual** | ⚠️ Limited | ⚠️ Limited | ✅ **Yes, native** |
|
||
|
||
## Success Criteria
|
||
|
||
### User Success
|
||
|
||
**1. Adoption "Aha!" Moment**
|
||
|
||
**Moment où l'utilisateur réalise que Memento est différent:**
|
||
- **Mesure:** % d'utilisateurs qui acceptent au moins une suggestion de titre dans les 7 premiers jours
|
||
- **Cible:** > 60% (si moins, les suggestions ne sont pas pertinentes)
|
||
- **Pourquoi:** Indique que les features IA sont découvertes et perçues comme utiles
|
||
|
||
**Délice avec Memory Echo:**
|
||
- **Mesure:** % d'utilisateurs qui cliquent sur "Voir la connexion" lors d'un insight proactif
|
||
- **Cible:** > 40% (montre que les connexions proactives ont de la valeur)
|
||
- **Pourquoi:** C'est le moment différenciant vs Google Keep/Notion
|
||
|
||
**2. Retrouvabilité "Je l'ai retrouvé!"**
|
||
|
||
**Capacité à retrouver des notes oubliées via recherche sémantique:**
|
||
- **Mesure:** % de recherches où la correspondance sémantique est dans le top 3 résultats
|
||
- **Cible:** > 30% des recherches complexes (non-mots-clés exacts)
|
||
- **Pourquoi:** La recherche sémantique doit retrouver ce que la recherche par mots-clés ne trouve pas
|
||
|
||
**Gain de temps de recherche:**
|
||
- **Mesure:** Temps moyen pour trouver une note connue vs. recherche mots-clés actuelle
|
||
- **Cible:** -40% de temps en moyenne
|
||
- **Pourquoi:** L'IA doit accélérer le workflow, pas le ralentir
|
||
|
||
**3. Confiance en l'IA "Je fais confiance"**
|
||
|
||
**Taux d'acceptation des suggestions:**
|
||
- **Mesure:** % de suggestions de titres acceptées vs. ignorées/modifiées
|
||
- **Cible:** > 50% acceptance rate
|
||
- **Pourquoi:** Si en dessous, l'IA ne comprend pas le contexte utilisateur
|
||
|
||
**Feedback positif Memory Echo:**
|
||
- **Mesure:** Ratio boutons 👍 sur 👎 pour les connexions proactives
|
||
- **Cible:** > 3:1 (3 positifs pour 1 négatif)
|
||
- **Pourquoi:** Les insights doivent être pertinents, pas du spam
|
||
|
||
**4. Qualité des Reformulations**
|
||
|
||
**Satisfaction reformulation:**
|
||
- **Mesure:** % de reformulations gardées telles quelles vs. annulées
|
||
- **Cible:** > 70% gardées
|
||
- **Pourquoi:** La reformulation doit améliorer le contenu, pas le dégrader
|
||
|
||
### Business Success
|
||
|
||
**Open Source Adoption (3 mois):**
|
||
- **GitHub Stars:** 100+ étoiles (indicateur d'intérêt communauté)
|
||
- **Utilisateurs Actifs Hebdomadaires (WAU):** 50+ utilisateurs actifs par semaine
|
||
- **Engagement:** 30% des utilisateurs reviennent chaque semaine (retention semaine 1 à semaine 4)
|
||
|
||
**Open Source Growth (12 mois):**
|
||
- **GitHub Stars:** 500+ étoiles
|
||
- **Contribution Communautaire:** Au moins 2 contributeurs externes soumettent des PRs
|
||
- **Traction:** Articles/blogs de mentionner Memento (indicateur de buzz organique)
|
||
|
||
**Freemium Readiness (Futur):**
|
||
- **Intent de paiement:** 5-10% des utilisateurs actifs cliquent sur "Buy me a coffee" (même sans payer, indique la valeur perçue)
|
||
- **Conversion potentielle:** Si activé, > 2% conversion freemium payant
|
||
|
||
**Métrique Ultime:**
|
||
- **"Wow, c'est génial, je vais le sponsoriser!"** - Si un utilisateur dit ça spontanément, c'est un succès business
|
||
|
||
### Technical Success
|
||
|
||
**Performance:**
|
||
- **Recherche sémantique:** < 300ms pour une base de 1000 notes
|
||
- **Pourquoi:** Ne pas ralentir l'UX, l'utilisateur ne doit pas attendre
|
||
- **Suggestions titres:** < 2s après détection (50+ mots sans titre)
|
||
- **Pourquoi:** Doit paraître "instantané" pour l'utilisateur
|
||
- **Memory Echo analysis:** Traitement en arrière-plan, blocage UI < 100ms
|
||
- **Pourquoi:** L'utilisateur ne doit jamais sentir que l'IA "travaille"
|
||
|
||
**Architecture:**
|
||
- **Zero Breaking Change:** Toutes les features existantes continuent de fonctionner
|
||
- **Pourquoi:** C'est un projet brownfield, on ne casse pas ce qui marche
|
||
- **Multi-Provider Support:** Ollama ET OpenAI fonctionnent sans changement de code
|
||
- **Pourquoi:** Respecte la philosophie privacy-first + accessibilité
|
||
- **Multilingual Detection:** Fonctionne pour FR, EN, ES, DE minimum
|
||
- **Pourquoi:** Architecture multilingue validée lors du brainstorming
|
||
|
||
**Qualité IA:**
|
||
- **Taux de fausses positives Memory Echo:** < 20%
|
||
- **Pourquoi:** Au-dessus, c'est perçu comme du spam utilisateur
|
||
- **Suggestions titres pertinentes:** > 70% acceptation
|
||
- **Pourquoi:** Les titres doivent capturer l'essence de la note
|
||
- **Hallucinations contrôlées:** < 5% des générations contiennent des erreurs factuelles
|
||
- **Pourquoi:** Mode conservateur + score de confiance (Phase 3, mais préparer l'architecture)
|
||
|
||
### Measurable Outcomes
|
||
|
||
**Metrics Dashboard (à implémenter pour tracking):**
|
||
|
||
| Metric | Current | Phase 1 Target | Measurement Method |
|
||
|--------|---------|----------------|-------------------|
|
||
| Title suggestion acceptance | N/A | > 60% | Tracking accept/ignore |
|
||
| Semantic search top-3 hit rate | 0% | > 30% | Search analytics |
|
||
| Memory Echo CTR | N/A | > 40% | Insight click tracking |
|
||
| 👍👎 Feedback Ratio | N/A | > 3:1 | Feedback buttons |
|
||
| Avg search time improvement | Baseline | -40% | Time-to-find analytics |
|
||
| WAU (Week 4) | 0 | 50+ | Active user tracking |
|
||
| Week 1-4 retention | 0% | 30% | Cohort analysis |
|
||
| GitHub Stars (Month 3) | Current | +100 | GitHub API |
|
||
| Community contributors | 0 | 2+ | PR count |
|
||
|
||
## Product Scope
|
||
|
||
### MVP - Minimum Viable Product (Phase 1)
|
||
|
||
**Core User Journeys Supported:**
|
||
- Alex (Zero-friction note taker)
|
||
- Sarah (Self-hoster privée)
|
||
- Max (Local-first advocate)
|
||
|
||
**Must-Have Capabilities:**
|
||
|
||
**1. Intelligent Title Suggestions**
|
||
- Déclenchement automatique après 50+ mots sans titre
|
||
- Toast non-intrusive: "J'ai 3 idées de titres pour ta note, les voir?"
|
||
- 3 suggestions IA présentées en dropdown
|
||
- Options: "Voir" | "Plus tard" | "Ne plus demander"
|
||
- Détection langue automatique (FR, EN, ES, DE)
|
||
|
||
**2. Hybrid Semantic Search**
|
||
- Recherche unifiée (pas de distinction visible utilisateur)
|
||
- Badges sur résultats: "Correspondance exacte" | "Correspondance sémantique"
|
||
- Affichage top 10 résultats, mix mots-clés + sens
|
||
- Toggle IA dans Settings (ON/OFF granulaire)
|
||
|
||
**3. Paragraph-Level Reformulation**
|
||
- Menu "..." sur chaque note card
|
||
- Sous-menu "IA Assist" → "Réécrire paragraphe"
|
||
- Modal pour sélectionner paragraphe et choisir reformulation
|
||
- Options: "Clarifier", "Raccourcir", "Améliorer style"
|
||
- Bouton 👍👎 pour feedback
|
||
|
||
**4. Memory Echo (Proactive Connections) ⭐ DIFFÉRENCIATEUR**
|
||
- Analyse silencieuse en arrière-plan des embeddings existants
|
||
- **Max 1 insight proactif par jour** (configurable 0-3 dans Settings)
|
||
- Notification subtile: "J'ai remarqué quelque chose..."
|
||
- Affichage des 2 notes connectées avec option de lier
|
||
- Toggle ON/OFF dans Settings IA
|
||
- Boutons 👍👎 pour apprentissage
|
||
|
||
**5. AI Settings Panel**
|
||
- Page `/settings/ai` avec checkboxes ON/OFF pour chaque feature:
|
||
- ☑ Suggestions de titres
|
||
- ☑ Recherche sémantique
|
||
- ☑ Reformulation
|
||
- ☑ Memory Echo
|
||
- Slider pour fréquence Memory Echo (0-3 insights/jour)
|
||
- Sélection provider IA (Ollama/OpenAI) si configuré
|
||
|
||
**Technical Requirements:**
|
||
- API Routes: `/api/ai/titles`, `/api/ai/search`, `/api/ai/refactor`, `/api/ai/echo`
|
||
- Database: Extensions Prisma pour embeddings, language detection
|
||
- Components: `<AiSuggestion />`, `<AiSettingsPanel />`, `<MemoryEchoNotification />`
|
||
- Services: `ai.service.ts`, `embedding.service.ts`, `memory-echo.service.ts`
|
||
|
||
**Out of Scope (Explicitement Non-MVP):**
|
||
- Score de confiance visible (Phase 3)
|
||
- Système feedback 👍👎 généralisé (Phase 3)
|
||
- Mode conservateur (Phase 3)
|
||
- Description images OCR (Phase 2)
|
||
- Résumé URLs (Phase 2)
|
||
- Templates IA personnalisés (Phase 4)
|
||
- Transcription audio (Phase 4)
|
||
|
||
### Growth Features (Phase 2 - Post-MVP)
|
||
|
||
**Enhancement de l'expérience IA:**
|
||
- Description images + OCR (bouton sur image)
|
||
- Résumé URLs (extraction points clés)
|
||
- "Suggestions suites logiques" après chaque note
|
||
- Settings IA avancés (paramètres configurables par feature)
|
||
- Feedback learning amélioré (patterns utilisateur)
|
||
|
||
**Adoption & Engagement:**
|
||
- Onboarding IA pour nouveaux utilisateurs
|
||
- Tours guidés des features IA
|
||
- Analytics dashboard pour propriétaire
|
||
|
||
### Vision (Future - Phase 3+)
|
||
|
||
**Trust & Intelligence:**
|
||
- Score de confiance visible (transparence)
|
||
- Système feedback 👍👎 généralisé
|
||
- Mode conservateur (safety first)
|
||
- Détection langue auto améliorée (plus de langues)
|
||
|
||
**Advanced Features:**
|
||
- Transcription audio (notes vocales)
|
||
- Organisation auto (IA propose dossiers/catégories)
|
||
- Templates IA personnalisés (patterns utilisateur)
|
||
- Mode "Super IA" (optimisation complète note)
|
||
|
||
**Business Model:**
|
||
- Lancement freemium avec "Buy me a coffee"
|
||
- Features avancées payantes (Phase 4)
|
||
- Monétisation éthique sans lock-in
|
||
|
||
## User Journeys
|
||
|
||
### Journey 1: Alex - Le Déclic "Ça me comprend!"
|
||
|
||
**Alex**, Freelance Creative & Developer, 32 ans, Paris
|
||
|
||
**Persona:**
|
||
Alex travaille dans le chaos créatif. Il a des idées brillantes partout - dans le métro, pendant des réunions, à 3h du matin. Il utilise déjà Memento pour capturer ses pensées, mais il est frustré:
|
||
|
||
- "J'ai 300+ notes et je ne retrouve plus rien"
|
||
- "Je passe 20 min à chercher cette astuce CSS que j'ai notée le mois dernier"
|
||
- "Mes titres sont soit vides, soit 'Note 34' - pas inspirant"
|
||
|
||
**The Discovery (Opening Scene):**
|
||
|
||
Un lundi matin, Alex ouvre Memento pour continuer une note sur React qu'il a commencée la veille. Il tape frénétiquement, complètement focused sur son code - **pas le temps pour un titre**.
|
||
|
||
Soudain, une notification subtile apparaît:
|
||
> 💭 *"J'ai 3 idées de titres pour ta note, les voir?"*
|
||
|
||
Alex sourit - c'est non-intrusif. Il clique "Voir" et voit:
|
||
1. "React State Management: useMemo Optimization Pattern"
|
||
2. "Performance Hook Pattern pour Composants React"
|
||
3. "Astuce React: mémoisation avec useMemo"
|
||
|
||
**Le choix d'Alex:** "Wow, le premier capture exactement l'essence!" - Il clique pour l'appliquer.
|
||
|
||
**The Revelation (Rising Action):**
|
||
|
||
Deux jours plus tard, Alex cherche cette note. Au lieu de taper "React useMemo" (le titre exact), il tape naturellement: *"comment optimiser les performances des hooks"*
|
||
|
||
Memento lui montre 10 résultats. Les 3 premiers ont un badge 🎯 **"Correspondance sémantique"**. Le premier est SA note - elle ne contient même pas les mots "hook" ou "performance" dans le texte, mais l'IA a compris le sens!
|
||
|
||
**The "Aha!" Moment (Climax):**
|
||
|
||
Une semaine passe. Alex reçoit une notification inattendue:
|
||
> 💡 *"J'ai remarqué quelque chose..."*
|
||
>
|
||
> *"Tu as noté `[Node.js performance tips]` en janvier et `[Optimisation Next.js]` cette semaine. Ces notes sont connectées - veux-tu que je les lie ?"*
|
||
|
||
Alex clique "Voir la connexion" - son souffle coupé. Les deux notes traitent toutes les deux de... **server-side rendering optimization**. Il n'avait jamais fait le lien!
|
||
|
||
**The Transformation (Resolution):**
|
||
|
||
Trois mois plus tard:
|
||
- Alex a 400+ notes, mais il les retrouve **instantanément**
|
||
- Il accepte 80% des suggestions de titres (économie de temps massive)
|
||
- Memory Echo lui a fait découvrir 12 connexions entre ses notes
|
||
- **"C'est comme si j'avais un assistant de recherche personnel qui lit tout ce que j'écris"**
|
||
|
||
**Journey Requirements Revealed:**
|
||
- Détection intelligente du moment opportun (50+ mots sans titre)
|
||
- Recherche sémantique qui comprend l'intention, pas juste les mots
|
||
- Memory Echo avec fréquence contrôlable (pas spam)
|
||
- Feedback utilisateur pour apprentissage (👍👎)
|
||
|
||
---
|
||
|
||
### Journey 2: Max - "Mes données ne quittent jamais mon laptop"
|
||
|
||
**Max**, Privacy Advocate & Software Engineer, 28 ans, Berlin
|
||
|
||
**Persona:**
|
||
Max est passionné par la privacy. Il utilise déjà Memento avec Next.js en local sur sa machine, mais il est:
|
||
|
||
- **Sceptique:** "Pourquoi une IA devrait lire mes notes personnelles?"
|
||
- **Exigeant:** "Si une seule donnée quitte mon laptop, je désinstalle"
|
||
- **Technique:** Il a Ollama installé avec des modèles locaux
|
||
|
||
**The Discovery (Opening Scene):**
|
||
|
||
Max lit sur le blog Memento qu'il y a maintenant des features IA. Son premier réflexe: **méfiance**.
|
||
|
||
Il va dans Settings > AI et voit:
|
||
- ☑ Use AI Provider: [Ollama (Local) | OpenAI Cloud]
|
||
- Checkbox: "🔒 Keep all AI processing local (Ollama only)"
|
||
- Un message rassurant: *"With Ollama, your note data never leaves your device. Embeddings and processing happen entirely on your machine."*
|
||
|
||
Max soulagé, coche la case Ollama. Il voit un indicateur de statut: *"✅ Connected to local Ollama at http://localhost:11434"*
|
||
|
||
**The First Test (Rising Action):**
|
||
|
||
Max crée une note sur une architecture système qu'il conçoit pour un client. 60 mots plus tard, la suggestion de titre apparaît.
|
||
|
||
Il hésite... puis clique "Voir". Les 3 suggestions apparaissent instantanément (< 1s). Il choisit la troisième.
|
||
|
||
**The Verification (Climax):**
|
||
|
||
Curieux, Max ouvre les DevTools réseau pour vérifier:
|
||
- **0 appels vers des API externes** (pas d'OpenAI, pas de Google)
|
||
- Juste des appels locaux vers `localhost:11434` (Ollama)
|
||
|
||
Il sourit: *"Bon, ils ont tenu parole. Vraiment local."*
|
||
|
||
**The Memory Echo Experience (The Real Test):**
|
||
|
||
Une semaine plus tard, Max reçoit son premier Memory Echo:
|
||
> 💡 *"J'ai remarqué quelque chose..."*
|
||
>
|
||
> *"Tu as noté `[Microservices patterns]` et `[Event-driven architecture]`. Ces notes sont liées."*
|
||
|
||
Max clique "Voir la connexion" - et réalise que l'IA a fait le lien entre deux notes qu'il a écrites à 2 mois d'intervalle. Le plus fou? **Tout s'est passé localement.**
|
||
|
||
Il clique 👍 ("That's clever!"). Le système apprend.
|
||
|
||
**The Transformation (Resolution):**
|
||
|
||
Deux mois plus tard:
|
||
- Max a accepté 65% des suggestions de titres (elles sont vraiment pertinentes!)
|
||
- Il a désactivé Memory Echo à 0 (il préfère chercher manuellement)
|
||
- **"L'IA locale est aussi intelligente que le cloud, mais sans compromis privacy"**
|
||
- Il recommande Memento sur Reddit: *"Seul app de notes avec IA 100% locale et zéro telemetry"*
|
||
|
||
**Journey Requirements Revealed:**
|
||
- Configuration Ollama fonctionnelle out-of-the-box
|
||
- Détection automatique du provider Ollama local
|
||
- Indicateurs de statut de connexion IA
|
||
- Zero data exfiltration (tous les appels sont locaux)
|
||
- Toggle granulaire pour chaque feature IA (Max a désactivé Memory Echo)
|
||
- Performance locale acceptable (pas plus lent que le cloud)
|
||
|
||
---
|
||
|
||
### Journey 3: Léa - Admin Système "Zero Maintenance"
|
||
|
||
**Léa**, DevOps Engineer, 35 ans, Lyon - Admin de l'instance Memento de son équipe de 15 développeurs
|
||
|
||
**Persona:**
|
||
L'équipe de Léa utilise Memento pour partager des connaissances techniques. Elle a déployé Memento sur leur serveur interne. Maintenant avec les features IA, elle doit:
|
||
|
||
- Configurer les providers IA pour l'équipe
|
||
- Surveiller les coûts et la performance
|
||
- Gérer les utilisateurs qui ont des problèmes
|
||
|
||
**Initial Configuration (Opening Scene):**
|
||
|
||
Léa accède à `/settings/ai` (admin-only). Elle voit:
|
||
|
||
**Team AI Configuration:**
|
||
- Default AI Provider: [OpenAI Team API | Ollama Self-hosted | Custom]
|
||
- API Key Management: [Add team keys] (chiffrées en base)
|
||
- Per-user limits: Max embeddings per day, Max Memory Echo insights
|
||
|
||
Elle configure:
|
||
- Provider: OpenAI Team API (clé d'équipe partagée)
|
||
- Rate limits: 100 embeddings/jour/utilisateur
|
||
- Memory Echo: Max 1 insight/jour par utilisateur (pour éviter l'overwhelm)
|
||
|
||
**Monitoring (Rising Action):**
|
||
|
||
Dans le nouveau Dashboard Admin, Léa voit des métriques IA en temps réel:
|
||
- AI Usage Today: 1,247 embeddings générés
|
||
- Average Response Time: 180ms
|
||
- Top Feature Used: Title Suggestions (78%)
|
||
- Memory Echo Feedback Ratio: 4.2:1 👍/👎 (excellent!)
|
||
|
||
**The Problem (Climax):**
|
||
|
||
Un développeur (Thomas) se plaint: *"L'IA me suggère des titres en anglais alors que j'écris en français!"*
|
||
|
||
Léa va dans User Settings de Thomas et voit:
|
||
- Language Detection: Auto ✅
|
||
- Last Detected Language: FR (français)
|
||
- **Mais:** Le modèle utilisé a tendance à suggérer en anglais
|
||
|
||
Elle ajuste la config pour Thomas: Force language = FR, et augmente la température du modèle pour plus de créativité en français.
|
||
|
||
**The Optimization (Resolution):**
|
||
|
||
Un mois plus tard:
|
||
- L'équipe a généré 45,000 embeddings (coût OpenAI: ~$12/mois - gérable!)
|
||
- Léa a ajusté les settings basés sur les analytics:
|
||
- Memory Echo limité à 2/sem pour les utilisateurs power-users
|
||
- Titre suggestions activées par défaut (80% d'acceptation!)
|
||
- **"L'IA booste la productivité de l'équipe sans moi passer du temps à configurer"**
|
||
|
||
**Journey Requirements Revealed:**
|
||
- Admin dashboard avec métriques IA en temps réel
|
||
- Configuration par utilisateur ou par défaut d'équipe
|
||
- Gestion des clés API chiffrées
|
||
- Rate limiting par utilisateur
|
||
- Surveillance des coûts IA
|
||
- Ajustement des paramètres par utilisateur (langue, température, etc.)
|
||
- Analytics d'utilisation pour optimiser les settings
|
||
|
||
---
|
||
|
||
### Journey 4: Sophie - Quand l'IA se trompe
|
||
|
||
**Sophie**, Content Marketing Manager, 29 ans, Bordeaux - Utilisatrice régulière de Memento
|
||
|
||
**Persona:**
|
||
Sophie utilise Memento pour organiser ses idées de contenu. Elle est enthousiaste à l'idée des features IA, mais... elle va rencontrer des problèmes.
|
||
|
||
**The First Problem (Opening Scene):**
|
||
|
||
Sophie écrit une note sur une idée d'article. 70 mots plus tard, la suggestion de titre apparaît. Excitée, elle clique "Voir" et voit:
|
||
|
||
1. "Stratégie de Contenu B2B: Guide Complet"
|
||
2. "Marketing B2B: Plan d'Action 2025"
|
||
3. "Idées Articles: Marketing de Contenu"
|
||
|
||
Sophie déçoitée: *"None of these capture my idea at all!"*
|
||
|
||
Elle clique "Ne plus demander" pour cette note. Le système respecte son choix.
|
||
|
||
**The Second Problem - Memory Echo (Rising Action):**
|
||
|
||
Le lendemain, Sophie reçoit une Memory Echo:
|
||
> 💡 *"J'ai remarqué quelque chose..."*
|
||
>
|
||
> *"Tu as noté `[Recettes de smoothies]` et `[Stratégie SEO]`. Ces notes sont connectées."*
|
||
|
||
Sophie confuse: *"What? These have nothing to do with each other!"*
|
||
|
||
Elle clique 👎 ("Faux") - et un modal apparaît:
|
||
> *"Merci pour ton feedback! Pourquoi cette connexion n'est-elle pas pertinente?"*
|
||
|
||
Sophie explique: *"Les recettes de smoothies sont pour ma vie personnelle, le SEO c'est pro. Pas de rapport."*
|
||
|
||
Le système apprend.
|
||
|
||
**The Recovery (Climax):**
|
||
|
||
Sophie va dans Settings > IA et voit:
|
||
- Title Suggestions: ☑ Activé
|
||
- Memory Echo: ☑ Activé (Max 1/jour)
|
||
|
||
Elle décide d'ajuster:
|
||
- Title Suggestions: Activé, mais **"Me demander seulement si je dépasse 100 mots"** (elle a besoin de plus de contexte)
|
||
- Memory Echo: Activé, mais **"Seulement pour les notes des 30 derniers jours"** (éviter les connexions avec des notes anciennes)
|
||
|
||
**The Return to Trust (Resolution):**
|
||
|
||
Une semaine plus tard, Sophie écrit un long article (200+ mots). Cette fois, les suggestions de titres sont:
|
||
1. "Content Marketing: Comment créer du contenu qui convertit"
|
||
2. "Guide Marketing de Contenu: De la stratégie à l'exécution"
|
||
3. "Stratégie de Contenu: Les 5 piliers du marketing B2B"
|
||
|
||
Sophie sourit: *"Number 3 is perfect!"* - Elle clique pour l'appliquer.
|
||
|
||
Pour Memory Echo, elle reçoit une connexion entre deux notes sur le marketing (toutes deux des 30 derniers jours). Cette fois, elle clique 👍 ("That's clever!")!
|
||
|
||
**The Transformation:**
|
||
|
||
Un mois plus tard:
|
||
- Sophie a personnalisé ses settings IA selon ses préférences
|
||
- Elle accepte maintenant **55% des suggestions** (en hausse!)
|
||
- Son feedback 👎 a aidé le système à mieux comprendre son contexte
|
||
- **"L'IA n'est pas parfaite, mais je peux la configurer pour mes besoins"**
|
||
|
||
**Journey Requirements Revealed:**
|
||
- Bouton "Ne plus demander" respecté immédiatement
|
||
- Feedback 👎 avec modal pour comprendre **pourquoi** c'est faux
|
||
- Settings IA personnalisables par utilisateur (seuil de mots, période Memory Echo)
|
||
- Système d'apprentissage qui s'améliore avec le feedback
|
||
- Bouton d'annulation (undo) pour les suggestions appliquées par erreur
|
||
- Mode "conservateur" pour réduire les fausses positives
|
||
|
||
---
|
||
|
||
### Journey Requirements Summary
|
||
|
||
**Core Requirements Across All Journeys:**
|
||
|
||
**1. Intelligent & Contextual Triggers**
|
||
- Detection automatique des moments opportuns (50+ mots sans titre)
|
||
- Toast notifications non-intrusives avec options "Voir | Plus tard | Ne plus demander"
|
||
- Respect immédiat du choix utilisateur
|
||
|
||
**2. Hybrid Semantic Search**
|
||
- Recherche unifiée (pas de distinction visible)
|
||
- Badges sur résultats: "Correspondance exacte" | "Correspondance sémantique"
|
||
- Compréhension de l'intention utilisateur, pas juste mots-clés
|
||
|
||
**3. Memory Echo (Proactive Connections)**
|
||
- Fréquence configurable 0-3 insights/jour
|
||
- Période configurable (notes des X derniers jours)
|
||
- Connexions pertinentes (faux positifs < 20%)
|
||
|
||
**4. Privacy-First Architecture**
|
||
- Support Ollama local 100% fonctionnel
|
||
- Zéro appel API externe en mode local
|
||
- Indicateurs de statut de connexion IA
|
||
- Performance locale acceptable (< 1s suggestions)
|
||
|
||
**5. Granular User Control**
|
||
- Settings IA avec checkboxes ON/OFF par feature
|
||
- Personnalisation par utilisateur (seuil mots, période Memory Echo, etc.)
|
||
- Boutons 👍👎 pour feedback et apprentissage
|
||
- Bouton "Ne plus demander" immédiat
|
||
|
||
**6. Admin & Operations**
|
||
- Admin dashboard avec métriques IA temps réel
|
||
- Configuration par défaut d'équipe + overrides par utilisateur
|
||
- Gestion clés API chiffrées
|
||
- Rate limiting par utilisateur
|
||
- Surveillance coûts IA
|
||
- Analytics d'utilisation pour optimiser les settings
|
||
|
||
**7. Error Recovery & Learning**
|
||
- Feedback 👎 avec modal explicatif
|
||
- Système apprentissage avec feedback utilisateur
|
||
- Bouton annulation (undo) pour les suggestions appliquées
|
||
- Mode conservateur pour réduire fausses positives (Phase 3)
|
||
- Ajustement paramètres par utilisateur (langue, température, etc.)
|
||
|
||
## Innovation & Novel Patterns
|
||
|
||
Memento Phase 1 introduces **two major innovations** that radically differentiate the application from existing solutions like Google Keep and Notion.
|
||
|
||
### Innovation 1: Memory Echo - "I Didn't Search, It Found Me" ⭐
|
||
|
||
**The Breakthrough:**
|
||
|
||
Memory Echo inverse le paradigme traditionnel de la recherche d'information. Au lieu de demander à l'utilisateur de penser à chercher, l'IA **pense pour lui** en identifiant proactivement les connexions entre des notes que l'utilisateur n'avait pas vues.
|
||
|
||
**Why This Is Revolutionary:**
|
||
|
||
| Traditional Apps (Google Keep, Notion) | **Memento with Memory Echo** |
|
||
|----------------------------------------|------------------------------|
|
||
| **Reactive** - User must think to search | **Proactive** - AI finds connections automatically |
|
||
| User queries → System retrieves | System surfaces → User discovers |
|
||
| "I hope I find that note..." | "I didn't even know these were related!" |
|
||
| Discoverability depends on user memory | Discoverability enhanced by AI intelligence |
|
||
|
||
**The Insight:**
|
||
|
||
Most knowledge workers have hundreds or thousands of notes but forget the connections between them. A note written in January about "Node.js performance" might be directly relevant to a note written in June about "Next.js optimization" - but the user never makes the link.
|
||
|
||
Memory Echo solves this by:
|
||
- **Analyzing existing embeddings** for semantic similarity patterns
|
||
- **Identifying cross-temporal connections** (notes written days/weeks/months apart)
|
||
- **Surfacing one insight per day maximum** (configurable 0-3)
|
||
- **Learning from user feedback** (👍👎 buttons improve future suggestions)
|
||
|
||
**Market Context:**
|
||
|
||
- **Obsidian** has graph view and backlinks - but requires manual user action
|
||
- **Roam Research** has suggestions - but only highlights explicit keyword overlaps
|
||
- **Notion AI** - can search semantically but doesn't suggest proactively
|
||
- **Memento** - first to combine proactive discovery + semantic understanding + user feedback loop
|
||
|
||
**Validation Approach:**
|
||
|
||
**Technical Validation:**
|
||
- Cosine similarity threshold > 0.75 (ensures meaningful connections)
|
||
- Time diversity filter: Notes must be from different time periods (avoid same-session duplicates)
|
||
- Context relevance: Exclude obvious connections (identical keywords/categories)
|
||
|
||
**UX Validation:**
|
||
- Frequency limit: Max 1 insight/day (prevents overwhelming users)
|
||
- User control: Slider for 0-3 insights/day, complete ON/OFF toggle
|
||
- Feedback loop: 👍👎 buttons train the system on user preferences
|
||
|
||
**Success Criteria:**
|
||
- 👍👎 feedback ratio > 3:1 (3 positive for 1 negative)
|
||
- CTR (Click-Through Rate) > 40% (users click "View Connection")
|
||
- User retention: Users who engage with Memory Echo show 30% higher week-4 retention
|
||
|
||
**Risk Mitigation:**
|
||
|
||
**Risk 1: "Connections feel random/spammy"**
|
||
- **Mitigation:** High similarity threshold (0.75), conservative by default
|
||
- **Fallback:** User can set frequency to 0 (disable completely)
|
||
|
||
**Risk 2: "I already knew these were related"**
|
||
- **Mitigation:** Focus on cross-temporal connections (notes far apart in time)
|
||
- **Enhancement:** Add serendipity factor (connections user likely missed)
|
||
|
||
**Risk 3: Performance impact from analysis**
|
||
- **Mitigation:** Background processing, non-blocking UI
|
||
- **Target:** Analysis completes in < 100ms UI freeze time
|
||
|
||
**Competitive Moat:**
|
||
|
||
Memory Echo is difficult to copy because it requires:
|
||
1. **Existing embeddings** from user's notes (incumbents don't have this data)
|
||
2. **Feedback learning system** (requires engineering investment)
|
||
3. **Conservative-by-default philosophy** (most AI companies are aggressive)
|
||
4. **Privacy-first architecture** (local processing possible with Ollama)
|
||
|
||
---
|
||
|
||
### Innovation 2: Contextual AI "Zero-Friction" Pattern
|
||
|
||
**The Breakthrough:**
|
||
|
||
Memento introduces a new interaction pattern for AI features: **context-aware appearance**. The AI doesn't demand attention (always-visible toolbar) nor hide completely (buried in menus) - it appears **only when contextually appropriate**.
|
||
|
||
**Why This Is Revolutionary:**
|
||
|
||
| Current AI Apps | **Memento Contextual AI** |
|
||
|-----------------|---------------------------|
|
||
| Always-visible toolbars (overwhelming) | Appears when relevant |
|
||
| Hidden in menus (hard to discover) | Non-intrusive toast notifications |
|
||
| All features active simultaneously | Single interaction at a time |
|
||
| User manages complexity | System manages complexity |
|
||
|
||
**The Pattern:**
|
||
|
||
**Example 1 - Title Suggestions:**
|
||
- **Trigger:** User writes 50+ words without a title
|
||
- **Appearance:** Subtle toast: "I have 3 title ideas for this note, view them?"
|
||
- **Options:** "View" | "Not now" | "Don't ask for this note"
|
||
- **Outcome:** Feature discovered naturally, not overwhelming
|
||
|
||
**Example 2 - Reformulation:**
|
||
- **Trigger:** User opens "..." menu on a note card
|
||
- **Appearance:** "AI Assist" → "Rewrite paragraph" (intentional, not disruptive)
|
||
- **Context:** User is already in editing mode, so AI suggestion fits naturally
|
||
|
||
**Example 3 - Memory Echo:**
|
||
- **Trigger:** Background analysis finds strong connection
|
||
- **Appearance:** Once per day max (configurable)
|
||
- **Priority:** If multiple AI interactions possible, Memory Echo takes precedence
|
||
|
||
**The Insight:**
|
||
|
||
The "zero-friction" philosophy means:
|
||
- **Zero cognitive load** - User doesn't need to remember where features are
|
||
- **Zero interruption** - AI never overwhelms with multiple simultaneous requests
|
||
- **Zero learning curve** - Features are discovered when needed
|
||
- **Zero lock-in** - Every feature can be disabled independently
|
||
|
||
**Market Context:**
|
||
|
||
- **Notion AI** - AI features hidden in "/ai" command (hard to discover)
|
||
- **Obsidian Copilot** - Sidebar always visible (can be distracting)
|
||
- **Memento** - Contextual appearance balances discoverability with non-intrusiveness
|
||
|
||
**Scalability Strategy:**
|
||
|
||
As AI features grow (Phase 2: Image OCR, URL summaries, etc.), the pattern scales via:
|
||
|
||
**1. Single-Interaction Rule:**
|
||
```
|
||
IF (title_suggested AND memory_echo_pending):
|
||
Show Memory Echo (higher value)
|
||
Defer title suggestion to next trigger
|
||
```
|
||
|
||
**2. Priority Hierarchy:**
|
||
```
|
||
Priority 1: Memory Echo (proactive discovery)
|
||
Priority 2: Title suggestions (capture value)
|
||
Priority 3: Reformulation (enhancement)
|
||
Priority 4: URL summaries, OCR, etc. (nice-to-have)
|
||
```
|
||
|
||
**3. "Focus Mode" Toggle:**
|
||
- User can disable ALL proactive AI temporarily
|
||
- Perfect for deep work sessions
|
||
- One-click re-enable when ready
|
||
|
||
**Validation Approach:**
|
||
|
||
**UX Validation:**
|
||
- A/B test trigger thresholds (50 words vs. 75 vs. 100)
|
||
- Measure "accept/ignore" ratio per feature
|
||
- Track user settings changes (if users disable, adjust defaults)
|
||
|
||
**Success Criteria:**
|
||
- Feature discovery rate > 70% (users find features without tutorial)
|
||
- Feature acceptance rate > 50% (users accept suggestions when offered)
|
||
- Overwhelm rate < 5% (users rarely disable all AI features)
|
||
|
||
**Risk Mitigation:**
|
||
|
||
**Risk 1: "Users never discover features"**
|
||
- **Mitigation:** Progressive disclosure - show more prominently after first use
|
||
- **Fallback:** Optional onboarding tour for AI features
|
||
|
||
**Risk 2: "Too many features become overwhelming"**
|
||
- **Mitigation:** Single-interaction rule enforced at UX level
|
||
- **Fallback:** "Focus Mode" to disable all proactive AI
|
||
|
||
**Risk 3: "Context detection fails"**
|
||
- **Mitigation:** Conservative triggers (better to miss than to annoy)
|
||
- **Fallback:** Manual trigger in settings for all features
|
||
|
||
**Competitive Moat:**
|
||
|
||
This interaction pattern is difficult to copy because it requires:
|
||
1. **Philosophical commitment** to user-centric design (most AI companies prioritize engagement over UX)
|
||
2. **Engineering discipline** to build context-aware triggers
|
||
3. **User feedback loops** to refine triggers over time
|
||
4. **Multi-feature coordination** (preventing feature conflicts)
|
||
|
||
---
|
||
|
||
## Why These Innovations Matter
|
||
|
||
**Combined Impact:**
|
||
|
||
Memory Echo (proactive discovery) + Contextual AI (respectful interaction) create a **new paradigm for AI-assisted knowledge management**:
|
||
|
||
1. **AI as Partner, Not Tool** - The system thinks with you, not just for you
|
||
2. **Serendipity at Scale** - Discover connections you'd never find manually
|
||
3. **Zero-Friction Intelligence** - AI enhances without interrupting
|
||
4. **Privacy-First** - All innovations work locally via Ollama
|
||
|
||
**The "Aha!" Moment:**
|
||
|
||
When users experience Memory Echo discovering a connection they missed, they realize:
|
||
> *"This isn't just a note-taking app. It's a partner that understands my knowledge better than I do."*
|
||
|
||
This creates emotional lock-in that features alone cannot achieve.
|
||
|
||
## Web App Specific Requirements
|
||
|
||
### Project-Type Overview
|
||
|
||
Memento is a **Single Page Application (SPA)** built with Next.js 16 App Router, combining server-side rendering (SSR) for performance with client-side navigation for fluid user experience. Phase 1 MVP AI focuses on **progressive enhancement** - AI features add value without breaking existing core functionality.
|
||
|
||
### Browser Support Matrix
|
||
|
||
**Primary Target (Modern Browsers):**
|
||
|
||
| Browser | Minimum Version | Rationale |
|
||
|---------|-----------------|-----------|
|
||
| Chrome/Edge | 120+ (Jan 2024) | Chromium engine, latest APIs |
|
||
| Firefox | 120+ (Jan 2024) | Gecko engine, modern JS |
|
||
| Safari | 17+ (Sep 2023) | WebKit engine, macOS/iOS |
|
||
| Mobile Safari | iOS 17+ | iPhone/iPad support |
|
||
|
||
**Technical Approach:**
|
||
- **No polyfills** - Use modern JavaScript features (ES2023+, CSS Grid, Flexbox)
|
||
- **Feature detection** - Graceful degradation if APIs unavailable
|
||
- **Progressive enhancement** - Core features work without JavaScript if possible
|
||
|
||
**Out of Scope (Explicit):**
|
||
- IE11 or legacy browsers - Too much technical debt for Phase 1
|
||
- Opera Mini or other niche browsers - < 0.1% market share
|
||
- Android < 10 - Too old for modern web APIs
|
||
|
||
**Rationale:**
|
||
- Memento targets tech-savvy users (developers, knowledge workers)
|
||
- Modern browser usage > 95% in target demographics
|
||
- Reduces bundle size and technical complexity
|
||
|
||
---
|
||
|
||
### Responsive Design Strategy
|
||
|
||
**Breakpoint Strategy (Mobile-First):**
|
||
|
||
```
|
||
Mobile First: 320px - 639px (Smartphones)
|
||
Tablet: 640px - 1023px (iPad, tablets)
|
||
Desktop: 1024px - 1439px (Laptops)
|
||
Desktop Wide: 1440px+ (Large monitors)
|
||
```
|
||
|
||
**AI Feature Adaptation:**
|
||
|
||
| Feature | Mobile | Tablet | Desktop |
|
||
|---------|--------|--------|---------|
|
||
| Title suggestions toast | Bottom sheet | Bottom-right toast | Top-right toast |
|
||
| Memory Echo notification | Full-width banner | Top-right card | Sidebar card |
|
||
| Reformulation modal | Full-screen | Modal | Side panel |
|
||
| Search results | Single column | 2 columns | 3 columns + filters |
|
||
|
||
**Touch Targets (WCAG 2.1 AA):**
|
||
- Minimum tap target size: 44×44px (mobile)
|
||
- Spacing between targets: 8px minimum
|
||
- AI buttons (👍👎) must be tappable without zoom
|
||
|
||
---
|
||
|
||
### Performance Targets
|
||
|
||
**Critical Performance Metrics (Phase 1):**
|
||
|
||
| Metric | Target | Measurement Method |
|
||
|--------|--------|-------------------|
|
||
| **Title Suggestions Generation** | < 2s | Time from trigger to display |
|
||
| **Semantic Search** | < 300ms | Time from query to results |
|
||
| **Memory Echo Analysis** | < 100ms UI freeze | Background processing time |
|
||
| **Initial Page Load** | < 3s (FCP) | First Contentful Paint |
|
||
| **Time to Interactive** | < 5s (TTI) | Full app interactivity |
|
||
|
||
**Performance Budget:**
|
||
- **JavaScript bundle:** < 200KB gzipped (excluding AI providers)
|
||
- **CSS:** < 50KB gzipped
|
||
- **First paint:** < 1.5s on 4G connection
|
||
|
||
**Optimization Strategies:**
|
||
1. **Code splitting:** AI features loaded on-demand (not in initial bundle)
|
||
2. **Lazy loading:** Components loaded when needed
|
||
3. **ISR (Incremental Static Regeneration):** Pre-render pages, revalidate in background
|
||
4. **Image optimization:** Next.js Image component with WebP/AVIF
|
||
5. **AI processing:** Always background, never block main thread
|
||
|
||
**Monitoring:**
|
||
- Core Web Vitals tracked in production
|
||
- Performance regression tests in CI/CD
|
||
- Real User Monitoring (RUM) for actual usage data
|
||
|
||
---
|
||
|
||
### SEO Strategy
|
||
|
||
**Approach:** SEO is **not critical** for Phase 1 MVP AI because:
|
||
|
||
1. **Authentication Required** - Main app is behind login (no public content)
|
||
2. **B2C Community-Driven** - Growth through word-of-mouth, not organic search
|
||
3. **Privacy-First** - Users prefer private apps over discoverable ones
|
||
|
||
**SEO for Public Pages Only:**
|
||
|
||
**Public Pages Requiring SEO:**
|
||
- Landing page (`/`) - Product overview, features
|
||
- Documentation (`/docs`) - User guides, API docs
|
||
- Blog (future) - Content marketing
|
||
|
||
**SEO Best Practices for Public Pages:**
|
||
- Meta tags (title, description, Open Graph)
|
||
- Structured data (JSON-LD for rich snippets)
|
||
- Sitemap auto-generation
|
||
- Robots.txt configuration
|
||
- Canonical URLs for duplicate content prevention
|
||
|
||
**AI Features NO-INDEX:**
|
||
- All authenticated pages behind login
|
||
- User-generated content (notes, labels)
|
||
- Search results, dashboards
|
||
- AI-generated content (titles, suggestions)
|
||
|
||
**Rationale:** Prevent search engines from indexing private user data and AI-generated content.
|
||
|
||
---
|
||
|
||
### Accessibility Level (WCAG 2.1 AA)
|
||
|
||
**Target:** **WCAG 2.1 Level AA** for Phase 1
|
||
|
||
**AI Feature Accessibility Requirements:**
|
||
|
||
**1. Title Suggestions:**
|
||
- Toast must announce: "3 title suggestions available" to screen readers
|
||
- Each suggestion must be keyboard navigable (Arrow keys + Enter)
|
||
- Visual focus indicators on all interactive elements
|
||
|
||
**2. Memory Echo Notifications:**
|
||
- Must NOT interrupt screen reader navigation
|
||
- Use `role="status"` (not `role="alert"`) for non-critical notifications
|
||
- Provide mechanism to dismiss without activating (ESC key)
|
||
|
||
**3. Semantic Search:**
|
||
- Results must be announceable: "5 results found, 3 semantic matches"
|
||
- Badges must be descriptive: "Semantic match" (not just icons)
|
||
- Keyboard shortcuts for advanced users (Cmd+K for search)
|
||
|
||
**4. Reformulation Modal:**
|
||
- Focus trap in modal (Tab cycles within modal only)
|
||
- ESC to close, Enter to confirm
|
||
- Progress indicators for AI processing (ARIA live regions)
|
||
|
||
**Color Contrast:**
|
||
- All text: Minimum 4.5:1 contrast ratio (WCAG AA)
|
||
- AI UI elements (buttons, badges): 3:1 contrast ratio for large text
|
||
- Focus indicators: 3:1 contrast ratio against background
|
||
|
||
**Testing:**
|
||
- Automated testing: axe-core DevTools, WAVE browser extension
|
||
- Manual testing: Keyboard-only navigation, screen reader testing (NVDA/JAWS)
|
||
- User testing: Include users with disabilities in beta testing
|
||
|
||
**Accessibility Success Metrics:**
|
||
- All AI features usable without mouse
|
||
- Zero keyboard traps in AI modals/toasts
|
||
- Screen reader compatibility > 90% (NVDA, JAWS, VoiceOver)
|
||
|
||
---
|
||
|
||
### Technical Architecture Considerations
|
||
|
||
**Next.js 16 App Router Patterns:**
|
||
|
||
**1. Server Components (RSC) for Performance:**
|
||
- Note list, search results as Server Components
|
||
- AI features as Client Components (need interactivity)
|
||
- Hybrid approach: Static shell + dynamic AI content
|
||
|
||
**2. Streaming for AI Responses:**
|
||
- Use Suspense + streaming for slow AI features
|
||
- Progressive loading: Show skeleton → partial results → complete results
|
||
- Example: Semantic search streams results as they're computed
|
||
|
||
**3. Error Boundaries:**
|
||
- Graceful degradation if AI features fail
|
||
- User-friendly error messages (not technical jargon)
|
||
- Retry mechanisms with exponential backoff
|
||
|
||
**4. Caching Strategy:**
|
||
- Embeddings cached in database (not regenerated)
|
||
- AI responses cached per note (TTL: 24 hours)
|
||
- Search results cached for 5 minutes (user-specific)
|
||
|
||
**Data Flow Architecture:**
|
||
|
||
```
|
||
User Action → Client Component → Server Action → AI Provider
|
||
↓ ↓ ↓
|
||
UI Update Prisma DB Embedding Generation
|
||
↓ ↓
|
||
Display Cache Store
|
||
```
|
||
|
||
**State Management:**
|
||
- Server State: Prisma + Server Actions (no separate API layer needed)
|
||
- Client State: React hooks (useState, useTransition)
|
||
- AI State: Server Actions with progressive enhancement
|
||
|
||
---
|
||
|
||
### Implementation Considerations
|
||
|
||
**Phase 1 MVP Scope:**
|
||
|
||
**IN Scope:**
|
||
- Responsive design for mobile/tablet/desktop
|
||
- WCAG 2.1 AA compliance
|
||
- Performance targets met (< 2s titles, < 300ms search)
|
||
- Modern browsers only (Chrome 120+, Firefox 120+, Safari 17+)
|
||
- Basic SEO for landing page only
|
||
|
||
**OUT of Scope (Phase 2+):**
|
||
- PWA capabilities (offline mode, install prompt)
|
||
- Real-time features (WebSocket, live updates)
|
||
- Legacy browser support (IE11, old Safari)
|
||
- Advanced SEO (blog, content marketing)
|
||
- Accessibility AAA (full compliance)
|
||
|
||
**Technical Debt to Avoid:**
|
||
- Skipping accessibility for "speed" (creates debt later)
|
||
- Hardcoding for desktop only (mobile-first approach)
|
||
- Blocking UI for AI processing (always background)
|
||
- Ignoring performance monitoring (leads to regressions)
|
||
|
||
## Project Scoping & Phased Development
|
||
|
||
### MVP Strategy & Philosophy
|
||
|
||
**MVP Approach:** **Problem-Solving + Experience Hybrid**
|
||
|
||
Memento Phase 1 MVP IA combines two MVP philosophies:
|
||
|
||
**1. Problem-Solving MVP:**
|
||
- **Core Problem:** "J'ai des centaines de notes et je ne retrouve plus rien"
|
||
- **Solution:** Recherche sémantique + suggestions de titres
|
||
- **Value:** Utilité immédiate - l'utilisateur retrouve ses notes instantanément
|
||
|
||
**2. Experience MVP:**
|
||
- **Core Experience:** Le moment "Aha!" - "Je n'ai pas cherché, elle m'a trouvée"
|
||
- **Solution:** Memory Echo (connexions proactives)
|
||
- **Value:** Différenciation unique - innovation que personne n'a
|
||
|
||
**Resource Requirements:**
|
||
- **Team Size:** 1-2 developers (possible pour side project)
|
||
- **Timeline:** 8-12 semaines pour MVP complet
|
||
- **Skills:** Next.js, Prisma, AI integration (OpenAI/Ollama), Vector embeddings
|
||
- **Infrastructure:** Vercel/Netlify (zero DevOps), SQLite database, Ollama optionnel
|
||
|
||
**Launch Strategy:**
|
||
- **Private Beta:** 10-20 early adopters (friends, colleagues)
|
||
- **Public Beta:** Open source release with "Beta" badge
|
||
- **Growth:** Word-of-mouth, Reddit (r/NoteTaking, r/SideProject), HackerNews
|
||
|
||
---
|
||
|
||
### MVP Feature Set (Phase 1)
|
||
|
||
**Core User Journeys Supported:**
|
||
|
||
✅ **Journey 1: Alex (Primary User - Success Path)**
|
||
- Title suggestions when writing 50+ words
|
||
- Semantic search finds notes by meaning
|
||
- Memory Echo reveals hidden connections
|
||
- Complete workflow: capture → search → discover
|
||
|
||
✅ **Journey 2: Max (Privacy-First)**
|
||
- Ollama local AI processing 100% functional
|
||
- Zero data exfiltration (verified in DevTools)
|
||
- All features work offline (local provider)
|
||
|
||
✅ **Journey 4: Sophie (Edge Case)**
|
||
- Customizable AI settings (thresholds, frequencies)
|
||
- Feedback learning from 👎 responses
|
||
- Granular ON/OFF control per feature
|
||
|
||
**Must-Have Capabilities (MVP):**
|
||
|
||
**1. Intelligent Title Suggestions**
|
||
- Déclenchement automatique après 50+ mots sans titre
|
||
- Toast notification non-intrusive avec options "Voir | Plus tard | Ne plus demander"
|
||
- 3 suggestions IA générées en < 2s
|
||
- Application one-click ou saisie manuelle
|
||
- Détection langue automatique (FR, EN, ES, DE)
|
||
|
||
**2. Hybrid Semantic Search**
|
||
- Recherche unifiée (pas de distinction visible utilisateur)
|
||
- Badges sur résultats: "Correspondance exacte" | "Correspondance sémantique"
|
||
- Affichage top 10 résultats mixés (mots-clés + sémantique)
|
||
- Performance < 300ms pour 1000 notes
|
||
- Toggle ON/OFF dans Settings IA
|
||
|
||
**3. Paragraph-Level Reformulation**
|
||
- Menu "..." sur chaque note card → "IA Assist" → "Réécrire paragraphe"
|
||
- Modal pour sélectionner paragraphe
|
||
- Options: "Clarifier", "Raccourcir", "Améliorer style"
|
||
- Boutons 👍👎 pour feedback
|
||
|
||
**4. Memory Echo (Proactive Connections) ⭐ DIFFÉRENCIATEUR**
|
||
- Analyse silencieuse en arrière-plan des embeddings existants
|
||
- **Max 1 insight proactif par jour** (configurable 0-3)
|
||
- Notification: "J'ai remarqué quelque chose..." avec 2 notes connectées
|
||
- Boutons "View Connection" | "Dismiss" | 👍👎
|
||
- Cosine similarity threshold > 0.75
|
||
- Time diversity filter (notes de périodes différentes)
|
||
|
||
**5. AI Settings Panel**
|
||
- Page `/settings/ai` avec checkboxes ON/OFF pour chaque feature:
|
||
- ☑ Title Suggestions
|
||
- ☑ Semantic Search
|
||
- ☑ Reformulation
|
||
- ☑ Memory Echo
|
||
- Slider pour fréquence Memory Echo (0-3 insights/jour)
|
||
- Sélection provider IA: [Ollama (Local) | OpenAI Cloud]
|
||
- Indicateurs de statut de connexion IA
|
||
|
||
**6. Multi-Provider AI Support**
|
||
- Ollama local (http://localhost:11434)
|
||
- OpenAI API (cloud option)
|
||
- Factory pattern pour extensibilité
|
||
- Fallback automatique si provider unavailable
|
||
|
||
**7. Privacy & Control**
|
||
- Zéro appel API externe en mode Ollama (vérifiable)
|
||
- Boutons feedback 👍👎 pour apprentissage
|
||
- Bouton "Ne plus demander" immédiat
|
||
- Personnalisation par utilisateur (seuil mots, période Memory Echo)
|
||
|
||
**Out of Scope (Explicitly Non-MVP):**
|
||
- Score de confiance visible (Phase 3)
|
||
- Système feedback généralisé (Phase 3)
|
||
- Mode conservateur (Phase 3)
|
||
- Description images OCR (Phase 2)
|
||
- Résumé URLs (Phase 2)
|
||
- Templates IA personnalisés (Phase 4)
|
||
- Transcription audio (Phase 4)
|
||
- Admin dashboard avancé (Phase 2)
|
||
- Analytics d'utilisation IA (Phase 2)
|
||
|
||
---
|
||
|
||
### Post-MVP Features
|
||
|
||
**Phase 2 (Post-MVP - Enhancement & Scale):**
|
||
|
||
**Timeframe:** 3-6 months post-MVP launch
|
||
|
||
**Additional User Types:**
|
||
- Journey 3: Léa (Admin Système) avec dashboard IA
|
||
- Power Users avec plus de 1000 notes
|
||
|
||
**Enhanced IA Features:**
|
||
- **Description Images + OCR**
|
||
- Bouton IA sur images dans notes
|
||
- Génération description automatique
|
||
- Extraction texte (OCR)
|
||
|
||
- **Résumé URLs**
|
||
- Détection automatique URLs dans notes
|
||
- Bouton "Résumer" pour extraire points clés
|
||
- Choix: résumé court vs. analyse détaillée
|
||
|
||
- **Suggestions Suites Logiques**
|
||
- Après chaque note, IA suggère "Idées de suite"
|
||
- Basé sur le contenu de la note actuelle
|
||
|
||
- **AI Settings Avancés**
|
||
- Paramètres configurables par feature (température, max tokens, etc.)
|
||
- Ajustement par utilisateur (langue force, créativité)
|
||
|
||
- **Admin Dashboard IA**
|
||
- Métriques temps réel (usage today, avg response time)
|
||
- Surveillance coûts IA (OpenAI billing estimation)
|
||
- Ajustement settings par utilisateur (admin overrides)
|
||
|
||
- **Onboarding IA**
|
||
- Tour guidé pour nouveaux utilisateurs
|
||
- Discovery progressif des features IA
|
||
|
||
**Success Criteria Phase 2:**
|
||
- 500+ GitHub stars
|
||
- 200+ WAU (Weekly Active Users)
|
||
- Week 1-4 retention > 40%
|
||
|
||
---
|
||
|
||
**Phase 3 (Expansion - Trust & Intelligence):**
|
||
|
||
**Timeframe:** 6-12 months post-MVP
|
||
|
||
**Trust & Transparency:**
|
||
- **Score de Confiance Visible**
|
||
- Pourcentage affiché pour chaque génération IA
|
||
- >90% = ✅ Solide (auto-application)
|
||
- 70-89% = ⚠️ Moyen (à vérifier)
|
||
- <70% = ❌ Faible (pas d'auto-génération)
|
||
|
||
- **Système Feedback Généralisé**
|
||
- Boutons 👍👎 sur TOUTES les générations IA
|
||
- Modal explicatif pour feedback 👎 ("Pourquoi c'est faux?")
|
||
- Apprentissage automatique (patterns utilisateur)
|
||
|
||
- **Mode Conservateur (Safety First)**
|
||
- Générations auto seulement si confiance >90%
|
||
- Si doute: IA demande confirmation utilisateur
|
||
- Réduction fausses positives < 5%
|
||
|
||
**Advanced Capabilities:**
|
||
- **Détection Langue Améliorée**
|
||
- Plus de langues supportées (JA, ZH, IT, PT, NL, etc.)
|
||
- Language switching automatique (notes multilingues)
|
||
|
||
- **Memory Echo V2**
|
||
- Graph visualization des connexions
|
||
- Insights multiples par jour avec priorisation
|
||
- Clustering thématique des notes
|
||
|
||
**Business Model:**
|
||
- Lancement freemium avec "Buy me a coffee"
|
||
- Features avancées payantes (Phase 4)
|
||
- Monétisation éthique sans lock-in
|
||
|
||
**Success Criteria Phase 3:**
|
||
- 1000+ GitHub stars
|
||
- 500+ WAU
|
||
- Week 1-4 retention > 50%
|
||
|
||
---
|
||
|
||
**Phase 4 (Future - Advanced Features):**
|
||
|
||
**Timeframe:** 12+ months post-MVP
|
||
|
||
**Advanced Features:**
|
||
- **Transcription Audio**
|
||
- Notes vocales avec transcription IA
|
||
- Commandes vocales ("Crée une note sur X")
|
||
|
||
- **Organisation Auto**
|
||
- IA propose dossiers/catégories
|
||
- Tags automatiques hiérarchiques
|
||
|
||
- **Templates IA Personnalisés**
|
||
- IA génère templates selon patterns utilisateur
|
||
- "Meeting notes", "Brainstorming", "Project planning"
|
||
|
||
- **Mode "Super IA"**
|
||
- Optimisation complète note (titre + tags + reformulation)
|
||
- One-click enhancement
|
||
|
||
---
|
||
|
||
### Risk Mitigation Strategy
|
||
|
||
**Technical Risks:**
|
||
|
||
**Risk 1: Performance embeddings avec 1000+ notes**
|
||
- **Mitigation:** Caching agressif (embeddings stockés en DB), background processing
|
||
- **Fallback:** Pagination pour gros volumes de notes
|
||
- **Monitoring:** Alertes si > 500ms pour recherche sémantique
|
||
|
||
**Risk 2: Ollama local lent ou instable**
|
||
- **Mitigation:** Support multi-provider (fallback OpenAI automatique)
|
||
- **User Control:** Utilisateur peut switcher manuellement
|
||
- **Performance:** Mode local optionnel, pas obligatoire
|
||
|
||
**Risk 3: Memory Echo fait des connexions aléatoires**
|
||
- **Mitigation:** Cosine threshold > 0.75, time diversity filter
|
||
- **Feedback:** 👎 ajuste le système, apprentissage continu
|
||
- **User Control:** Fréquence configurable 0-3/jour, OFF toggle
|
||
|
||
**Market Risks:**
|
||
|
||
**Risk 1: Utilisateurs ne voient pas la valeur de Memory Echo**
|
||
- **Mitigation:** Fréquence conservative (1/jour max), ne pas spam
|
||
- **Onboarding:** Tour guidé met en avant Memory Echo
|
||
- **Validation:** Beta testing avec early adopters pour ajuster threshold
|
||
|
||
**Risk 2: Google Keep ou Notion copient Memory Echo**
|
||
- **Mitigation:** First-mover advantage, open source community
|
||
- **Moat:** Difficile à copier sans embeddings existants + feedback learning
|
||
- **Innovation:** Continuer à innover (Phase 2, 3, 4)
|
||
|
||
**Risk 3: Adoption IA lente (résistance utilisateur)**
|
||
- **Mitigation:** Pattern "Zéro Prise de Tête" - non-intrusif par défaut
|
||
- **Control:** ON/OFF granulaire pour chaque feature
|
||
- **Education:** Documentation claire, exemples d'utilisation
|
||
|
||
**Resource Risks:**
|
||
|
||
**Risk 1: Équipe trop petite (1 dev seul)**
|
||
- **Mitigation:** Scope minimal viable, pas de features "nice-to-have"
|
||
- **Contingency:** Si ressources limitées, couler Memory Echo (garder pour Phase 2)
|
||
- **Priority:** Titres auto + Recherche sémantique = valeur core
|
||
|
||
**Risk 2: Coûts OpenAI explosent**
|
||
- **Mitigation:** Support Ollama local (zero coût marginal)
|
||
- **User Choice:** Utilisateur peut choisir provider selon budget
|
||
- **Optimization:** Caching, rate limiting par utilisateur
|
||
|
||
**Risk 3: Timeline plus longue que prévue**
|
||
- **Mitigation:** MVP scoping flexible - features peuvent être déplacées
|
||
- **Contingency:** Si 8 semaines insuffisantes, étendre à 12 semaines
|
||
- **MVP Definition:** Pas besoin de toutes les features parfaites - "good enough" pour launch
|
||
|
||
**Overall Risk Posture:**
|
||
- **Philosophy:** Conservative par défaut, optimiser pour apprentissage
|
||
- **Validation:** Beta testing rapide, feedback continu
|
||
- **Flexibilité:** Scope adaptable selon contraintes ressources/temps
|
||
|
||
## Functional Requirements
|
||
|
||
### AI-Powered Content Enhancement
|
||
|
||
- FR1: Users can receive AI-generated title suggestions when writing notes without titles
|
||
- FR2: Users can view multiple title suggestion options before selecting one
|
||
- FR3: Users can apply AI-generated titles to their notes with a single action
|
||
- FR4: Users can defer title suggestions to view later
|
||
- FR5: Users can dismiss title suggestions for specific notes permanently
|
||
- FR6: Users can request AI-powered reformulation of selected paragraph content
|
||
- FR7: Users can select different reformulation approaches (clarify, shorten, improve style)
|
||
- FR8: Users can replace original content with AI-reformulated versions
|
||
- FR9: Users can cancel reformulation actions and retain original content
|
||
- FR10: Users can provide positive or negative feedback on AI-generated content
|
||
|
||
### Intelligent Search & Discovery
|
||
|
||
- FR11: Users can search notes using keyword queries that match exact text
|
||
- FR12: Users can search notes using natural language queries that match semantic meaning
|
||
- FR13: Users can view combined search results from both keyword and semantic matching
|
||
- FR14: Users can see visual indicators distinguishing exact matches from semantic matches
|
||
- FR15: Users can receive proactive insights about connections between related notes
|
||
- FR16: Users can view the specific content and context of suggested note connections
|
||
- FR17: Users can link related notes together when accepting connection suggestions
|
||
- FR18: Users can dismiss proactive connection insights
|
||
- FR19: Users can provide feedback on the relevance of suggested note connections
|
||
|
||
### User Control & Preferences
|
||
|
||
- FR20: Users can access AI settings to configure individual feature availability
|
||
- FR21: Users can enable or disable title suggestions independently
|
||
- FR22: Users can enable or disable semantic search independently
|
||
- FR23: Users can enable or disable paragraph reformulation independently
|
||
- FR24: Users can enable or disable proactive connection insights independently
|
||
- FR25: Users can adjust the frequency limit for proactive connection insights
|
||
- FR26: Users can customize AI trigger thresholds (e.g., word count for title suggestions)
|
||
- FR27: Users can set time period constraints for proactive connection analysis
|
||
- FR28: Users can temporarily disable all proactive AI features during focused work sessions
|
||
- FR29: Users can re-enable disabled AI features through settings interface
|
||
|
||
### Privacy & Multi-Provider AI Architecture
|
||
|
||
- FR30: Users can select between local AI processing (Ollama) and cloud AI processing (OpenAI)
|
||
- FR31: Users can verify that local AI processing does not send data external to their device
|
||
- FR32: Users can view connection status indicators for AI providers
|
||
- FR33: Users can switch between AI providers without losing functionality
|
||
- FR34: The system can automatically fallback to alternative AI providers if primary provider fails
|
||
- FR35: Users can configure API keys for cloud AI providers
|
||
- FR36: Users can remove stored API credentials from the system
|
||
- FR37: The system can detect and support multiple languages in user-generated content
|
||
- FR38: The system can process AI requests using user's content language while maintaining system prompts in English
|
||
|
||
### Administration & Operations
|
||
|
||
- FR39: Administrators can configure default AI provider settings for all users
|
||
- FR40: Administrators can set rate limits on AI usage per user
|
||
- FR41: Administrators can override individual user AI settings
|
||
- FR42: Administrators can monitor real-time AI usage metrics across the system
|
||
- FR43: Administrators can view AI processing costs and consumption statistics
|
||
- FR44: Administrators can adjust AI model parameters (temperature, max tokens, etc.)
|
||
- FR45: Administrators can configure team-wide AI feature availability
|
||
- FR46: The system can encrypt and securely store AI provider API keys
|
||
|
||
### Accessibility & Responsive Design
|
||
|
||
- FR47: Users can access all AI features using keyboard navigation without mouse input
|
||
- FR48: Users can receive screen reader announcements for AI-generated content and suggestions
|
||
- FR49: Users can dismiss AI notifications and suggestions using keyboard shortcuts
|
||
- FR50: Users can view and interact with AI features on mobile devices (320px-639px)
|
||
- FR51: Users can view and interact with AI features on tablet devices (640px-1023px)
|
||
- FR52: Users can view and interact with AI features on desktop devices (1024px+)
|
||
- FR53: Users can perceive visual focus indicators on all interactive AI elements
|
||
- FR54: Users can access AI features with touch targets meeting minimum size requirements (44x44px on mobile)
|
||
|
||
## Non-Functional Requirements
|
||
|
||
### Performance
|
||
|
||
**AI Feature Response Times:**
|
||
|
||
- NFR-PERF-001: Title suggestions generate within 2 seconds of trigger detection
|
||
- NFR-PERF-002: Semantic search results return within 300 milliseconds for databases up to 1,000 notes
|
||
- NFR-PERF-003: Memory Echo background analysis completes with less than 100 milliseconds of UI thread blocking
|
||
- NFR-PERF-004: Paragraph reformulation completes within 5 seconds for content up to 500 words
|
||
|
||
**System Performance:**
|
||
|
||
- NFR-PERF-005: Initial page load achieves First Contentful Paint (FCP) in under 3 seconds on 4G connections
|
||
- NFR-PERF-006: Application reaches Time to Interactive (TTI) within 5 seconds on modern browsers
|
||
- NFR-PERF-007: JavaScript bundle remains under 200KB gzipped (excluding AI provider libraries)
|
||
- NFR-PERF-008: AI features load on-demand without affecting initial application bundle size
|
||
|
||
**Performance Under Load:**
|
||
|
||
- NFR-PERF-009: System supports 50 concurrent users with less than 10% performance degradation
|
||
- NFR-PERF-010: Search response time remains under 500ms with 10,000 notes in database
|
||
|
||
---
|
||
|
||
### Security
|
||
|
||
**Data Protection:**
|
||
|
||
- NFR-SEC-001: All user notes are encrypted at rest in the database
|
||
- NFR-SEC-002: All data transmitted between client and server uses HTTPS/TLS 1.3+
|
||
- NFR-SEC-003: User passwords are hashed using bcrypt with minimum 12 salt rounds
|
||
- NFR-SEC-004: AI provider API keys are encrypted when stored in database
|
||
|
||
**Privacy-First Architecture:**
|
||
|
||
- NFR-SEC-005: Local AI processing (Ollama) sends zero data to external services
|
||
- NFR-SEC-006: Users can verify local processing mode through network inspection tools
|
||
- NFR-SEC-007: User content language detection and processing occurs server-side without exposing raw content to external AI providers when using local mode
|
||
- NFR-SEC-008: System does not log or store user note content beyond database persistence
|
||
|
||
**Authentication & Authorization:**
|
||
|
||
- NFR-SEC-009: User sessions expire after 30 days of inactivity
|
||
- NFR-SEC-010: Password reset tokens expire within 1 hour of generation
|
||
- NFR-SEC-011: Administrator access requires explicit role assignment (default role is USER)
|
||
- NFR-SEC-012: Users can only access their own notes, labels, and AI settings unless explicitly granted admin privileges
|
||
|
||
**API Security:**
|
||
|
||
- NFR-SEC-013: All API routes validate user authentication before processing requests
|
||
- NFR-SEC-014: Rate limiting prevents abuse of AI endpoints (maximum 100 requests per minute per user)
|
||
|
||
---
|
||
|
||
### Accessibility
|
||
|
||
**WCAG 2.1 Level AA Compliance:**
|
||
|
||
- NFR-A11Y-001: All AI features are fully operable using keyboard-only navigation
|
||
- NFR-A11Y-002: Screen readers announce AI-generated content and suggestions with descriptive text
|
||
- NFR-A11Y-003: All interactive AI elements have visible focus indicators with minimum 3:1 contrast ratio
|
||
- NFR-A11Y-004: Color alone is not used to convey information; visual indicators include text labels or icons
|
||
|
||
**Touch Targets (Mobile):**
|
||
|
||
- NFR-A11Y-005: All interactive AI elements on mobile devices meet minimum tap target size of 44×44 pixels
|
||
- NFR-A11Y-006: Touch targets have minimum 8 pixels spacing between adjacent interactive elements
|
||
|
||
**Responsive Design:**
|
||
|
||
- NFR-A11Y-007: AI features function correctly on mobile devices (320px-639px viewport width)
|
||
- NFR-A11Y-008: AI features function correctly on tablet devices (640px-1023px viewport width)
|
||
- NFR-A11Y-009: AI features function correctly on desktop devices (1024px+ viewport width)
|
||
|
||
**Notification Accessibility:**
|
||
|
||
- NFR-A11Y-010: AI toast notifications use `role="status"` (not `role="alert"`) to avoid interrupting screen reader navigation
|
||
- NFR-A11Y-011: Notifications can be dismissed using keyboard ESC key
|
||
|
||
---
|
||
|
||
### Reliability
|
||
|
||
**System Availability:**
|
||
|
||
- NFR-REL-001: Application achieves 99% uptime during business hours (9 AM - 6 PM user local time)
|
||
- NFR-REL-002: Graceful degradation occurs if AI providers are unavailable (core note-taking features remain functional)
|
||
|
||
**Error Handling:**
|
||
|
||
- NFR-REL-003: AI feature failures display user-friendly error messages without technical jargon
|
||
- NFR-REL-004: Failed AI requests automatically retry with exponential backoff (maximum 3 attempts)
|
||
- NFR-REL-005: System provides fallback to alternative AI provider if primary provider fails
|
||
|
||
**Data Integrity:**
|
||
|
||
- NFR-REL-006: All user actions maintain ACID properties (Atomic, Consistent, Isolated, Durable)
|
||
- NFR-REL-007: Vector embeddings are cached after generation to prevent redundant processing
|
||
|
||
**Background Processing:**
|
||
|
||
- NFR-REL-008: Memory Echo analysis runs asynchronously without blocking user interactions
|
||
- NFR-REL-009: Background jobs log failures for administrator review without exposing errors to end users
|
||
|
||
---
|
||
|
||
### Integration
|
||
|
||
**AI Provider Integration:**
|
||
|
||
- NFR-INT-001: System supports OpenAI API for cloud AI processing
|
||
- NFR-INT-002: System supports Ollama API for local AI processing
|
||
- NFR-INT-003: Factory pattern allows adding new AI providers without modifying existing code
|
||
|
||
**Multi-Provider Architecture:**
|
||
|
||
- NFR-INT-004: Users can switch between AI providers without losing data or functionality
|
||
- NFR-INT-005: System automatically detects available AI providers during startup
|
||
- NFR-INT-006: Provider connection status indicators display current operational state
|
||
|
||
**API Compatibility:**
|
||
|
||
- NFR-INT-007: System maintains compatibility with OpenAI API versions through abstraction layer
|
||
- NFR-INT-008: Ollama integration supports all models compatible with `/api/tags` and `/api/embeddings` endpoints
|
||
|
||
**Extensibility:**
|
||
|
||
- NFR-INT-009: New AI models can be added through configuration without code changes for supported providers
|
||
- NFR-INT-010: Custom OpenAI-compatible endpoints can be configured through settings
|
||
|
||
---
|
||
|
||
### Scalability (MVP Scope)
|
||
|
||
**Phase 1 Capacity:**
|
||
|
||
- NFR-SCA-001: System supports 50-200 concurrent users with acceptable performance
|
||
- NFR-SCA-002: Database performs acceptably with up to 10,000 notes per user
|
||
- NFR-SCA-003: Embedding generation throughput supports 100 notes per minute per user
|
||
|
||
**Resource Efficiency:**
|
||
|
||
- NFR-SCA-004: SQLite database size remains under 2GB for 100,000 notes with embeddings
|
||
- NFR-SCA-005: Memory consumption per user session remains under 100MB
|
||
|
||
**Post-MVP Consideration:**
|
||
|
||
- NFR-SCA-006: Architecture supports migration to PostgreSQL for Phase 2 if needed for larger scale
|
||
|
||
|