# Backlog Status vocabulary: `todo` · `doing` · `done`. ## v0.1 — MVP (this release) | # | Item | Status | Notes | |---|------|--------|-------| | 0 | Ask for credentials + instance URL, store safely | todo | Login screen → `users/token`; store tokens + OAuth client creds in EncryptedSharedPreferences, never the password; refresh-token single-flight on 401 | | 1 | List local videos (public) + user's own videos incl. private/internal | todo | Sidebar entries "Videos" (public, `videos?isLocal=true`) and "My videos" (`users/me/videos`); privacy badge on non-public items | | 2 | List local channels | todo | `video-channels?search=&searchTarget=local`; tap → channel videos | | 3 | Search local videos | todo | `videos?search=…&isLocal=true` | | 4 | Subscription videos | todo | `users/me/subscriptions/videos` | | 5 | Watch history (server) | todo | `users/me/history/videos` read-only | | 6 | Playback + report to server history | todo | ExoPlayer HLS (mp4 fallback); `POST videos/{shortUuid}/watching` every ~20 s | ## Next up (v0.2+) - Unified "accessible videos" feed: merge public-local + own private into one paged, deduplicated list (v0.1 keeps them as two sidebar entries). - Logout / "switch account" button on the Home screen. - Playback polish: resume from server-recorded position via `GET videos/{shortUuid}?userHistory=true` (verified working, returns `userHistory.currentTime`), next/previous video from list, focus current item in history screen. - Thumbnails of private/internal videos may 404 — verified on tube.jeena.net: instance thumbnail paths are publicly readable (HTTP 200 without auth); add a fallback poster only if other instances behave differently. - Security note for tube.jeena.net: object-storage (R2) media for private test videos is publicly readable without token ("private" only via URL obscurity). Flag to the instance admin; the app must not rely on this laxness. - 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 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.