# AIUI Progress ## Current Status **Active Milestone**: M8 — Chat UX Polish (PLAN2.md) **Overall**: M0–M7 complete. 116 tasks planned across M8–M20 in PLAN2.md ## Roadmap ### M0: Foundation ✅ - [x] Chat interface with streaming (Claude/OpenRouter/Mock) - [x] 11 content type renderers (film, song, podcast, book, TV, image, place, article, magazine, nostr, code) - [x] Responsive layout (mobile three-column + desktop overlays) - [x] Glass morphism design system (Tailwind CSS) - [x] Claude proxy + web search (SearXNG/DDG) - [x] PWA support (auto-update, installable) - [x] Music player (Plyr-based PlayerBar) - [x] Dev chat persistence (Vite middleware) - [x] ESLint flat config (packages/app + packages/core) - [x] CI baseline (pnpm test, lint, typecheck passing) - [x] Progress tracking automation ### M1: Stability & Polish ✅ - [x] ErrorBoundary.vue component created - [x] Error boundaries wrapping all major sections - [x] Unit tests — contentExtraction composable (10 extraction functions, 49 tests) - [x] IndexedDB persistent storage (conversations survive refresh) - [x] Unit tests — useAI composable (16 tests, mocked fetch/SSE) - [x] E2E test expansion (8 new tests: streaming, content cards, mobile, etc.) ### M2: Content Experience ✅ - [x] Markdown rendering in chat (markdown-it, XSS safe) - [x] Music source resolution + queue management (next/prev, queue panel) - [x] Virtual scrolling for chat (@tanstack/vue-virtual) - [x] Nostr feed integration (relay WebSocket, kind:1 notes) ### M3: Plugin System ✅ - [x] Activate plugin registry at runtime (claude-provider adapter) - [x] Renderer plugin registration (film/song as plugins) ### M4: Social & Discovery ✅ - [x] Social embeds (Nostr notes inline via nostr: URI) - [x] Federated search across content types (/search command) - [x] Bookmarks/favorites (Pinia + IndexedDB, heart toggle) ### M5: Security & Privacy ✅ - [x] E2E encryption (Web Crypto API, AES-256-GCM, PBKDF2) - [x] Encrypted storage layer (PassphraseDialog, all stores encrypted) - [x] API key vault (encrypted at rest, masked UI) ### M6: Payments & Identity ✅ - [x] Lightning wallet deep-links (LNURL-pay, BIP21, QR code) - [x] Cashu token support (parse + display inline, never a wallet) - [x] Nostr identity NIP-07 (browser extension login, event signing) ### M7: Platform ✅ - [x] MCP server integration (content surfaces as MCP tools) - [x] Multi-provider AI normalization (Claude/OpenRouter/Ollama adapters) - [x] Tauri desktop build (transparent window, system tray, global shortcut) - [x] Offline mode (cache strategies, offline banner, cached content browsing) ## Session Log ### 2026-03-03 — overnight/2026-03-03 **Completed M3–M7 (15 tasks)**: - M3.1: Plugin registry + Claude provider adapter - M3.2: Film/song renderer plugins with lazy loading - M4.1: Nostr social embeds (bech32 NIP-19 decoder, NostrEmbed.vue) - M4.2: Federated search (/search command, SearchResults overlay) - M4.3: Bookmarks/favorites (Pinia + IDB, FavoriteButton, FavoritesGrid) - M5.1: E2E encryption (AES-256-GCM, PBKDF2 100K iterations) - M5.2: Encrypted storage layer (PassphraseDialog, transparent encrypt/decrypt) - M5.3: API key vault (encrypted IDB, ApiKeyManager.vue, vault integration in useAI) - M6.1: Lightning wallet deep-links (BOLT11 parser, PaymentButton, LightningInvoice) - M6.2: Cashu token support (cashu.ts parser, CashuToken.vue inline in chat) - M6.3: Nostr identity NIP-07 (useNostrIdentity.ts, NostrLogin.vue, bech32 encode) - M7.1: MCP server integration (tool definitions + handlers for library search) - M7.2: Multi-provider AI normalization (adapter pattern: Claude/OpenRouter/Ollama) - M7.3: Tauri desktop build scaffold (frameless window, tray, global shortcut) - M7.4: Offline mode (useOffline.ts, enhanced PWA image/API caching)