# Feature Backlog > Vibe Reader — Prioritized feature requests and enhancements > Last Updated: 2026-02-09 --- ## Legend - **Status:** `[ ]` Not Started | `[~]` In Progress | `[x]` Complete - **Priority:** P0 (Critical) | P1 (High) | P2 (Medium) | P3 (Nice-to-have) - **Links:** References to [[Technical Decisions]], [[Bug Tracker]], [[User Feedback]] --- ## P0 — Critical (Blocks Core Experience) - [x] **Smart Capture: Lock Screen Reliability** — 2026-02-07 - *Goal:* Capture overlay launches reliably from lock screen regardless of app state - *Solution:* Abandoned MediaSession "Trojan Horse" approach; replaced with Quick Settings Tile + simplified foreground notification - *Technical:* - Created `QuickCaptureTileService` as primary capture trigger - Removed all `MediaSessionCompat` code from `ReadingSessionService` - Changed service type from `mediaPlayback` to `specialUse` - Simplified notification with action buttons - *Trade-off:* One extra tap (pull shade + tap tile) for 100% reliability - *Bonus:* Cleaner codebase, easier iOS port - *See:* [[Bug Tracker#BUG-R008]] - [x] **Delete Captures from Library** — 2026-01-18 - *Goal:* Remove incorrect words or quotes from a session - *Functional:* Swipe-left-to-delete with confirmation dialog on Word/Quote items - *UI:* `SessionDetailView` with swipe actions and AlertDialog confirmation - *Data:* DAO methods `deleteWord()`, `deleteQuote()`, `deleteUndefinedWords()` - *Bonus:* "Clear Undefined" banner to bulk-delete failed lookups --- ## P1 — High (V1 Release Blockers) - [x] **Book Layer View in Library** — 2026-01-18 - *Goal:* Group insights by Book first, then by Session within each book - *Functional:* Tap Book card → Book Detail (all sessions + aggregated words/quotes); Tap Session pill → Session Detail - *UI:* Three-tier navigation: Library (Book List) → Book Detail → Session Detail - *Components:* `LibraryView`, `BookCard`, `SessionPill`, `BookDetailView`, `SessionDetailView` - *Data:* `getBooksWithMetrics()`, `getRecentSessionsForBook()`, `getSessionsForBook()`, `getWordsForBook()`, `getQuotesForBook()` - *Source:* Product Diary 2026-01-18, [[User Feedback#Session-002]] - [x] **Tap-to-Relookup Undefined Words** — 2026-02-07 - *Goal:* Allow re-defining words that failed lookup or were converted from quotes - *Implementation:* - Added `updateWord()` DAO method - Added `relookupWord()` in `SessionViewModel` (Dictionary API → Wikipedia fallback) - Made undefined words tappable in `SwipeableWordItem` - Added "Tap to look up" hint text below undefined definitions - Once looked up, word is updated and no longer tappable (not repeatable unless re-edited) - *See:* [[Bug Tracker#BUG-R007]] - *Source:* [[User Feedback#Session-002 Addendum]] - [x] **Interaction Affordances Overhaul** — 2026-02-07 - *Goal:* Make all interactive elements obviously interactive - *Implementation:* - `SessionRow`: Added chevron icon + card elevation (2dp) - `SessionPill`: Added shadow elevation (2dp) - Undefined words: Added "Tap to look up" visual hint - *Source:* [[User Feedback#Session-002 Addendum]], [[User Feedback#Session-003]], [[User Feedback#Session-005]] - [ ] **Cold Start / Onboarding** *(Deferred)* - *Goal:* Demonstrate value before user commits to reading with the app - *Problem:* Empty Library = unclear value proposition; requires commitment before showing usefulness - *Options:* - Sample data onboarding (show what a populated library looks like) - Interactive tutorial with example captures - "See a demo vibe" before first session - *Deferred:* 2026-02-08. Adds complexity that would interfere with debugging during active development. Revisit post-V1 when core flows are stable. - *Source:* [[User Feedback#Session-004]] - [ ] **Improve "Define This Instead" Visibility** - *Goal:* Make secondary action more discoverable when quote is detected - *Options:* Increase contrast, add icon, use OutlinedButton instead of TextButton, animate on first appearance - *Source:* [[User Feedback#Session-002 Addendum]] - [x] **Skip Confirmation for Word Definitions** — 2026-02-09 - *Goal:* Reduce C2C (clicks-to-capture) for single-word definitions - *Functional:* In Smart Capture, 1-2 word inputs now call `defineWord()` directly, skipping the VERIFYING state - *Implementation:* - Modified `handleSpeechResult()` SMART_CAPTURE branch to call `defineWord(text)` instead of setting `uiState = VERIFYING` - Quotes (3+ words) still go through verification with TTS playback - Explicit DEFINE_WORD mode already skipped verification; Smart Capture now matches that behavior - *Result:* Zero taps required for word definitions in Smart Capture mode - *Source:* [[User Feedback#Session-001]] - [x] **Auto-Dismiss Definition Screen** — 2026-02-09 - *Goal:* Definition screen closes automatically after displaying result - *Implementation:* - Added `autoDismissActive` state field to `SpeechCaptureActivity` - `LaunchedEffect` countdown from 5 to 0 when definition text is loaded - "Closing in Xs" label + "Keep Open" `OutlinedButton` during countdown - Tapping "Keep Open" cancels countdown, shows standard "Done" button - `autoDismissActive` resets to `true` on each new `startListening()` call - *Applies to:* Both Smart Capture word definitions and explicit DEFINE_WORD mode - *Source:* [[User Feedback#Session-001]] - [x] **Increase Font Size in Capture Overlay** — 2026-02-07 - *Goal:* Improve legibility during voice capture flow - *Implementation:* - LISTENING: `headlineMedium` → `headlineLarge`, spinner 64dp → 80dp - VERIFYING: `titleMedium` → `titleLarge`, `headlineSmall` → `headlineMedium` - DEFINING: `bodyLarge` → `titleLarge`, `headlineMedium` → `headlineLarge` - SUCCESS/ERROR: Bumped accordingly - *Source:* [[User Feedback#Session-001]] - [x] **Quick Settings Tile** — 2026-02-07 - *Goal:* Reliable capture trigger from notification shade, works from lock screen - *Implementation:* - Created `QuickCaptureTileService` extending `TileService` - Tile shows active/inactive state based on session - Displays book name as subtitle when session active - Handles Android 14+ `startActivityAndCollapse(PendingIntent)` API - Created `ic_tile_capture.xml` microphone icon - Registered in `AndroidManifest.xml` - *C2C:* 2 (pull shade + tap tile) but 100% reliable - *See:* [[Technical Decisions#TDR-008]] --- ## P2 — Medium (Post-V1 Polish) - [ ] **Vibe-Forward Session Descriptors** *(Promoted to P1 — 2026-02-08)* - *Goal:* Replace quantified session metadata with qualitative, AI-generated descriptors - *Problem:* "5W | 2Q" feels like data tracking, not a reading companion - *Vision:* "A meditation on impermanence" instead of "Session 3: 8 captures" - *Functional:* AI generates one-line session "vibe" based on captures; displayed on session cards - *Framing:* "Your vibe / what caught your eye was..." - *Design Reference:* Co-Star aesthetic (poetic, vibe-forward, never clinical) - *Source:* [[User Feedback#Session-003]], [[User Feedback#Session-006]] - [ ] **Session Closure Vibe Prompt** *(Promoted to P1 — 2026-02-08)* - *Goal:* Capture emotional/intellectual state at session end - *Problem:* Sessions end abruptly; no reflection moment - *Vision:* Prompt user to log how they feel as session closes - *Options:* - Quick emoji/icon selection - 2D vibe plane (see: 2D Vibe Selection UI) - Free-text "how did this feel?" - *Source:* [[User Feedback#Session-006]] - [ ] **Edit Saved Words & Quotes** - *Goal:* Allow corrections to captured content after the fact - *Functional:* Tap word/quote → edit dialog → save changes to database - *Data:* `updateWord()`, `updateQuote()` DAO methods - *Source:* [[User Feedback#Session-002 Addendum]] - [ ] **Display Timestamps on Captures** - *Goal:* Show when each word/quote was captured - *Functional:* Timestamps already stored in DB; display in Session Detail or Book Detail - *UI:* Subtle label like "2:34pm" or "45 min into session" - *Source:* [[User Feedback#Session-002 Addendum]] - [ ] **Auto-Define After Delay (Setting)** - *Goal:* Skip verification step entirely for rapid capture - *Functional:* After speech recognition completes, wait X seconds → auto-trigger `defineWord()` if no user action - *Settings:* Toggle on/off, configurable delay (1s, 2s, 3s) - *Source:* [[User Feedback#Session-002 Addendum]] - [ ] **Speech Trigger Behavior (Setting)** - *Goal:* Control when speech recognition starts - *Options:* - Auto-start on overlay open (current) - Wait for tap-to-speak button - Voice activation ("Hey Vibe") - *Source:* [[User Feedback#Session-002 Addendum]] - [ ] **Offline Definition Queue** - *Goal:* Save words for definition lookup when back online - *Functional:* If API call fails due to no network → save word with status "pending_definition" - *UI:* Show "⏳" indicator on words awaiting definition; auto-retry on connectivity - *Source:* Technical Spec Open Questions - [ ] **Session Timer Display** - *Goal:* Show elapsed time during active reading session - *Functional:* Live-updating timer in `ActiveSessionView` - *UI:* Prominent display below book title (e.g., "00:24:15") - *Source:* Product Diary Current State table - [ ] **Favorite/Star Captures** - *Goal:* Mark certain words or quotes as favorites for quick access - *Functional:* Toggle favorite on any Word or Quote; filter by favorites in Archive - *Data:* `is_favorite` field already exists in schema - *UI:* Star icon on list items; "Favorites" filter tab - [ ] **Quote Playback (TTS)** - *Goal:* Hear saved quote read back on demand - *Functional:* Tap play icon on Quote item → TextToSpeech reads content - *UI:* Small play button on Quote cards in Archive - [ ] **Export Session to Markdown/Text** - *Goal:* Share or backup captures from a session - *Functional:* "Export" action on Session → generates formatted text with all Words and Quotes - *Output:* Copy to clipboard or share intent --- ## P3 — Nice-to-Have (Future Exploration) - [ ] **2D Vibe Selection UI** *(Promoted to P2 — 2026-02-08)* - *Goal:* Allow users to capture emotional state via spatial interaction - *Concept:* X-axis = pleasantness (negative ← → positive), Y-axis = tension/arousal (calm ↓ ↑ activated) - *Interaction:* - Tap anywhere on 2D plane to select feeling - Drag finger, word under finger updates based on position - Color gradient mapped to emotional space (color wheel metaphor) - *Research Required:* Russell's Circumplex Model of Affect; emotional vocabulary for grid population - *UI:* Could be modal overlay or dedicated "how do you feel?" screen - *See also:* [[02.06.26 - What is a Vibe]] - *Source:* [[User Feedback#Session-006]] - [ ] **Animated Session Timeline** - *Goal:* Help users re-experience past sessions through visual storytelling - *Vision:* Meandering, wavy lines connecting sessions and captures - *Functional:* Scroll through timeline; animations and transformations evoke the feeling of each session - *Design:* Not rigid/linear; organic flow between moments - *Source:* [[User Feedback#Session-006]] - [ ] **Idle Session / Background Vibe Mode** - *Goal:* Capture thoughts and words outside active reading sessions - *Problem:* "A thought, a word can be interesting any time of day" - *Vision:* Always-available capture bucket, grouped by day or week - *Functional:* - Passive "idle session" that accumulates captures throughout the day - User preference: group by day vs week - Future: snap a photo, voice notes beyond transcription - *Scope Implication:* Expands app beyond reading companion to general thought capture - *Source:* [[User Feedback#Session-006]] - [ ] **Vibe-Based Book Discovery (V2)** - *Goal:* Help users find what to read based on desired vibe - *Problem:* Not all users arrive with a book; some are searching for what to read next - *Vision:* Floating vibe tags ("whimsical", "dark", "esteemed", "short") on start screen - *Functional:* User selects vibes → app suggests books matching criteria - *Data:* Could integrate with Goodreads/Open Library APIs - *Loop:* Vibe input → book discovery → captures → vibe reflection → "more like this" - *Source:* [[User Feedback#Session-004]] - [ ] **Widget for Home Screen** - *Goal:* Start session or quick-capture without opening app - *Functional:* Android widget with "Start Session" button or active session status - [ ] **Wear OS Companion** - *Goal:* Capture from smartwatch (ultimate C2C reduction) - *Functional:* Tap watch → Speak → Captured - *Source:* Product Diary exploration notes - [ ] **Book Cover Auto-Fetch** - *Goal:* Display book cover art in Archive and active session - *Functional:* On book creation, search Open Library API for cover image - *UI:* Thumbnail in Archive list and active session header --- ## Completed - [x] **Skip Confirmation for Word Definitions** — 2026-02-09 - Smart Capture words skip VERIFYING state, go straight to `defineWord()` - Quotes still verify with TTS playback - Combined with Auto-Dismiss, reduces word definition C2C from 4 interactions to 0 taps - [x] **Auto-Dismiss Definition Screen** — 2026-02-09 - 5-second countdown after definition loads, then `finish()` - "Keep Open" button cancels countdown, shows "Done" button - Applies to Smart Capture words and explicit DEFINE_WORD mode - [x] **Weekly Vibe Redesign: Wrapped-Style UI** — 2026-02-05 - *Goal:* Transform verbose prose-based Weekly Vibe into structured, visually engaging "Wrapped" style experience with safeguards against redundant API calls - *Changes:* - Structured data model replacing prose (vibeTitle, vibeEmoji, themeTags, insightNuggets, wordSpotlight, quoteSpotlight) - Token-efficient JSON prompt (10 word terms, 5 truncated quotes, 256 max output tokens) - Generation safeguard tracking session count to prevent redundant API calls - New Wrapped-style card UI with VibeHeader, ThemeChips, InsightList, SpotlightSection, VibeFooter - Button states: CAN_GENERATE, GENERATING, UP_TO_DATE, NO_DATA - *Technical:* ~60-70% token reduction per API call; JSON output parsing with fallbacks - *See:* [[Technical Decisions#TDR-007]] - [x] **Weekly Vibe (AI Reflection)** — 2026-01-24 - *Goal:* Surface reading patterns and themes through AI-generated insights - *Functional:* Analyzes past week's captures → generates thematic reflection - *Technical:* Gemini Pro API via generativeai SDK; BuildConfig for API key security - *UI:* "Generate Weekly Vibe" button in Library; card displays generated insight - *Data:* Time-range queries for words/quotes/sessions in DAO - *Implementation:* GeminiClient.kt, WeeklyVibe.kt, SessionViewModel extensions, LibraryView updates - *Bonus:* Seed test data button for development testing - [x] **Book Layer View in Library** — 2026-01-18 - Three-tier navigation: Library → Book Detail → Session Detail - Book cards with aggregated metrics and session pills - Tap anywhere on book card → Book Detail; Tap session pill → Session Detail - [x] **Delete Captures with Confirmation** — 2026-01-18 - Swipe-left-to-delete with AlertDialog confirmation - "Clear Undefined" banner for bulk deletion of failed lookups - Swipe-right-to-convert (word ↔ quote) - [x] **Editable Verification Text** — 2026-01-18 - "I heard" text is now editable via BasicTextField - Auto-re-detects word vs quote based on edited word count - Cancel button added to verification screen - [x] **Capture Activity Re-launch Fix** — 2026-01-18 - Added `onNewIntent()` to handle `FLAG_ACTIVITY_SINGLE_TOP` re-launch - Added `onStop()` to cancel stale speech recognizer state - Resolves: Capture not triggering after close/retry - [x] **Multi-Word Concept Support ("Define Anyway")** — 2026-01-18 - *Goal:* Allow defining phrases like "carpe diem" or "United States" - *Functional:* When Smart Capture detects >2 words → show "Define This Instead" secondary button - *Technical:* Dictionary API first; Wikipedia API fallback for concepts/phrases - *UI:* TextButton below primary actions with visual divider; only visible for detected quotes - *Smart Search:* Strips articles ("the hegemony" → tries "hegemony"), multiple search variations - *Implementation:* WikipediaApiService.kt, WikipediaClient.kt, updated SpeechCaptureActivity.kt - [x] **Relational Database Schema** — 2026-01-10 - Refactored from flat log to Book → Session → Captures hierarchy - See: [[Technical Decisions#TDR-001]] - [x] **Smart Capture Mode (Initial)** — 2026-01-18 - Single tap triggers voice capture; auto-detects word (1-2 words) vs quote (3+ words) - See: [[Technical Decisions#TDR-002]] - [x] **Session Auto-Naming** — 2026-01-10 - "The Great Gatsby: Session 2" auto-generated on resume - [x] **Archive Metrics Badges** — 2026-01-10 - Visual tags showing "5W | 2Q" per session - [x] **Resume Book Chips** — 2026-01-10 - Quick-select chips for previously read books on start screen --- ## Icebox (Deprioritized / Revisit Later) - [ ] **OCR Camera Capture** — Ruled out for V1; voice-first is faster - [ ] **Social Sharing** — Against product philosophy ("not a social network") - [ ] **Book Search / ISBN Scan** — Adds friction; manual entry is acceptable for V1