mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-03-20 12:11:28 -07:00
- 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
2.3 KiB
2.3 KiB
Episode Detail & Anki Card Link — Design
Date: 2026-03-14 Status: Approved
Motivation
The anime detail page shows episodes and cards mined but lacks drill-down into individual episodes. Users want to see per-episode stats (sessions, words, cards) and link directly to mined Anki cards.
Design
1. Episode Expandable Detail
Click an episode row in EpisodeList or AnimeCardsList → expands inline:
- Sessions list for this episode (sessions linked to video_id)
- Cards mined list — timestamps + "Open in Anki" button per card (when note ID available)
- Top words from this episode (word occurrences scoped to video_id)
2. Anki Note ID Storage
- Extend
recordCardsMinedcallback to accept note IDs:recordCardsMined(count, noteIds) - Store in CARD_MINED event payload:
{ cardsMined: 1, noteIds: [12345] } - Proxy already has note IDs in
pendingNoteIds— pass through callback chain - Polling has note IDs from
newNoteIds— same treatment - No schema change — note IDs stored in existing
payload_jsoncolumn onimm_session_events
3. "Open in Anki" Flow
- New endpoint:
POST /api/stats/anki/browse?noteId=12345 - Calls AnkiConnect
guiBrowsewith querynid:12345 - Opens Anki's card browser filtered to that note
- Frontend button hits this endpoint
4. Episode Words
- New query:
getEpisodeWords(videoId)— likegetAnimeWordsbut filtered by video_id - Reuse AnimeWordList component pattern
5. Backend Changes
Modified files:
src/anki-integration/anki-connect-proxy.ts— pass note IDs through recordCardsAdded callbacksrc/anki-integration/polling.ts— pass note IDs through recordCardsAdded callbacksrc/anki-integration.ts— update callback signaturesrc/core/services/immersion-tracker-service.ts— accept and store note IDs in recordCardsMinedsrc/core/services/immersion-tracker/query.ts— add getEpisodeWords, getEpisodeSessions, getEpisodeCardEventssrc/core/services/stats-server.ts— add episode detail and anki browse endpoints
6. Frontend Changes
Modified files:
stats/src/components/anime/EpisodeList.tsx— make rows expandablestats/src/components/anime/AnimeCardsList.tsx— make rows expandable
New files:
stats/src/components/anime/EpisodeDetail.tsx— inline expandable content