Problem / why
The operator dictates heavily (18,000+ recordings, ~111 hours of audio over months) and loves stats, but the only surface today is the Overview "Summary" (count, total audio, enhanced count, avg duration) — thin. P13 future-ideas already lists a "Transcription analytics dashboard"; this scopes it. The value: turn the rich local history (SQLite) into insight, a sense of output/impact, and a practical cleanup tool — all on-device, consistent with privacy-first.
Proposed content (menu for the PRD to curate — not all required)
- Activity over time — GitHub-style contribution heatmap of dictations/words per day; daily/weekly/monthly trend; current & longest streak.
- Output & impact — total words dictated; total audio time; estimated "typing time saved" (words ÷ typing WPM, or audio × speed factor); totals all-time + this week/month.
- Throughput — per-backend speed factor (real values seen: FluidAudio ~67×, Whisper ~17×, Sherpa Parakeet-v2 ~5.8×); processing-time distribution.
- Model & feature usage — breakdown by transcription backend/model (e.g. FluidAudio ~17k vs Whisper ~894); AI-enhancement usage (only ~22 of 18k enhanced — which prompts/models, % enhanced); dictionary/canonical correction hit counts.
- Patterns — recording-length histogram (most ~21s); time-of-day clock/heatmap (surfaces habits AND anomalies like 5am forgotten-toggles).
- Cleanup / cruft finder (high value — productises a real pain hit this session) — energy-based detection of no-content recordings: empty transcripts, silence-hallucinations ("Thank you"/"Okay" on silence), and near-silent forgotten-toggles, using transcript DENSITY (chars/sec) and/or audio RMS — explicitly NOT duration (a long real session is fine; a silent one is cruft). Surface candidates with preview for one-click, REVERSIBLE delete (move to quarantine/Trash, never
rm; confirm before permanent). Background: a manual cleanup this session lost audio via a naive duration heuristic — energy, not length, is the signal, and deletion must be reversible.
- Storage — disk by recordings/models/db, trend, oldest-recording date, total GB.
Data sources & tech notes (for the implementer)
- Extend the existing
get_transcription_stats command + the transcriptions table (duration_seconds, created_at, text/raw_text, transcription_model_name, enhancement_*) rather than new infra; storage sizes from the Recordings/models dirs.
- Charts: household standard shadcn-svelte Charts / LayerChart (Tier 1 per rules-library/svelte/20-svelte-charting.md), CSS-variable colours
var(--chart-1..5); NOT Chart.js/ECharts. The contribution heatmap may need a small custom grid or LayerChart calendar.
- New Settings pane (or expanded Overview), shadcn-svelte + design tokens (frontend-design skill, P11/P12). Read-only except the cleanup action. Fully local, no external calls.
Test Requirements
Rust tests for the stats aggregation (counts, density, time buckets) on a seeded DB; frontend tests for chart rendering and the cruft-finder selection/quarantine flow (incl. reversibility and energy-not-duration thresholds).
Acceptance (outcomes)
The user can see dictation activity, output/impact, throughput, model usage, and patterns at a glance, and can safely find and remove no-energy cruft (reversibly).
Idea capture for a future PRD pass — what & why, not how. No suitable milestone exists yet; assign once a roadmap milestone is created.
Problem / why
The operator dictates heavily (18,000+ recordings, ~111 hours of audio over months) and loves stats, but the only surface today is the Overview "Summary" (count, total audio, enhanced count, avg duration) — thin. P13 future-ideas already lists a "Transcription analytics dashboard"; this scopes it. The value: turn the rich local history (SQLite) into insight, a sense of output/impact, and a practical cleanup tool — all on-device, consistent with privacy-first.
Proposed content (menu for the PRD to curate — not all required)
rm; confirm before permanent). Background: a manual cleanup this session lost audio via a naive duration heuristic — energy, not length, is the signal, and deletion must be reversible.Data sources & tech notes (for the implementer)
get_transcription_statscommand + thetranscriptionstable (duration_seconds, created_at, text/raw_text, transcription_model_name, enhancement_*) rather than new infra; storage sizes from the Recordings/models dirs.var(--chart-1..5); NOT Chart.js/ECharts. The contribution heatmap may need a small custom grid or LayerChart calendar.Test Requirements
Rust tests for the stats aggregation (counts, density, time buckets) on a seeded DB; frontend tests for chart rendering and the cruft-finder selection/quarantine flow (incl. reversibility and energy-not-duration thresholds).
Acceptance (outcomes)
The user can see dictation activity, output/impact, throughput, model usage, and patterns at a glance, and can safely find and remove no-energy cruft (reversibly).
Idea capture for a future PRD pass — what & why, not how. No suitable milestone exists yet; assign once a roadmap milestone is created.