# Session 2026-03-04 ## Completed This Session ### 1. Chat UX Changes - **History button**: Changed from title-click dropdown to dedicated clock icon in ChatHeader - **Settings modal**: Created `SettingsModal.vue` — Memory + Advanced Settings behind gear icon, glass-card with backdrop blur - **PromptIndex fix**: Reverted to original behavior (current conversation only), fixed broken v-if/v-else chain where StreamingDots broke the template chain - **Chat action buttons**: Wrapped hover icons in proper glass container (`bg-black/60 backdrop-blur-md border border-white/10`) with divider between actions and thumbs ### 2. iOS HIG Integration - Created `.cursor/rules/15-mobile-ux.mdc` with comprehensive iOS HIG values - Updated CLAUDE.md Mobile UX section ### 3. Web Search Fix - All SearXNG instances were returning 429, DuckDuckGo rate-limiting - Added Brave Search API as primary backend (`BRAVE_SEARCH_API_KEY` env var) - Expanded SearXNG pool to 8 instances with rotation - Added HTML response guard for captcha pages ### 4. Content Detection Overhaul (MAJOR) - **Expanded all classifiers** in `contentFiltering.ts`: isNewsQuery, isMusicQuery, isBookQuery, isTVQuery, isPlaceQuery, isWebsitesQuery + response variants - **Added Nostr detection**: `isNostrQuery()`, `isNostrLikeResponse()` - **Added App detection**: `isAppQuery()`, `isAppLikeResponse()` - **Updated `filterTabsByContext()`**: new `hasNostr` + `hasApps` params, nostr/app query priority - **Updated `preferredFirstTab()`**: nostr + app checks ### 5. Bare Domain Extraction - `extractBareDomainLinks(text)` in contentExtraction.ts - Detects plain domains like "damus.io" not inside markdown/bold/URL patterns - Known TLDs whitelist, file extension blacklist ### 6. Apps Tab (NEW FEATURE) - **Database**: `packages/app/src/data/apps.ts` — AppEntry interface, ~30 curated apps - Nostr clients: Damus, Primal, Snort, Amethyst, Coracle, Iris, noStrudel - Lightning wallets: Phoenix, Breez, Zeus, Alby, Mutiny, WoS - Bitcoin wallets: Sparrow, BlueWallet, Nunchuk, Coldcard - Privacy: SimpleX Chat, Signal, Mullvad VPN - Node software: Start9, Umbrel, RaspiBlitz, myNode - Dev tools: NDK, nostr-tools, Nak - **Extraction**: `extractApps(text, userQuery)` — keyword matching against DB, surfaces with 1+ match for app/nostr/known-app queries, 2+ for general - **UI**: `AppsGrid.vue` (list with search/category filter), `AppDetail.vue` (gradient header, how-to steps, related apps, external link) - **Wired in**: useContentPanel.ts (panelApps ref, selectedApp, open/close), ContentPanel.vue (registered), PromptIndex badges ### 7. Slash Command Palette - `/code`, `/nostr`, `/design`, `/search` appear as commands in PromptPalette - Commands section above Templates section with `/slash` prefix styling - Auto-send on select (except `/search` which sets text for query input) - 8px side margins (`left-2 right-2`), no max-height scroll limit - `ChatInput.vue`: simplified `isPaletteMode` — no longer excludes command names ### 8. App Detection Fix - Queries mentioning known app names (e.g. "start9") now match via `queryMatchesApp` check - Previously required explicit app/nostr query patterns like "what app" or "best wallet" ## Known Issues / TODO for Next Session - User reported "start9" search shows Brief but Apps tab was empty — FIXED in last commit - The `/design` command was added to palette and ChatWindow handleSend - Consider adding more apps to the curated database over time - The plan file is at `.claude/plans/content-detection-overhaul.md` (all steps complete) ## Git State - Branch: `overnight/2026-03-03` - Latest commit: `f346992` — feat(chat): slash command palette, action button containers, app detection fix - Previous commit: `84ccdc7` — feat(app): content detection overhaul, apps tab, chat UX, web search - All pushed to origin