# 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