74 tests pass, 0 typecheck errors, 0 lint errors. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
15 KiB
15 KiB
AIUI Plan 2 — Automated Loop Task List
Format:
- [ ]= pending,- [x]= done. Make at least 30 attempts on any difficult task before moving on. Loop reads this file. Specs are inPLAN2.md. Design rules are inloop/prompt.md.
M8: Chat UX Polish
- M8.1 — Message editing & regeneration (pencil icon on hover, re-send clears subsequent messages)
- M8.2 — Conversation branching (fork from any message, branch switcher pill, each branch stored in IDB)
- M8.3 — Reply-to threading (quoted excerpt in input, thread line visual, prepend
> quoteto message) - M8.4 — Conversation search (
Cmd+Fglass panel, real-time highlight, up/down to jump between matches) - M8.5 — Auto-title generation (background AI call after first exchange, silently replaces "New Chat")
- M8.6 — Context window visualiser (slim progress bar, token estimate, orange → red > 80%)
- M8.7 — Conversation export (Markdown / JSON / plain text, File System Access API +
<a download>fallback) - M8.8 — Import conversations (drag-and-drop JSON, AIUI format + Claude.ai export format, merge into IDB)
- M8.9 — Long-press / right-click context menus (messages + content cards,
ContextMenu.vueglass-card) - M8.10 — Scroll position memory (restore per conversation ID, works with virtual scroller)
- TEST:M8 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M9: AI Experience
- M9.1 — Multi-model comparison mode (split-screen same prompt → 2 models, swipeable on mobile)
- M9.2 — System prompt editor / personas (named personas, model preference, accent, per-conversation)
- M9.3 — Prompt template library (
/command palette,{{variable}}substitution, IDB-persisted) - M9.4 — Vision input (drag-and-drop image, base64 in message content, only when model supports vision)
- M9.5 — Response feedback (thumbs up/down per message, stored in IDB, exported with conversations)
- M9.6 — Token & cost estimator (badge per message, running total in context bar, model pricing table)
- M9.7 — AI memory panel (pinned facts injected into every system prompt, encrypted IDB, max 20 items)
- M9.8 — Model capabilities badge (Vision / Tools / Long context badges in model selector)
- M9.9 — Temperature & params sliders (temperature, max tokens, top-P, persisted per conversation)
- M9.10 — Stop sequence configuration (comma-separated stop sequences in advanced settings)
- TEST:M9 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M10: Advanced Content Renderers
- M10.1 — Full article renderer (TOC sidebar, reading time, font-size control, print mode, markdown-it)
- M10.2 — PDF viewer (
pdfjs-distlazy loaded, page nav, zoom, text selection, page 1 thumbnail preview) - M10.3 — Map renderer (Leaflet + OpenStreetMap lazy loaded, pins for all places, cluster > 10, fullscreen)
- M10.4 — Recipe renderer (new
recipecontent type, ingredients checklist, numbered steps, scale slider) - M10.5 — Event renderer (new
eventcontent type, countdown, ICS download, Google Calendar URL) - M10.6 — Math renderer (KaTeX lazy loaded,
$...$inline +$$...$$block, batch render on stream end) - M10.7 — Mermaid diagram renderer (lazy loaded, dark theme, flowchart/sequence/gantt, pan/zoom mobile)
- M10.8 — Audio waveform player (WaveSurfer.js lazy loaded, orange waveform, click-to-seek)
- M10.9 — Table renderer (sortable columns, row filter, CSV export, virtualise > 500 rows)
- M10.10 — Timeline renderer (new
timelinecontent type, vertical layout, animate in during streaming) - M10.11 — Code runner (HTML/CSS/JS sandboxed iframe,
sandbox="allow-scripts", output console) - M10.12 — Video renderer (native
<video>, HLS.js lazy loaded, YouTube nocookie embed fallback) - TEST:M10 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M11: Nostr Ecosystem
- M11.1 — Publish Nostr notes (compose panel, sign via NIP-07, broadcast to relays, per-relay status)
- M11.2 — Nostr DMs NIP-17 (encrypted DMs, inbox tab, contact list, store in IDB)
- M11.3 — Relay management UI (add/remove relays, latency column, read/write toggle, import NIP-65)
- M11.4 — Nostr profile editor (display name, bio, avatar, NIP-05, Lightning address, publish kind:0)
- M11.5 — Zaps NIP-57 (⚡ button on notes/profiles, sat amount input, LNURL-pay flow, QR + deep-link)
- M11.6 — NIP-05 verification badge (✓ badge, fetch from NIP-05 domain, cache 24h in IDB)
- M11.7 — Nostr search NIP-50 (search input, send REQ with
searchto NIP-50 relays, filter by type) - M11.8 — Thread view (fetch root + replies via
#etag, render threaded tree, max 5 levels deep) - M11.9 — Nostr lists NIP-51 (follow/mute/pin/bookmark lists, kind:3/10000/10001/10003, add/remove)
- M11.10 — Long-form content NIP-23 (kind:30023 articles, article renderer, discovery tab, share button)
- TEST:M11 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M12: Bitcoin Ecosystem
- M12.1 — On-chain address display (bech32 + legacy detect, QR, mempool.space link, copy button)
- M12.2 — Fedimint ecash display (detect token format, amount in sats, "Receive in Fedi" deep-link)
- M12.3 — BOLT12 offers (detect
lno1..., decoded amount, description, QR, "Pay with wallet" deep-link) - M12.4 — Nostr Wallet Connect NWC (NIP-47, paste connection string, check balance, pay with confirmation)
- M12.5 — LNURL-auth login (generate LNURL-auth QR, scan with wallet, set persistent Lightning identity)
- M12.6 — Live sat/fiat price (mempool.space
/api/v1/prices, 60s refresh,useBitcoinPricecomposable) - M12.7 — Mempool.space tx viewer (detect txid/block height, confirmations, fee rate, live WebSocket)
- M12.8 — BOLT11 decoder card (amount, description, expiry countdown, red when < 5min, NWC pay button)
- TEST:M12 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M13: Content Discovery
- M13.1 — "For You" feed (frequency map from favorites + history, local only, refreshes on app open)
- M13.2 — Content tagging (user tags on any item, stored in IDB, filter grids by tag, tag cloud in favorites)
- M13.3 — Smart playlists (recently played, most played, by genre, by decade — computed IDB views)
- M13.4 — Similar content (background AI call per item, 3 suggestions, cached 7 days in IDB)
- M13.5 — Recently viewed history (last 50 items any type, "Recent" tab in content panel, stored IDB)
- M13.6 — Content collections (user-curated mixed-type lists, mosaic thumbnail grid, shareable NIP-51)
- M13.7 — Trending in conversations (most-referenced items across 30 days, "referenced N times" badge)
- M13.8 — Share content to Nostr (generate note with title + AI description + tag URL, sign via NIP-07)
- TEST:M13 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M14: Plugin Marketplace
- M14.1 — Plugin discovery UI (fetch static registry JSON, list with name/type/author/version, install button)
- M14.2 — Plugin settings panel (
PluginSettingsForm.vuerenders JSON Schema, stored encrypted IDB) - M14.3 — Plugin permissions UI (permissions dialog on install, grant/deny per capability, stored per plugin)
- M14.4 — Plugin dev mode (
VITE_PLUGIN_DEV=true, hot-reload fromsrc/plugins/dev/, error inspector) - M14.5 — Built-in plugin: Wikipedia (
/wiki {query}, Wikipedia REST API, returnsarticlecard) - M14.6 — Built-in plugin: OpenLibrary (
/book {query}, openlibrary.org, returnsbook_extcards) - M14.7 — Plugin import by URL (paste GitHub raw URL or IPFS CID, validate manifest, permissions dialog)
- M14.8 — Plugin versioning & auto-update (check registry on start, badge when updates available, changelog)
- TEST:M14 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M15: Settings & Personalisation
- M15.1 — Accent colour picker (colour wheel + presets, updates
--color-accentCSS var, IDB-persisted) - M15.2 — Glass intensity slider (Subtle/Default/Strong presets, blur + opacity CSS vars, live preview)
- M15.3 — Font size settings (Compact 13px / Default 15px / Large 17px, sets
--font-size-base) - M15.4 — Content type visibility (toggle each of 11 renderers, hidden types still extract, just not shown)
- M15.5 — Keyboard shortcut map (list all shortcuts, click to rebind, conflict detection, IDB-persisted)
- M15.6 — Browser push notifications (opt-in, "Generation complete" while backgrounded, SW notification)
- M15.7 — Auto-archive old conversations (7/30/90/never slider, "Archive" IDB store, unarchive per item)
- M15.8 — Full data export (JSON archive of all IDB stores, optional encryption, GDPR compliant)
- M15.9 — Data wipe (two-step confirm, clears IDB + SW cache + localStorage, checkbox for API key vault)
- M15.10 — Default conversation settings (model, persona, web search, token counts — applies to new convos)
- TEST:M15 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M16: Mobile UX Polish
- M16.1 — Bottom sheet component (
BottomSheet.vue, gesture drag, 40%/80%/100% snap points, backdrop) - M16.2 — Swipe to navigate conversations (swipe left/right in chat, slide transition, 80px + 0.3 velocity)
- M16.3 — Pull-to-refresh on content panels (glass spinner, re-fetch context, haptic on release)
- M16.4 — Haptic feedback (
useHaptics()composable,navigator.vibrate(), settings toggle to disable) - M16.5 — Web Share API (native
navigator.share(), fallback glass share sheet, copy/Nostr options) - M16.6 — Pinch-to-zoom on images & maps (
usePinchZoom()composable, 1×–4×, double-tap reset) - M16.7 — iOS PWA polish (apple-mobile-web-app meta tags, safe area insets, splash screens)
- M16.8 — Long-press context menus mobile (500ms trigger, opens as BottomSheet, haptic on trigger)
- M16.9 — Scroll position memory per route (session Map, works across tab switches and back navigation)
- M16.10 — Landscape mode optimisation (50/50 split layout, minimal player bar, smooth rotate transition)
- TEST:M16 — Run
pnpm testandpnpm typecheck && pnpm lint. Fix all failures before proceeding.
M17: Accessibility & Internationalisation
- M17.1 — Keyboard navigation audit (Tab order, focus trap in modals, Escape closes, arrow key grids)
- M17.2 — ARIA audit (
aria-labelall icon buttons,aria-livedynamic content, dialog roles) - M17.3 — High contrast mode (
prefers-contrast: more+ Settings toggle, higher border/text opacity) - M17.4 — Automated accessibility tests (axe-core in Playwright,
pnpm test:a11y, fail on critical) - M17.5 — i18n foundation (
vue-i18n, extract strings toen.json, addes.json+fr.json) - M17.6 — RTL layout support (
dir="rtl"for Arabic/Hebrew, logical CSS properties throughout) - M17.7 — Dyslexia-friendly font (OpenDyslexic WOFF2 self-hosted, Settings → Appearance → Font)
- M17.8 — Skip navigation link (hidden "Skip to main content" visible on Tab focus, jumps to
<main>) - TEST:M17 — Run
pnpm test,pnpm test:a11y, andpnpm typecheck && pnpm lint. Fix all failures.
M18: Performance
- M18.1 — Bundle analysis & splitting (
vite-bundle-visualizer, identify eager loads, add route chunks) - M18.2 — Image lazy loading with blur-up (
loading="lazy", 16×16 base64 placeholder, CSS transition) - M18.3 — Request deduplication (
useFetch()composable, in-flight Promise sharing, AbortController) - M18.4 — Web Worker for heavy tasks (
heavy.worker.tsvia Comlink, contentExtraction + crypto) - M18.5 — Prefetch on hover (mouseenter/touch-hold, pre-fetch detail data, 5-min short-lived cache)
- M18.6 — Memory leak audit (
onUnmountedcleanup for all intervals/listeners/WebSockets/observers) - M18.7 — Background sync queue (queue failed IDB saves, retry on
visibilitychange, warn badge) - M18.8 — OPFS storage backend (SQLite WASM via
@sqlite.org/sqlite-wasm,VITE_STORAGE=opfsflag) - TEST:M18 — Run
pnpm test,pnpm build, verify gzipped bundle < 250 KB. Fix if over budget.
M19: Developer Experience & Quality
- M19.1 — Storybook 8 (stories for all
ui/components, dark glass canvas,pnpm storybook) - M19.2 — Visual regression tests (Playwright screenshots for key views, fail on > 0.5% pixel diff)
- M19.3 — Bundle size CI gate (
bundlesize, fail if > 250 KB gzipped, PR comment with diff) - M19.4 — Comprehensive mock data (20+ items per content type, mock Nostr relay, mock TMDB)
- M19.5 — E2E cross-browser matrix (Chromium + Firefox + WebKit, mobile viewports iPhone 14 + Galaxy S21)
- M19.6 — Proxy integration tests (mock Anthropic API, assert SSE format, tool_use, error codes, disconnect)
- M19.7 — Lighthouse CI (LCP < 3s, CLS < 0.15, scores posted as PR comment, stored in
reports/) - M19.8 — Dependency audit (
pnpm audit+license-checker, weekly job, block on critical vulns) - TEST:M19 — Run full suite:
pnpm test && pnpm test:e2e && pnpm typecheck && pnpm lint. All must pass.
M20: Collaboration & Sharing
- M20.1 — Share conversation via Nostr (export as kind:30023 long-form article, sign NIP-07, optional encrypt)
- M20.2 — Read-only conversation viewer (
/view/:nostrAddrroute, renders shared Nostr conversation) - M20.3 — Collaborative playlist NIP-51 (shared kind:30004 list, invite by npub, merge contributions)
- M20.4 — Conversation templates (pre-built starters as glass cards, system prompt + first message, NIP share)
- M20.5 — Export as audio podcast (Web Speech API TTS, WAV export via Web Audio, optional music mix)
- M20.6 — Community content packs (import curated JSON from GitHub/IPFS, listed in plugin marketplace)
- TEST:M20 — Run
pnpm test && pnpm typecheck && pnpm lint. All green before proceeding.
Final Sign-off
- FINAL — Run
pnpm test && pnpm test:e2e && pnpm typecheck && pnpm lint && pnpm build. All pass. Update PROGRESS.md with completion summary. Tag releasev2.0.0.
Notes
(Claude adds brief completion notes here as tasks finish.)