# Backlog Status vocabulary: `todo` · `doing` · `done`. ## v0.1 — MVP (implemented, pending device sign-off) | # | Item | Status | Notes | |---|------|--------|-------| | 0 | Ask for credentials + instance URL, store safely | done | Login screen → `users/token`; tokens + OAuth client creds in EncryptedSharedPreferences; refresh single-flight; show/paste password helpers; debug-only seed intent for automation | | 1 | Local videos + user's videos incl. private/internal | done | Home rows (SmartTube-style) + "My videos" grid with privacy badge; internal (instance-member) videos appear in listings too | | 2 | Local channels | done | MVP = user's own channels (`accounts/{me}/video-channels`); search-based local listing needs non-empty query — revisit in v0.2 | | 3 | Search local videos | done | Own screen in sidebar | | 4 | Subscription videos | done | Verified incl. remote (federated) channels | | 5 | Watch history (server) | done | read-only grid | | 6 | Playback + report to server history | done | ExoPlayer HLS w/ `videoFileToken` for non-public media; watching reports every ~20 s verified server-side; resume position retrievable | ## Next up (v0.2+) UX-review findings (Claude Opus 5.5, 2026-10-10) — implemented already: focus + scroll memory (player-as-overlay, per-destination grid state), 2-column grid, visible focus (tv-material Cards with scale/border), relative dates on cards, privacy badge only on My videos, password reveal + paste, overscan margins, sign-out entry, neutral form focus colors, always-focusable Sign in with inline validation. Deferred from review: - "Continue watching" refinement: auto-remove finished entries, exact resume (start playback at `userHistory.currentTime`, show "Resuming at 1:23" toast). - Trending/featured row on Home; rows per subscribed channel (SmartTube-like). - Video progress bars in ALL lists (needs per-video history merge; currently only Continue-watching has them). - Search-as-overlay vs sidebar entry; autoplay focus previews; playback speed; auto-next after video end; subtitles (captions) support; phone-QR-assisted login. - Drawer restructure proposal: Home / Channels (subs first) / Search / History / Account — decide together with merged-feed item below. - Unified "accessible videos" feed: merge public-local + own private into one paged, deduplicated list (v0.1 keeps Home rows + My videos). - Global local-channels browse (search endpoint rejects empty queries) — consider `GET /api/v1/video-channels` paged without search + host filter, or `search/video-*`. - Logout / switch account: sign-out entry exists; add switch-account (re-login screen without losing scroll state). - Release build: enable `minifyEnabled` + R8 rules, decide signing/versioning. - Thumbnails of private/internal videos may 404 — on some instances thumbnail paths are publicly readable while on others they need auth; add a fallback poster only if needed. - Security note (verified live against tube.jeena.net): some instances serve non-public media / thumbnails from object storage with only URL-based access control. The app must not rely on that laxness; always send auth headers / file tokens for non-public media. (Detail intentionally omitted from the public repo — report instance-specific findings privately.) - Verify `searchTarget=local` channel search behaves well for instances without federation; consider `search/video-channels` endpoint as an alternative. - Release build: enable `minifyEnabled` + R8 rules, decide on signing, versioning scheme. - Verify `searchTarget=local` channel search behaves well for instances without federation; consider `search/video-channels` endpoint as an alternative. - (Verified 2026-10-10 via the test account) history subscriptions + watching endpoints behave as documented; upload seeding uses **flat multipart form fields** on `/api/v1/videos/upload` (legacy), not a metadata JSON part — only relevant for seeding test data, the app itself doesn't upload. - Error UX: friendlier messages (offline, instance down, wrong credentials vs. expired token → re-login screen), retry buttons. - i18n: move user-facing strings to `strings.xml`, consider German + English. - Video detail screen (description, tags, views, duration, channel page link). ## Longer term - Multiple saved instances / switching between them. - Live streams playback (HLS live), premieres. - Subtitles/captions selection. - Downloads for offline watching (probably limited to public videos). - Comments viewing (read-only) — needs moderation-safe UI thinking. - `BACKLOG` triage rhythm: keep "Next up" ≤ 8 items. - Out of scope by user request (do not implement without asking): uploading, editing, subscribing/unsubscribing, deleting, creating channels/users/playlists.