# Feature Backlog > Vibe Reader - Prioritized feature requests and enhancements > Last Updated: 2026-08-26 (evening pass: metadata fetch, page capture, e-reader exploration) --- ## Legend - **Status:** `[ ]` Not Started | `[~]` In Progress | `[x]` Complete - **Priority:** P0 (Critical) | P1 (High) | P2 (Medium) | P3 (Nice-to-have) - **Links:** References to [[Project - Vibe Reader/Build & Iterate/Technical Decisions|Technical Decisions]], [[Project - Vibe Reader/Build & Iterate/Bug Tracker|Bug Tracker]], [[Project - Vibe Reader/Build & Iterate/User Feedback|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:* [[Project - Vibe Reader/Build & Iterate/Bug Tracker#BUG-R008|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) - [~] **Roaming Sessions (Background Vibe)** *(Promoted from P3 - 2026-08-12)* - *Goal:* Extend frictionless capture beyond the book - words from podcasts, conversation, articles - in one ambient bucket per day - *Slice 1 (built 2026-08-12, pending device test + commit):* - Roaming modeled as a reserved Book row; `startRoam()` day-rollup with same-day resume (sessions are days, e.g. "Aug 12") - "Start a Roam" button on the session start screen; typing "Roaming" as a book title routes to the roam flow - Slim Roaming bar + All Captures bar pinned topmost in Library; Roaming excluded from the book shelf and Resume chips - All Captures view (`AllCapturesComponents.kt`) with book pills; DAO joins `getAllWordsWithBook` / `getAllQuotesWithBook`; `getSessionForBookOnDay` - No schema migration (Words/Quotes already carry `book_id`) - *Slice 2 (next):* Settings pane + roaming/bubble toggle + Bubbles API capture surface (conversation shortcut, bubble metadata on the roam notification, capture activity in a bubble window) - *Open:* roam end semantics (manual end vs. ambient until midnight); distinct styling for roams in the History trail; duration metric misleading for roams (pause gaps) - *See:* [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-012|Technical Decisions > TDR-012]], [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-013|Technical Decisions > TDR-013]] - *Source:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-006|User Feedback > Session-006]] - [~] **Durable Local Data Across Dev Builds** *(Applied 2026-08-26; verification pending)* - *Goal:* Tester and dogfood data survives every reinstall, from both install paths (Android Studio + CI sideload) - *Done:* `exportSchema = true` + destructive migration fallback removed in `AppDatabase`; CI "shared debug keystore" signing-parity step in the workflow - *Remaining:* Add `DEBUG_KEYSTORE_B64` repo secret; commit regenerated `schemas/1.json` after next local build; verify build N → build N+1 keeps data on both paths - *Future:* Debug-only JSON export/import as disaster recovery (seeds the user-facing "Export Session" item) - *See:* [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-014|Technical Decisions > TDR-014]], [[Project - Vibe Reader/Build & Iterate/Bug Tracker#BUG-012|Bug Tracker > BUG-012]] - [ ] **Settings Pane** - *Goal:* First-class home for user-facing toggles and migrated code-level constants - *Contents (initial):* Roaming/bubble toggle; `USE_MEDIA_STYLE` lock screen fallback flag; future capture-behavior settings (Auto-Define After Delay, Speech Trigger Behavior) - *Source:* Product Log 2026-08-12 - [~] **MediaStyle "Tuxedo" Lock Screen Experiment** - 2026-08-01 - *Goal:* Reclaim C2C 1 from the lock screen with a fully-costumed MediaStyle notification - *Implementation:* Full metadata (book title, "tap ▶ to capture" artist line, album art); session held at PAUSED so ▶ renders; ▶ launches Smart Capture, Stop ends the session; one-line `USE_MEDIA_STYLE` flag falls back to the proven standard notification - *Pending:* The dogfood test - does ▶ actually render on the Pixel lock screen? The answer decides the capture entry-point story (tuxedo vs. tile) - *See:* [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-010|Technical Decisions > TDR-010]] - [ ] **Persist the Weekly Vibe (Vibe History)** - *Goal:* The flagship AI feature should survive a restart; currently in-memory only, killed on process death - *Functional:* `weekly_vibes` table; keep past vibes so reading identity is visible over time (feeds 2026 O1) - *Source:* Product Log 2026-08-01; "Vibe History" bookmark from 2026-02-05 - [ ] **Instrument the OKRs (launch_source + Capture Rate)** - *Goal:* Make the ">50% captures from lock screen" KR and Capture Rate measurable instead of vibes-based - *Functional:* Persist the `launch_source` extra already flowing through capture intents; count captures per session - *Source:* Product Log 2026-08-01 - [ ] **Quick Settings Tile Onboarding** - *Goal:* Nobody discovers a QS tile unaided; one explainer screen at first run - *Note:* Scoped-down, ship-first slice of the deferred Cold Start / Onboarding item below; biggest activation risk in the app - *Source:* Product Log 2026-08-01 - [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 Log 2026-01-18, [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002|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:* [[Project - Vibe Reader/Build & Iterate/Bug Tracker#BUG-R007|Bug Tracker > BUG-R007]] - *Source:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|User Feedback > Session-002 Addendum]], [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-003|User Feedback > Session-003]], [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-005|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-004|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-001|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-001|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-001|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:* [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-008|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-003|User Feedback > Session-003]], [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-006|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-006|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-002 Addendum|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 Log 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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-006|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-006|User Feedback > Session-006]] - [~] **Idle Session / Background Vibe Mode** *(Promoted to P1 as "Roaming Sessions (Background Vibe)" - 2026-08-12; Slice 1 built)* - *See:* the Roaming Sessions entry under P1, [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-012|Technical Decisions > TDR-012]] - Original vision preserved there: ambient day-grouped capture bucket; future inputs (photo, voice notes) remain open - *Source:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-006|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:* [[Project - Vibe Reader/Build & Iterate/User Feedback#Session-004|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 Log exploration notes - [ ] **Book Metadata Auto-Fetch** *(Expanded from "Book Cover Auto-Fetch" - 2026-08-26)* - *Goal:* Map user-entered titles against a public API to enrich the Book entity - author, publication date, cover image - *Functional:* On book creation, query Open Library (fallback: Google Books) by title; fuzzy-match; user confirms the match once, silently enriched thereafter - *UI:* Cover thumbnail in Library cards and active session header; author/date as quiet metadata on Book Detail - *Data:* New nullable columns on `Books` (author, published_year, cover_url) - a version bump + AutoMigration under the TDR-014 regime - *Guardrail:* Metadata is decoration, never friction - a failed or skipped match must not block session start - [ ] **Page Capture (Back-Reference Anchor)** - *Goal:* Attach a page number to a word or quote so an insight can be walked back to its spot in the physical book - *Functional:* Optional, voice-first to protect C2C - trailing "page 142" in the utterance is parsed off and stored; never a required field - *UI:* Small "p. 142" tag on capture cards in Session/Book Detail - *Data:* Nullable `page_number` on Words and Quotes (AutoMigration) - *Why:* The capture honors the moment; the page honors the return. Closes the loop back into the physical book - the object the whole product defers to. - [ ] **E-Reader Integration (Kindle et al.)** *(Future scope - evaluate and explore)* - *Goal:* Meet the reader on digital when they are on digital - the Kindle-on-trains lesson from the 2026-01-06 diary entry - *Reality check:* No public Kindle API for third-party apps; realistic routes are Kindle notebook export parsing (`My Clippings.txt` / notebook email export), Readwise-style import, or on-device share-sheet capture from reader apps - *Open questions:* Does importing highlights dilute the voice-first identity, or is capture-source-agnosticism the same move Roaming already made? Where does the "physical book reader" positioning bend before it breaks? - *Status:* Exploration item only - no build commitment; revisit after v1 public beta --- ## Completed - [x] **History Tab** - 2026-08-12 - History given its own top-level tab (right of Library, titled "History"); the sessions trail lives there - Roam day-sessions appear in the trail alongside book sessions (distinct styling under consideration) - [x] **All Captures View** - 2026-08-12 - Slim bar pinned topmost in Library opens every saved word and quote across all books, interleaved by time - Book pill on each card (surfaceVariant chip styling, consistent with session tags) - Part of Roaming Slice 1; see [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-012|Technical Decisions > TDR-012]] - [x] **CI Build Pipeline (GitHub Actions)** - 2026-08-01 - Every push to main builds a debug APK and uploads it as an artifact; redeploy loop is push → wait → sideload - Repo hardening in the same pass: `.gitattributes` + autocrlf (CRLF phantom diffs), `startForegroundService` correctness, tile updates on the main thread, no-session capture toast - See [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-011|Technical Decisions > TDR-011]] - [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:* [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-007|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: [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-001|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: [[Project - Vibe Reader/Build & Iterate/Technical Decisions#TDR-002|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