Skip to content

Statistics / Insights dashboard pane — visual dictation analytics #90

@poodle64

Description

@poodle64

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions