- 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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>
- 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>
- 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>
- 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>
- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
- 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>
- Default chatCollapsed to true so PromptIndex shows on load
- Default AI model to claude-haiku-4.5 for faster responses
- Fix extractMagazineSections to handle numbered/bullet bold lists
without markdown headings (e.g. "1. **Title** — content")
- Fix "For deeper coverage" stripping for bold-formatted text
- Expand hasMagazine detection with more financial/news keywords
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Design system browser with grid/detail views for tokens and components
- Nostr feed tab with note/article/zap filtering and relay status
- Stop generation button to abort AI streaming mid-response
- Paste & extract content without sending to AI
- Refactor useContentPanel into contentExtraction.ts and contentFiltering.ts
- Banner fallback composable for 3-stage image loading
- Wikipedia and Google Books as fallback image sources
- Loading skeletons with variant-specific shapes
- Mobile UX: auto-switch to content, back button, detail flow
- Project grid with breadcrumb nav and inline creation
- Filesystem Vite plugin for local project browsing
- Magazine text cleanup and song grid polish
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add Places/Restaurants content type with PlaceCard, PlaceDetail, PlaceGrid
- Add WebsiteDetail and MagazineSectionDetail views for Context panel
- Enhance MagazineGrid hero with background image and 3x taller header
- Add mobile 3-tab layout (Chat, Content, Context) with detail navigation
- Add /code command system: useCodeContext composable, ProjectGrid, FileTreeNode,
CodeDetail for IDE-style code viewing across all three panels
- Fix /code bubble and prompt index clicks to re-activate code mode
- Fix updatePanelFromText overwriting code tab by skipping command messages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Rewrite extractMagazineSections to robustly parse ## and ### headings
with any emoji (not just a hardcoded list)
- Strip [[podcast:...]], [[film:...]] and other content tags from magazine text
- Strip "For deeper coverage" and "Sources" sections from magazine content
- Use heading titles as banner dividers instead of repeating them on every tile
- Add group field to MagazineSection for heading-based grouping
- Strip ** markdown from both titles and content
- Enlarge "In response to" headline text to text-2xl for editorial prominence
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each content type now has a unique fallback cover with fitting typography:
- Books: Georgia serif italic with spine detail
- Films: Helvetica Neue with separator line
- TV Series: SF Pro Display (new dedicated generator)
- Music: system-ui with vinyl record motif
- Podcasts: system-ui with microphone icon
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract markdown images and raw image URLs from AI responses into a
browsable image gallery. Masonry (columns) layout in the grid,
full-size detail view with source links. Also fix ContextLoader to
accept all content types for loading state display.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the user explicitly asks about books, don't bail on pattern
extraction just because the AI also referenced films from the library.
Also fix book pattern regex to match **Title** — *Author* format,
strip sources section before extraction, and remove duplicate title
below BookGrid cards.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add complete TV series content surface: extraction from AI responses,
grid/detail views, TMDB TV search endpoint, and panel tab integration.
Includes film_ext-to-TV-series conversion for backward compatibility
and AI prompt instructions for [[tv_ext:...]] tags.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire up ContentPanel with tab navigation for all existing content types
(films, songs, podcasts, news, websites, magazine). Add complete Books
pipeline: type definition, extraction (tags + pattern matching), cover
fetching from Open Library, BookCard/BookGrid/BookDetail components,
inline chat cards, and prompt index badges.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add a toggle in the chat header to collapse messages into a compact
prompt index showing user queries with content-type badges. Clicking
a prompt surfaces the corresponding content panel. Also fixes magazine
section extraction (### headers, emoji stripping, author regex) and
improves tile layout with editorial rhythm.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- MagazineGrid: New Yorker tile layout with wide/half/dark/banner tiles
- Extract AI film descriptions into synopsis field
- Fix section extraction to handle ### headers
- Strip emojis from magazine titles and content
- FilmDetail: conditional synopsis with "Why watch" header
- FilmCard: synopsis preview for external films
- Consolidate dev server to single script
- Fix dev.sh for macOS bash 3.2 compatibility
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Redesign MagazineGrid with editorial New Yorker-inspired layout
- Simplify ArticleDetail and ArticleOverlay components
- Enhance claude-proxy with improved content extraction
- Add HTML utility for content processing
- Update NewsCard styling and chat message handling
- Clean up worktree references
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>