Decompose #7 — semantic notebook features into 4 phases #9

Closed
opened 2026-05-13 23:42:52 +00:00 by Mark · 1 comment
Owner

Goal

Break down transcriber#7 (No semantic notebook features) into independently implementable phases.

Decomposition

The app pitch is "semantic notebook for conversations" but search is SQL LIKE, there's no summarization, no topic extraction, no notes. This is most of the product vision. Split into phases:

Phase 1 — Full-Text Search (FTS)

Replace WHERE text LIKE '%query%' with SQLite FTS5:

  • Add FTS5 virtual table (transcript_segments_fts) with the existing Room schema
  • Migrate SegmentDao.searchSegments() to query FTS5 (ranked results, snippet highlighting)
  • Populate FTS index from existing segment data on migration
  • No UI changes — search bar works the same, results are just better and faster

Deliverable: Search works with relevance ranking, sub-second on 10K+ segments.

Phase 2 — Post-Recording Summarization

After a recording session ends, auto-generate a summary:

  • Add a SessionSummary entity to Room (sessionId, summaryText, keyPoints: List, sentiment: String, createdAt)
  • SummarizationProvider interface (same pattern as TranscriptionProvider)
  • Provider implementations:
    • CloudSummarizationProvider — calls OpenAI (or configured LLM) via existing API key from BackendConfig
    • LocalSummarizationProvider — optional, for offline (small model via TFLite or just extract longest sentences as fallback)
  • Hook into the recording end lifecycle: when session finishes, fire async summarization
  • Display summary in a collapsible header on the session detail screen

Phase 3 — Auto Topic Extraction

After summarization, extract/recommend topics:

  • Analyze summary + segment text for noun phrases and named entities
  • Suggest Subject tags with confidence scores
  • TopicExtractionProvider interface (Cloud + Local variants)
  • Auto-tag sessions with suggested subjects (user confirms/rejects in UI)
  • Build a topic cloud / subject filter on the main screen

Phase 4 — Per-Segment Notes & Annotations

Allow adding text notes to individual transcript segments:

  • SegmentNote entity (noteId, segmentId, text, createdAt, updatedAt)
  • Expandable note field on each segment card in the detail view
  • Pin/flag important segments
  • Search across notes (use FTS5 from Phase 1)

Dependency Graph

Phase 1 (FTS)
  └─> Phase 2 (Summarization)
       └─> Phase 3 (Topic Extraction)
  └─> Phase 4 (Segment Notes)  [independent of 2-3]

Phase 1 can ship alone and immediately improves search. Phase 4 is independent and can be done in parallel with Phases 2-3. Each phase adds meaningful user-facing value on its own.

## Goal Break down transcriber#7 (No semantic notebook features) into independently implementable phases. ## Decomposition The app pitch is "semantic notebook for conversations" but search is SQL LIKE, there's no summarization, no topic extraction, no notes. This is most of the product vision. Split into phases: ### Phase 1 — Full-Text Search (FTS) Replace `WHERE text LIKE '%query%'` with SQLite FTS5: - Add FTS5 virtual table (`transcript_segments_fts`) with the existing `Room` schema - Migrate `SegmentDao.searchSegments()` to query FTS5 (ranked results, snippet highlighting) - Populate FTS index from existing segment data on migration - No UI changes — search bar works the same, results are just better and faster **Deliverable**: Search works with relevance ranking, sub-second on 10K+ segments. ### Phase 2 — Post-Recording Summarization After a recording session ends, auto-generate a summary: - Add a `SessionSummary` entity to Room (sessionId, summaryText, keyPoints: List<String>, sentiment: String, createdAt) - `SummarizationProvider` interface (same pattern as `TranscriptionProvider`) - Provider implementations: - `CloudSummarizationProvider` — calls OpenAI (or configured LLM) via existing API key from BackendConfig - `LocalSummarizationProvider` — optional, for offline (small model via TFLite or just extract longest sentences as fallback) - Hook into the recording end lifecycle: when session finishes, fire async summarization - Display summary in a collapsible header on the session detail screen ### Phase 3 — Auto Topic Extraction After summarization, extract/recommend topics: - Analyze summary + segment text for noun phrases and named entities - Suggest Subject tags with confidence scores - `TopicExtractionProvider` interface (Cloud + Local variants) - Auto-tag sessions with suggested subjects (user confirms/rejects in UI) - Build a topic cloud / subject filter on the main screen ### Phase 4 — Per-Segment Notes & Annotations Allow adding text notes to individual transcript segments: - `SegmentNote` entity (noteId, segmentId, text, createdAt, updatedAt) - Expandable note field on each segment card in the detail view - Pin/flag important segments - Search across notes (use FTS5 from Phase 1) ## Dependency Graph ``` Phase 1 (FTS) └─> Phase 2 (Summarization) └─> Phase 3 (Topic Extraction) └─> Phase 4 (Segment Notes) [independent of 2-3] ``` Phase 1 can ship alone and immediately improves search. Phase 4 is independent and can be done in parallel with Phases 2-3. Each phase adds meaningful user-facing value on its own.
Author
Owner

Fixed in commit. Closing.

Fixed in commit. Closing.
Mark closed this issue 2026-05-14 18:43:32 +00:00
Sign in to join this conversation.
No description provided.