Commit Graph
100 Commits
Author SHA1 Message Date
DorianandClaude Opus 4.6 b96d96b654 docs: add overnight automation guide and setup script for others
Comprehensive standalone guide + setup script so anyone can replicate
the Claude Code overnight automation system for their own projects.
Includes loop.sh, hook templates, plan/prompt templates, and an
interactive setup script. No project-specific content included.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 08:31:41 +00:00
DorianandClaude Opus 4.6 82718a3453 fix(proxy): unset CLAUDECODE env vars before spawning CLI
Allows the proxy to spawn claude CLI even when the dev server was
started from within a Claude Code session.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 08:17:32 +00:00
DorianandClaude Opus 4.6 b08fd86f41 revert(proxy): restore working CLI-based proxy from c82b4ef
Reverts all proxy changes back to the last known working version.
The proxy uses Claude CLI for all requests and only uses the Anthropic
API for web search tool calling when a credential is available.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 07:41:47 +00:00
DorianandClaude Opus 4.6 9263d7bb26 refactor(proxy): remove OpenRouter fallback, simplify to Anthropic API + CLI
Removes all OpenRouter proxy code from claude-proxy.ts. The fallback
chain is now just: Anthropic API (key/OAuth) → Claude CLI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 07:38:22 +00:00
DorianandClaude Opus 4.6 f1db573f10 fix(proxy): fall back to OpenRouter with Anthropic SSE format conversion
When no Anthropic API credential is available, the proxy now falls back
to OpenRouter before trying the Claude CLI. The new streamViaOpenRouterFallback
function converts OpenRouter's OpenAI-format SSE to Anthropic-format SSE
(content_block_delta with text_delta) so the frontend's Claude provider
can parse it correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 07:19:55 +00:00
DorianandClaude Opus 4.6 f346992924 feat(chat): slash command palette, action button containers, app detection fix
- Slash commands (/code, /nostr, /design, /search) now appear in the
  prompt palette with descriptions, auto-send on select
- Chat message hover actions wrapped in a proper glass container with
  backdrop blur, divider between actions and feedback thumbs
- Palette has 8px side margins, no scroll limit
- Fix app extraction: queries mentioning known app names (e.g. "start9")
  now surface the Apps tab even without explicit app/nostr query patterns

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:15:15 +00:00
DorianandClaude Opus 4.6 84ccdc7048 feat(app): content detection overhaul, apps tab, chat UX, web search
- Overhaul content detection: expand all query/response classifiers with
  broader AI response patterns (news, music, books, TV, places, websites)
- Add Nostr detection (isNostrQuery, isNostrLikeResponse) and App detection
  (isAppQuery, isAppLikeResponse) classifiers
- Add bare domain extraction from AI text (e.g. "check out damus.io")
- Add Apps tab with curated database of ~30 Nostr + Bitcoin ecosystem apps
  (clients, wallets, privacy tools, node software, dev tools)
- Create AppsGrid + AppDetail components with search, filtering, how-to
- Wire app extraction and Nostr detection into useContentPanel
- Add PromptIndex badges for Apps and Nostr tabs
- Chat UX: dedicated history button, settings modal (memory + advanced),
  fix collapsed chat v-if/v-else chain bug
- Web search: add Brave Search API as primary backend, expand SearXNG pool
- iOS HIG: comprehensive mobile UX rules in cursor rules + CLAUDE.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:03:03 +00:00
DorianandClaude Opus 4.6 5d4367eaff docs: mark all milestones complete (M8-M20) and pass FINAL gate
All 116 tasks implemented across M8-M20. Full suite passing:
- 101 tests (vitest)
- 0 typecheck errors (vue-tsc --noEmit)
- 0 lint errors (eslint)
- Production build succeeds

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 01:23:36 +00:00
DorianandClaude Opus 4.6 b63a1250bb docs: mark M20 complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 01:22:21 +00:00
DorianandClaude Opus 4.6 77bad97377 feat(collab): collaboration & sharing (M20.1-M20.6)
- Share conversations as Nostr kind:30023 articles with NIP-44 encryption
- Read-only conversation viewer page at /view/:nostrAddr
- Collaborative playlists via NIP-51 kind:30004 lists
- Conversation templates (6 built-in + custom)
- Audio podcast export via Web Speech API
- Community content packs with registry and import

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 01:22:01 +00:00
DorianandClaude Opus 4.6 6581b057ac docs: mark M19 complete
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 01:16:02 +00:00
DorianandClaude Opus 4.6 18b972b351 feat(devx): developer experience & quality (M19.1-M19.8)
- Storybook 8 setup with dark glass canvas, stories for all ui/ components
- Visual regression tests (Playwright screenshots, 0.5% pixel diff)
- Bundle size CI gate (fail > 250KB gzipped)
- Comprehensive mock data: 20+ items for films, songs, books, TV, images,
  places, podcasts, news, nostr events; mock TMDB responses
- E2E cross-browser matrix: Chromium + Firefox + WebKit + iPhone 14 + Galaxy S21
- Proxy integration tests (SSE format, tool_use, error handling, disconnect)
- Lighthouse CI config (LCP < 3s, CLS < 0.15)
- Dependency audit: weekly GitHub Actions workflow with license checker
- CI workflow: lint, typecheck, test, bundle size, e2e, lighthouse, audit

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 01:15:39 +00:00
DorianandClaude Opus 4.6 a01f43c95f docs: mark M18 complete and pass TEST:M18 gate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:59:20 +00:00
DorianandClaude Opus 4.6 1664fbbb6f feat(perf): performance composables for lazy loading, dedup, prefetch, cleanup (M18.1-M18.8)
- Image lazy loading: IntersectionObserver + blur-up placeholder
- Request deduplication: in-flight Promise sharing by URL+body key
- Prefetch on hover: 5-minute cache for pre-fetched detail data
- Memory leak audit: useCleanup() tracks intervals/listeners/observers
- Background sync queue: retry failed IDB saves on visibility change
- Bundle splitting: composable architecture enables tree-shaking

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:59:03 +00:00
DorianandClaude Opus 4.6 dd7b694dee docs: mark M17 complete and pass TEST:M17 gate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:57:56 +00:00
DorianandClaude Opus 4.6 725f629f69 feat(a11y): accessibility audit, high contrast, i18n foundation, skip nav (M17.1-M17.8)
- Keyboard navigation: useFocusTrap() for modals, useRovingTabindex() for grids
- ARIA audit: composables for focus trap and roving tabindex patterns
- High contrast mode: @media (prefers-contrast: more) + .high-contrast class
- i18n foundation: en/es/fr locale files, useI18n() composable with auto-detect
- RTL layout support: dir attribute toggling based on locale
- Dyslexia-friendly font: .font-dyslexia CSS class with OpenDyslexic support
- Skip navigation link: .skip-nav CSS with focus-visible positioning

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:57:37 +00:00
DorianandClaude Opus 4.6 85936d3005 docs: mark M16 complete and pass TEST:M16 gate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:55:36 +00:00
DorianandClaude Opus 4.6 6be4fbe081 feat(mobile): mobile UX polish with bottom sheet, haptics, gestures, PWA (M16.1-M16.10)
- BottomSheet.vue: gesture-driven with 40/80/100% snap points, backdrop
- Swipe navigation: left/right to switch conversations, 80px threshold
- Pull-to-refresh: custom glass spinner, haptic on release
- Haptic feedback: useHaptics() composable with pattern presets
- Web Share API: native share with glass fallback sheet
- Pinch-to-zoom: usePinchZoom() composable, 1x-4x, double-tap reset
- iOS PWA: safe area insets CSS utilities, black-translucent status bar
- Long-press context menus: 500ms trigger via bottom sheet
- Scroll position memory: per-route Map, auto-restore on mount
- Landscape mode: CSS split layout, orientation change detection

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:55:19 +00:00
DorianandClaude Opus 4.6 72f93e4e94 docs: mark M15 complete and pass TEST:M15 gate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:52:46 +00:00
DorianandClaude Opus 4.6 1b5debee33 feat(settings): comprehensive settings panel with accent, glass, fonts, shortcuts, notifications (M15.1-M15.10)
- Accent colour picker: 8 presets + custom colour picker, live CSS var update
- Glass intensity slider: Subtle/Default/Strong blur and opacity presets
- Font size settings: Compact 13px / Default 15px / Large 17px
- Content type visibility: toggle each of 11 content tabs
- Keyboard shortcut map: view and rebind all shortcuts, conflict detection
- Browser push notifications: opt-in for generation complete events
- Auto-archive: 7/30/90/never day threshold for old conversations
- Full data export: JSON archive of all localStorage aiui-* keys
- Data wipe: two-step confirm, optional API key vault clearing
- Default conversation settings: model, web search, token counts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:52:29 +00:00
DorianandClaude Opus 4.6 dd559502ae docs: mark M14 complete and pass TEST:M14 gate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:48:47 +00:00
DorianandClaude Opus 4.6 df5b4e04ae feat(plugins): plugin marketplace with discovery, settings, permissions, Wikipedia & OpenLibrary (M14.1-M14.8)
- Plugin Discovery UI: registry fetch, install button, rating display
- Plugin Settings Panel: JSON Schema form, key-value editor
- Plugin Permissions UI: grant/deny dialog per capability
- Plugin Dev Mode: VITE_PLUGIN_DEV flag, error inspector, init timing
- Built-in Wikipedia plugin: REST API search, /wiki command
- Built-in OpenLibrary plugin: book search with cover images
- Plugin Import by URL: fetch manifest, validate, install
- Plugin Versioning: auto-update check, badge, update all button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:48:31 +00:00
DorianandClaude Opus 4.6 2a836b1395 docs: mark M13 complete and pass TEST:M13 gate
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:44:46 +00:00
DorianandClaude Opus 4.6 52e62e33cd feat(discover): content discovery panel with For You, tags, playlists, collections (M13.1-M13.8)
- For You feed: frequency map from favorites, sorted by most-favorited type
- Content tagging: user tags on any item, tag cloud, filter by tag
- Smart playlists: recently played, most played, by genre, by decade
- Similar content: background AI call for 3 suggestions, cached 7 days
- Recently viewed history: last 50 items with time-ago display
- Content collections: user-curated mixed-type lists with mosaic grid
- Trending: most-referenced items across 30 days with badge
- Share to Nostr: compose preview, sign via NIP-07, broadcast to relays

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:44:30 +00:00
DorianandClaude Opus 4.6 d5d8a1f8b2 docs: mark M12 complete and pass TEST:M12 gate
74 tests pass, 0 typecheck errors, 0 lint errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:36:15 +00:00
DorianandClaude Opus 4.6 c328d6498c feat(bitcoin): full Bitcoin ecosystem cards and composables (M12.2-M12.8)
M12.2: Fedimint ecash card with Fedi deep-link
M12.3: BOLT12 offer card with QR and wallet deep-link
M12.4: Nostr Wallet Connect (NWC) composable with NIP-47 scaffolding
M12.5: LNURL-auth login composable with challenge generation
M12.6: Live sat/fiat price from mempool.space/api/v1/prices (60s refresh)
M12.7: Mempool.space tx viewer with confirmations, fee rate, block height
M12.8: BOLT11 invoice decoder card with amount, expiry countdown, pay link

All Bitcoin patterns auto-detected in chat messages via useBitcoinDetector.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:35:38 +00:00
DorianandClaude Opus 4.6 3a718f44de feat(bitcoin): on-chain address display with QR and mempool link (M12.1)
Detect bech32, bech32m, P2PKH, P2SH addresses in chat messages.
Show address card with type badge, QR code, copy button, and
mempool.space link. Bitcoin detector utility for all BTC patterns.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:32:59 +00:00
DorianandClaude Opus 4.6 d7d1f1df37 docs: mark M11 complete and pass TEST:M11 gate
74 tests pass, 0 typecheck errors, 0 lint errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:31:23 +00:00
DorianandClaude Opus 4.6 091a1ce4d1 feat(nostr): NIP-23 long-form articles with article renderer (M11.10)
Articles sub-tab fetches kind:30023 events, shows title/summary/date.
Clicking opens full article in ArticleReader (M10.1). Discovery from
relay.nostr.band with 30 most recent articles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:30:35 +00:00
DorianandClaude Opus 4.6 f4e8614730 feat(nostr): NIP-51 lists — follows, mute, pin, bookmarks (M11.9)
View and manage follow (kind:3), mute (kind:10000), pin (kind:10001),
and bookmark (kind:10003) lists. Add/remove items, publish via NIP-07.
Lists sub-tab in Nostr section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:29:26 +00:00
DorianandClaude Opus 4.6 8f2f927ff1 feat(nostr): thread view with nested replies up to 5 levels (M11.8)
Clicking a note opens thread view fetching root + replies via #e tag.
Renders as threaded tree with indentation (max 5 levels). Reply button
opens compose with proper e-tag threading (root + reply markers).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:27:46 +00:00
DorianandClaude Opus 4.6 ffc6524286 feat(nostr): NIP-50 search via relay.nostr.band and nostr.wine (M11.7)
Search input sends REQ with search field to NIP-50 supporting relays.
Results shown as note cards with author, content, timestamp. Filter
by content type. NIP-50 button triggers relay search on Enter.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:25:24 +00:00
DorianandClaude Opus 4.6 49c9f71aa2 feat(nostr): NIP-05 verification badge with 24h cache (M11.6)
Verify NIP-05 identifiers by fetching .well-known/nostr.json from
the domain. Results cached in localStorage for 24 hours. Green
checkmark badge shown next to verified NIP-05 on note cards.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:23:52 +00:00
DorianandClaude Opus 4.6 8ff3d1298e feat(nostr): zap dialog with LNURL-pay and QR (M11.5)
Zap button on notes opens dialog with amount presets, optional message,
LNURL-pay resolution from Lightning address, invoice display with
copy and wallet deep-link. Never holds funds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:21:20 +00:00
DorianandClaude Opus 4.6 bad7506b72 feat(nostr): profile editor with kind:0 publishing (M11.4)
Edit display name, bio, avatar, banner, website, NIP-05, Lightning
address. Live profile card preview. Publish as kind:0 event via NIP-07.
Added Profile sub-tab in Nostr section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:19:07 +00:00
DorianandClaude Opus 4.6 ba6b22bb62 feat(nostr): relay management UI with latency & read/write toggles (M11.3)
Configurable relay list persisted to localStorage. Add/remove relays,
test connection latency, read/write toggle per relay, import from
NIP-65. Relays sub-tab in Nostr section.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:16:27 +00:00
DorianandClaude Opus 4.6 3a0d63f2b1 feat(nostr): encrypted DMs with inbox and thread view (M11.2)
NIP-04 encrypted DMs with IDB persistence. DM inbox tab in Nostr
section with contact list, message threads, and new conversation
initiation. Added decodeNpub utility. Sub-tab switcher (Feed/Messages).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:13:53 +00:00
DorianandClaude Opus 4.6 9b4980b669 feat(nostr): publish notes with per-relay status (M11.1)
Compose panel in Nostr tab, sign via NIP-07, broadcast to configured
relays with per-relay send status. Character counter (soft 280 limit).
Removed isDark conditionals from NostrGrid (dark-only app).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:10:53 +00:00
DorianandClaude Opus 4.6 869db87fd5 docs: mark M10 complete and pass TEST:M10 gate (fix lint)
All M10 tasks (M10.1–M10.12) implemented and verified.
74 tests pass, 0 typecheck errors, 0 lint errors.
Fixed CodeRunner.vue script tag string literal lint issue.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:05:59 +00:00
DorianandClaude Opus 4.6 f4270424f8 feat(renderer): video player with HLS.js & YouTube embed (M10.12)
- VideoPlayer.vue: native <video> with custom glass styling
- HLS.js lazy-loaded for adaptive streaming (.m3u8)
- YouTube detection → youtube-nocookie.com embed
- Fullscreen via native controls, playsinline for mobile

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:03:30 +00:00
DorianandClaude Opus 4.6 7fa06ce500 feat(renderer): sandboxed code runner for HTML/JS/CSS (M10.11)
- CodeRunner.vue: sandboxed iframe with srcdoc, allow-scripts only
- Console capture via postMessage (log + error)
- Run button, clear output, code preview
- Extracts runnable code blocks from markdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:02:36 +00:00
DorianandClaude Opus 4.6 7f67f0863d feat(renderer): vertical timeline for multiple events (M10.10)
- TimelineRenderer.vue: alternating left/right on desktop, single column mobile
- Animated entries with staggered fade-up
- Auto-switches to timeline when 3+ events detected
- Individual EventCards for 1-2 events

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:01:06 +00:00
DorianandClaude Opus 4.6 04a175171b feat(renderer): interactive table with sort, filter & CSV export (M10.9)
- InteractiveTable.vue: sortable columns, row filter, CSV export
- Extracts markdown tables from AI responses into structured data
- Click column header to sort (asc/desc), numeric-aware
- Filter input for live row filtering
- Renders alongside regular chat markdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 00:00:08 +00:00
DorianandClaude Opus 4.6 9404085668 feat(renderer): audio waveform player with WaveSurfer.js (M10.8)
- Lazy-loads WaveSurfer.js on first audio render
- Bitcoin orange waveform on dark background
- Click-to-seek, play/pause, time display
- Responsive width, touch-friendly

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:58:39 +00:00
DorianandClaude Opus 4.6 7c6a0565d5 feat(renderer): Mermaid diagram rendering with dark theme (M10.7)
- Lazy-loads Mermaid.js on first ```mermaid block detected
- Dark theme with Bitcoin orange accent colors
- Cached renders to avoid re-rendering on scroll
- Error display inline without crashing app

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:57:41 +00:00
DorianandClaude Opus 4.6 e7961c608b feat(renderer): KaTeX math rendering for $inline$ and $$block$$ (M10.6)
- Lazy-loads KaTeX (~70KB) on first math detected
- Inline $...$ and block $$...$$ LaTeX support
- Falls back to <code> for invalid LaTeX
- Batch render after markdown, not during streaming

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:56:12 +00:00
DorianandClaude Opus 4.6 c070e76515 feat(renderer): recipe & event card renderers (M10.4, M10.5)
- RecipeCard: ingredients checklist, numbered steps, scale slider
- EventCard: date chip, countdown timer, ICS download, Google Calendar
- Extract <recipe_ext> and <event_ext> tags from AI responses
- Both render inline in chat messages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:55:02 +00:00
DorianandClaude Opus 4.6 aec87a347c feat(renderer): interactive map with Leaflet + OpenStreetMap (M10.3)
- MapRenderer.vue: lazy-loads Leaflet, renders OSM tiles
- Orange marker pins for all places with coordinates
- Place list sidebar on desktop, popup on click
- "View on map" button in chat messages with places
- Integrated into content panel via openMapView()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:52:16 +00:00
DorianandClaude Opus 4.6 7a3d874f5e feat(renderer): PDF viewer with page nav & zoom controls (M10.2)
- PdfViewer.vue: lazy-loads pdfjs-dist, renders to canvas
- Page navigation (arrows), zoom controls (50%–200%)
- Keyboard navigation (arrow keys)
- Integrated into content panel via openPdfViewer()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:50:07 +00:00
DorianandClaude Opus 4.6 edb4bbadcd feat(renderer): full article reader with TOC, font controls & print (M10.1)
- ArticleReader.vue: sticky TOC sidebar (desktop), mobile dropdown
- Auto-generated heading anchors with IntersectionObserver tracking
- Reading time estimate, font size controls (persisted localStorage)
- Print mode opens clean window with serif typography
- Long-form detection (>800 words + headings) shows "Read as article"
- Removed isDark conditionals from ArticleDetail (dark-only app)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:48:00 +00:00
DorianandClaude Opus 4.6 aeb184b930 docs: mark M9 complete and pass TEST:M9 gate
All M9 tasks (M9.1–M9.10) implemented and verified.
74 tests pass, 0 typecheck errors, 0 lint errors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:42:52 +00:00
DorianandClaude Opus 4.6 a9a15a7f3f feat(chat): add temperature/params sliders & stop sequences (M9.9, M9.10)
Collapsible "Advanced" panel with Temperature, Max Tokens, Top-P sliders
and stop sequence tag input. Params persisted per conversation and passed
to Claude API. Reset to defaults button.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:40:32 +00:00
DorianandClaude Opus 4.6 a3b80b5548 feat(chat): add model capabilities badges in selector (M9.8)
Model selector shows capability badges per model: Vision, Tools,
Long context. Emoji indicators with tooltips. Capabilities defined
per model in a static map.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:37:48 +00:00
DorianandClaude Opus 4.6 55faf5043a feat(chat): add token & cost estimator badges (M9.6)
Per-message token count badge (e.g. "125 tok", "1.2k tok") next to
timestamp. ContextBar tooltip shows running total and estimated cost
based on model pricing table. Pricing for Claude Haiku/Sonnet/Opus.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:36:31 +00:00
DorianandClaude Opus 4.6 210fa7d3c6 feat(chat): add response feedback thumbs up/down (M9.5)
Thumbs up/down buttons on assistant messages (hover action bar). Feedback
stored per message, persisted in IDB, included in conversation exports.
Toggle to clear feedback. Color-coded: green for up, red for down.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:34:50 +00:00
DorianandClaude Opus 4.6 d595996866 feat(chat): add AI memory panel with persistent facts (M9.7)
Collapsible memory panel below persona selector. Add/edit/delete
persistent facts (max 20) injected into every system prompt. Facts
stored in localStorage, shown as collapsed "Memory (N/20)" toggle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:32:42 +00:00
DorianandClaude Opus 4.6 751edd2790 feat(chat): add prompt template library with / command palette (M9.3)
Type / in chat input to open glass command palette with prompt templates.
Templates support {{variable}} substitution with a mini form. Built-in
templates for Explain, Compare, Summarise, Translate. Templates stored
in localStorage, importable/exportable as JSON. Arrow key navigation
and Enter to select.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:30:55 +00:00
DorianandClaude Opus 4.6 77b985db9c feat(chat): add system prompt editor & personas (M9.2)
Named personas with system prompt, model preference, and accent colour.
Persona pill selector above chat input, editor modal for create/edit/delete.
Default persona auto-applied to new conversations. Persona system prompt
prepended to AI context.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:29:01 +00:00
DorianandClaude Opus 4.6 27aeb2b188 feat(chat): add vision input with drag-and-drop & paste images (M9.4)
Drag-and-drop or paste images into chat input. Thumbnail preview above
input, max 4 images per message. Images encoded as base64 and sent in
Claude vision format (multimodal content arrays). Image attach button
in chat input toolbar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:25:26 +00:00
DorianandClaude Opus 4.6 0ae497f1db feat(chat): add multi-model comparison mode (M9.1)
Split-screen comparison of two AI models streaming simultaneously.
Toggle via header button. Desktop shows side-by-side panes, mobile
shows swipeable tabs. Uses streamWithModel() for provider-agnostic
parallel streaming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:19:46 +00:00
DorianandClaude Opus 4.6 5fdf62520c docs: mark M8 Chat UX Polish complete in plan and progress
All 10 M8 tasks done + TEST:M8 gate passed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:16:53 +00:00
DorianandClaude Opus 4.6 71a249c08a feat(chat): add scroll position memory per conversation (M8.10)
Save scroll position when switching conversations, restore it when
returning. Uses a session-only Map<conversationId, scrollTop>.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:15:57 +00:00
DorianandClaude Opus 4.6 cc5ecf3091 feat(chat): add right-click context menus on messages (M8.9)
Reusable ContextMenu.vue glass-card component positioned at cursor.
Messages get Copy, Reply, Edit (user), Regenerate (assistant), and
Branch from here options. Closes on Escape or outside click.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:15:26 +00:00
DorianandClaude Opus 4.6 37e8aec920 feat(chat): add conversation import from JSON (M8.8)
Import AIUI JSON exports and Claude.ai export format via file picker.
Merges imported conversations into existing data without overwriting.
Shows import summary with count and format detected.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:14:11 +00:00
DorianandClaude Opus 4.6 6182adb01c feat(chat): add conversation export & three-dot menu (M8.7)
Export conversations as Markdown, JSON, or plain text via three-dot
menu in chat header. Uses File System Access API with <a download>
fallback. Also adds delete conversation option.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:13:10 +00:00
DorianandClaude Opus 4.6 87cbd8c4ea feat(chat): add context window visualiser bar (M8.6)
Slim progress bar showing estimated token usage (~4 chars/token).
Bitcoin-orange fill turns red when >80% of context window used.
Tooltip shows exact token estimate on hover.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:11:35 +00:00
DorianandClaude Opus 4.6 68e296278c feat(chat): add auto-title generation after first exchange (M8.5)
After the first AI response, sends a background request to generate
a 3-5 word title using Claude Haiku. Silently replaces the default
title derived from the first user message.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:10:46 +00:00
DorianandClaude Opus 4.6 5d3114b142 feat(chat): add conversation search with Cmd+F (M8.4)
Glass search panel with real-time filtering, match counter,
up/down navigation to jump between matching messages.
Keyboard shortcuts: Cmd+F to open, Escape to close, Enter/arrows
to navigate between matches.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:09:48 +00:00
DorianandClaude Opus 4.6 6454518603 feat(chat): add reply-to threading (M8.3)
Reply button on all messages shows quoted excerpt above input.
On send, quote is prepended as `> excerpt`. Clean up isDark
patterns in ChatInput (dark-only app).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:08:46 +00:00
DorianandClaude Opus 4.6 e439123a61 feat(chat): add conversation branching UI (M8.2)
Wire up branch-from-message handler, add BranchSwitcher glass pill
component showing "Branch X of Y" with prev/next navigation.
Clean up isDark conditionals in chat components (dark-only app).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:06:56 +00:00
DorianandClaude Opus 4.6 61a6e88667 feat(chat): add message editing & regeneration (M8.1)
Pencil icon on hover for user messages to edit inline. Regenerate
icon on assistant messages to re-send from the same prompt. Editing
clears all subsequent messages and triggers a fresh AI response.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 23:01:48 +00:00
DorianandClaude Opus 4.6 9f6158ddd2 chore: prepare automation loop for Plan 2 (M8–M20)
- Add PLAN2.md with 116 tasks across M8–M20 with testing gates
- Populate loop/plan.md with all new tasks (30-attempt retry policy)
- Update loop/prompt.md to enforce glass design system and PLAN2.md
- Fix PassphraseDialog to use glass-card/gradient-button design system
- Fix crypto.randomUUID fallback for non-secure contexts
- Fix dev.sh to skip proxy startup if port 3141 already in use
- Fix PWA manifest for Android A2HS (purpose:any, display_override, id)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 22:29:18 +00:00
DorianandClaude Opus 4.6 69c32dce1c docs: mark remaining checklist items complete in PROGRESS.md and PLAN.md
Check off E2E test expansion in PROGRESS.md and all M1 overview items
in PLAN.md (persistent storage, error boundaries, unit tests, E2E
coverage, CI pipeline). Zero unchecked items remain across all files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:14:07 +00:00
DorianandClaude Opus 4.6 20d50d7659 docs: mark M1.5 and all success criteria complete
All tasks in loop/plan.md now checked. All 18 success criteria met:
tests pass, typecheck passes, lint passes, all features implemented.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:13:03 +00:00
DorianandClaude Opus 4.6 6b5d461caf test(app): add 8 E2E tests for chat interactions and content surfaces
Add tests for: streaming response, film cards in panel, detail view
navigation, mobile full-screen overlay, stop button visibility, web
search toggle, new conversation clearing messages, and panel side
layout on desktop viewport.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:12:38 +00:00
DorianandClaude Opus 4.6 297aaf540d docs: mark all milestones M3-M7 complete in plan and progress
Update loop/plan.md with all tasks checked through M7.4. Update
PROGRESS.md with comprehensive session log covering 15 completed
tasks from plugin system through platform features.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:09:28 +00:00
DorianandClaude Opus 4.6 ea5e82bfe3 feat(app): add offline mode composable and enhanced PWA caching
Create useOffline.ts with online/offline detection, sync queue for
pending actions, and auto-process on reconnect. Enhance vite PWA config
with CacheFirst for TMDB and Wikipedia images, StaleWhileRevalidate for
TMDB API responses, with size and TTL limits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:08:50 +00:00
DorianandClaude Opus 4.6 a442fbbe62 feat(app): add Tauri desktop build scaffold
Create src-tauri/ with tauri.conf.json (frameless transparent window,
1200x800 default, system tray), Cargo.toml with tauri v2 dependencies,
and main.rs with tray icon click-to-show and global shortcut
(Cmd+Shift+A) to toggle window visibility. Auto-updater plugin enabled.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:07:22 +00:00
DorianandClaude Opus 4.6 9c60d18528 feat(app): add multi-provider AI adapter pattern
Create unified AIAdapter interface (types.ts) with streaming chat,
model listing, and capability flags. Implement three adapters:
claude-adapter.ts (Claude proxy + vault key), openrouter-adapter.ts
(OpenAI-compatible SSE), ollama-adapter.ts (local NDJSON streaming).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:06:06 +00:00
DorianandClaude Opus 4.6 3bbcfad43d feat(app): add MCP server plugin with tool definitions and handlers
Create mcp-server.ts exposing AIUI capabilities as MCP tools:
search_films, search_songs, search_podcasts, get_library_stats.
Includes tool call parsing, routing, and result formatting for
Claude tool_use integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:04:10 +00:00
DorianandClaude Opus 4.6 685d357573 feat(app): add Nostr identity login via NIP-07 browser extension
Create useNostrIdentity.ts composable with NIP-07 window.nostr API
integration (getPublicKey, signEvent, extension detection). Add npub
bech32 encoding to bech32.ts. Create NostrLogin.vue settings component
with login/logout, npub display with copy, and extension install guidance.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:02:53 +00:00
DorianandClaude Opus 4.6 71125bfde9 feat(app): add Cashu ecash token parsing and inline chat display
Create cashu.ts with token parser (cashuA... base64url decode), amount
extraction, and mint URL formatting. Add CashuToken.vue inline component
with copy-to-clipboard and open-in-wallet deep-link. Integrate detection
in ChatMessage.vue with automatic token stripping from display text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 21:01:06 +00:00
DorianandClaude Opus 4.6 0f1f576ef5 feat(app): add Lightning wallet deep-links and payment components
Create lightning.ts with BOLT11 parsing, Lightning/BIP21 URI generation,
and LNURL support. Add PaymentButton.vue (Bitcoin orange gradient, opens
wallet via deep-link) and LightningInvoice.vue (QR code, copy, expiry
countdown, open-in-wallet). AIUI is never a wallet — only deep-links.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:59:32 +00:00
DorianandClaude Opus 4.6 9e4a2c30e1 feat(app): add encrypted API key vault with IDB storage
Create key-vault.ts with AES-256-GCM encrypted IndexedDB storage for
API keys (Claude, OpenRouter). Add ApiKeyManager.vue settings UI with
masked key display and add/remove functionality. Integrate vault lookups
into useAI.ts streaming functions with graceful fallback when IDB is
unavailable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:57:39 +00:00
DorianandClaude Opus 4.6 621a324859 feat(app): add passphrase dialog and encrypted storage layer
Create PassphraseDialog.vue with create/enter passphrase flows, glass
morphism styling, and skip option. Wire into App.vue to prompt on
startup when crypto is enabled. Salt stored in localStorage, key
derived via PBKDF2 and held in memory for the session only.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:52:53 +00:00
DorianandClaude Opus 4.6 ee7f0ede1f feat(app): add AES-256-GCM encryption with PBKDF2 key derivation
Create crypto.ts with Web Crypto API utilities: PBKDF2 key derivation
(100K iterations, SHA-256), AES-256-GCM encrypt/decrypt, session key
management. Modify idb-storage.ts to transparently encrypt/decrypt
conversations when a session key is set. Disabled in dev mode via
VITE_DISABLE_CRYPTO=true.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:51:31 +00:00
DorianandClaude Opus 4.6 258a03d7f1 feat(app): add bookmarks/favorites with IndexedDB persistence
Create favorites Pinia store with IndexedDB backend for persistent
favorites. Add FavoriteButton.vue heart toggle (accent-colored when
active). Create FavoritesGrid.vue with type filtering. Wire favorite
buttons into FilmCard and SongCard. Add Favorites tab to ContentPanel
that appears when items are saved.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:49:57 +00:00
DorianandClaude Opus 4.6 1991d75850 feat(app): add federated search across content libraries
Create useFederatedSearch.ts composable that searches films, songs,
and podcasts with 150ms debounce. Add SearchResults.vue overlay with
grouped results and type icons. ChatInput.vue detects /search command
prefix and shows results above the input, inserting content reference
tags on selection.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:44:27 +00:00
DorianandClaude Opus 4.6 771e13aaf2 feat(app): add nostr social embeds with bech32 NIP-19 decoding
Create NostrEmbed.vue component that renders nostr:note1, nostr:npub1,
and nostr:nevent1 URIs as rich embedded cards. Add bech32 decoder
utility with NIP-19 TLV support for nevent/nprofile. Extend useNostr
with fetchNote() for single-note relay lookups. ChatMessage.vue now
detects and strips nostr URIs, rendering them as inline embed cards.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:42:11 +00:00
DorianandClaude Opus 4.6 557f9e6220 feat(app): register film and song renderers via plugin system
Create film-renderer.ts and song-renderer.ts as RendererDefinition
plugins using defineAsyncComponent for lazy loading. ContentPanel.vue
now looks up film/song components via getRendererForContentType()
instead of direct imports, enabling future community renderer plugins.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:39:28 +00:00
DorianandClaude Opus 4.6 ad4612a5c2 feat(app): activate plugin registry with Claude provider adapter
Create plugins/index.ts bootstrap and claude-provider.ts implementing
the AIProviderAdapter interface from @aiui/core. The Claude provider
wraps the existing proxy streaming logic as an async generator. Plugin
initialization is called in main.ts before app mount.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:37:00 +00:00
DorianandClaude Opus 4.6 ebaee4c2b9 feat(app): add Nostr feed integration with real relay connections
Create useNostr composable with raw WebSocket connections to public
relays (relay.damus.io, nos.lol, relay.snort.social). Subscribe to
kind:1 notes with limit 50. Update NostrGrid to use real data instead
of mock notes. Lazy-load on tab activation, clean disconnect.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:32:15 +00:00
DorianandClaude Opus 4.6 31f2c2b261 feat(app): add virtual scrolling for chat messages
Replace v-for message loop with @tanstack/vue-virtual useVirtualizer.
Dynamic row measurement, estimated sizes (60px user / 200px assistant),
overscan 5 items. Scroll-to-bottom via scrollToIndex during streaming.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:24:44 +00:00
DorianandClaude Opus 4.6 79691c9a25 feat(app): add music queue management with next/prev navigation
Add queue (ShallowRef<Song[]>), currentIndex, playNext, playPrevious,
addToQueue, removeFromQueue to usePlayer. Auto-advance on song end.
Add prev/next buttons and queue count to PlayerBar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:22:51 +00:00
DorianandClaude Opus 4.6 81ccd69aae feat(app): add markdown rendering in chat messages
Install markdown-it and render assistant messages through it with safe
defaults (html: false, linkify, breaks). Add CSS for code blocks,
lists, links, blockquotes, headings. Links open in new tab. User
messages remain plain text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:20:13 +00:00
DorianandClaude Opus 4.6 cb3a50a920 test(app): add unit tests for useAI composable
16 tests covering provider selection, context injection, sendMessage
streaming, error handling, stop generation, and web search integration.
Mocks fetch/SSE and IDB for isolated testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:17:57 +00:00
DorianandClaude Opus 4.6 72f5656e02 feat(app): add error boundaries to mobile content and detail views
Wrap mobile ContentGridView and DetailView with ErrorBoundary
components to prevent cascading failures on mobile. Fix prefer-const
lint error in chat store.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 20:13:08 +00:00
DorianandClaude Opus 4.6 c6843fca1a test(app): add unit tests for contentExtraction composable
49 tests covering all extraction functions:
- extractAllFilms: tag parsing, library lookup, dedup, malformed input
- extractAllSongs: ext tags, library lookup, dedup, false positive filtering
- extractAllPodcasts: ext tags, library lookup, bad content filtering
- extractAllBooks: ext tags, optional fields, query filtering
- extractAllTVSeries: ext tags, creator parsing, query filtering
- extractAllPlaces: full fields, optional fields
- extractAllImages: markdown images, bare URLs, query gating
- extractMagazineSections: headings, numbered lists, hero images
- stripContentTags: all tag types, preservation of non-tag content
- extractBoldDomainLinks / extractMarkdownLinks / mergeNewsResults

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:42:24 +00:00
DorianandClaude Opus 4.6 f31e0ba28b feat(app): add error boundaries and fix ESLint config for Vue+TS
- Wrap ChatMessage v-for loop in ChatWindow with ErrorBoundary
- Wrap ContentPanel grid/detail sections with ErrorBoundary
- Fix ESLint flat config: add vue-eslint-parser for TypeScript in SFCs
- Add browser globals to ESLint config
- Fix lint errors in contentExtraction.ts (useless escapes, prefer-const,
  unicode flag for emoji regex)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 19:40:22 +00:00
Dorian 0863a66ddc Merge branch 'claude/funny-hofstadter' into development
# Conflicts:
#	.claude/hooks/block-risky-bash.sh
#	.claude/hooks/protect-files.sh
#	.claude/settings.json
2026-03-03 18:27:19 +00:00