- Stats dashboard redesign design and implementation plans - Episode detail and Anki card link design - Internal knowledge base restructure - Backlog tasks for testing, verification, and occurrence tracking
6.1 KiB
Stats Dashboard Redesign — Anime-Centric Approach
Date: 2026-03-14 Status: Approved
Motivation
The current stats dashboard tracks metrics that aren't particularly useful (words seen as a hero stat, word clouds). The data model now supports anime-level tracking (imm_anime, imm_videos with parsed_episode), subtitle line storage (imm_subtitle_lines), and word/kanji occurrence mapping (imm_word_line_occurrences, imm_kanji_line_occurrences). The dashboard should be restructured around anime as the primary unit, with sessions, episodes, and rollups as the core metrics.
Data Model (already in place)
imm_anime— anime-level: title, AniList ID, romaji/english/native titles, metadataimm_videos— episode-level:anime_id,parsed_episode,parsed_seasonimm_sessions— session-level: linked to videoimm_subtitle_lines— line-level: linked to session, video, animeimm_word_line_occurrences/imm_kanji_line_occurrences— word/kanji → line mappingimm_media_art— cover art +episodes_totalimm_daily_rollups/imm_monthly_rollups— aggregated metricsimm_words— POS data:part_of_speech,pos1,pos2,pos3
Tab Structure (5 tabs)
1. Overview
Hero Stats (6 cards):
- Watch time today
- Cards mined today
- Sessions today
- Episodes watched today
- Current streak (days)
- Active anime (titles with sessions in last 30 days)
14-day Watch Time Chart: Bar chart (keep existing).
Streak Calendar: GitHub-contributions-style heatmap, last 90 days, colored by watch time intensity.
Tracking Snapshot (secondary stats): Total sessions, total episodes, all-time hours, active days, total cards.
Recent Activity Feed: Last 10 sessions grouped by day — anime title + cover art thumbnail, episode number, duration, cards mined.
Removed from Overview: 14-day words chart, "words today", "words this week" hero stats.
2. Anime (replaces Library)
Grid View:
- Responsive card grid with cover art
- Each card: title, progress bar (episodes watched /
episodes_total), watch time, cards mined - Search/filter by title
- Sort: last watched, watch time, cards mined, progress %
Anime Detail View (click into card):
- Header: cover art, titles (romaji/english/native), AniList link if available
- Progress: episode progress bar + "X / Y episodes"
- Stats row: total watch time, cards mined, words seen, lookup hit rate, avg session length
- Episode list: table of episodes (from
imm_videos), each showing episode number, session count, watch time, cards, last watched date - Watch time chart: bar chart over time (14d/30d/90d toggle)
- Words from this anime: top words learned from this show (via
imm_word_line_occurrences→imm_subtitle_lines→anime_id), clickable to vocab detail - Mining efficiency: cards per hour / cards per episode trend
3. Trends
Existing charts (keep all 9):
- Watch Time (min) — bar
- Tracked Cards — bar
- Words Seen — bar
- Sessions — line
- Avg Session (min) — line
- Cards per Hour — line
- Lookup Hit Rate (%) — line
- Rolling 7d Watch Time — line
- Rolling 7d Cards — line
New charts (6): 10. Episodes watched per day/week 11. Anime completion progress over time (cumulative episodes / total across all anime) 12. New anime started over time (first session per anime by date) 13. Watch time per anime (stacked bar — top 5 anime + "other") 14. Streak history (visual streak timeline — active vs gap periods) 15. Cards per episode trend
Controls: Time range selector (7d/30d/90d/all), group by (day/month).
4. Vocabulary
Hero Stats (4 cards):
- Unique words (excluding particles/noise via POS filter)
- Unique kanji
- New this week
- Avg frequency
Filters/Controls:
- POS filter toggle: hide particles, single-char tokens by default (toggleable)
- Sort: by frequency / last seen / first seen
- Search by word/reading
Word List: Grid/table of words — headword, reading, POS tag, frequency. Each word is clickable.
Word Detail Panel (slide-out or modal):
- Headword, reading, POS (part_of_speech, pos1, pos2, pos3)
- Frequency + first/last seen dates
- Anime appearances: which anime this word appeared in, frequency per anime
- Example lines: actual subtitle lines where the word was used
- Similar words: words sharing same kanji or reading
Kanji Section: Same pattern — clickable kanji grid, detail panel with frequency, anime appearances, example lines, words using this kanji.
Charts: Top repeated words bar chart, new words by day timeline.
5. Sessions
Session List: Chronological, grouped by day.
- Each row: anime title + episode, cover art thumbnail, duration (active/total), cards mined, lines seen, lookup rate
- Expandable detail: session timeline chart (words/cards over time), event log (pauses, seeks, lookups, cards mined)
- Filters: by anime title, date range
Based on existing hidden SessionsTab component with anime/episode context added.
Backend Changes Needed
New API Endpoints
GET /api/stats/anime— list all anime with episode counts, watch time, progressGET /api/stats/anime/:animeId— anime detail: episodes, stats, recent sessionsGET /api/stats/anime/:animeId/words— top words from this animeGET /api/stats/vocabulary/:wordId— word detail: POS, frequency, anime appearances, example lines, similar wordsGET /api/stats/kanji/:kanjiId— kanji detail: frequency, anime appearances, example lines, words using this kanji
Modified API Endpoints
GET /api/stats/vocabulary— add POS fields to response, support POS filtering query paramGET /api/stats/overview— add episodes today, active anime countGET /api/stats/daily-rollups— add episode count data for new trend charts
New Query Functions
- Anime-level aggregation: episodes per anime, watch time per anime, cards per anime
- Word/kanji occurrence lookups: join through
imm_word_line_occurrences→imm_subtitle_lines→imm_anime - Streak calendar data: daily activity map for last 90 days
- Episode-level trend data: episodes per day for trend charts
- Stacked watch time: per-anime daily breakdown