| Age | Commit message (Expand) | Author |
| 2026-05-21 | Implement NotesEditorScreen with auto-save debounce and clear confirmation (6b) | Paul Buetow |
| 2026-05-21 | Implement Tag picker with optimistic UI, autocomplete, and delete chips on Me... | Paul Buetow |
| 2026-05-21 | Wrap AudioPlayerScreen in audio_service for background playback (1b) | Paul Buetow |
| 2026-05-21 | Implement ContinueWatchingScreen with resume cards and progress routing (2b) | Paul Buetow |
| 2026-05-21 | Implement favorites toggle with optimistic UI in MediaDetailScreen and MediaG... | Paul Buetow |
| 2026-05-21 | Implement SearchFilterBar with debounce, type/favorites/sort filters for Medi... | Paul Buetow |
| 2026-05-21 | Implement PodcastListScreen and SubscribeDialog with podcast feed management ... | Paul Buetow |
| 2026-05-21 | Implement CreateShareDialog with expiry/max-uses, shareUrl abstraction (7b) | Paul Buetow |
| 2026-05-21 | Implement AudioPlayerScreen with just_audio, progress sync, and bearer auth (0b) | Paul Buetow |
| 2026-05-21 | Implement VideoPlayerScreen with chewie, progress sync, and bearer auth (za) | Paul Buetow |
| 2026-05-21 | Implement MediaDetailScreen with metadata, favorite toggle, player routing (ya) | Paul Buetow |
| 2026-05-21 | Add video/audio player packages, routes, and placeholder screens (task xa) | Paul Buetow |
| 2026-05-21 | Implement MediaGridScreen with grid, loading/empty/error states, and widget t... | Paul Buetow |
| 2026-05-21 | Implement SetsListScreen with Material 3 grid, pull-to-refresh, and widget te... | Paul Buetow |
| 2026-05-21 | Implement SettingsScreen with AuthGuard and settings persistence (sa) | Paul Buetow |
| 2026-05-21 | Add GET /api/v1/auth/count endpoint and first-run routing in Android app | Paul Buetow |
| 2026-05-21 | Implement BootstrapScreen with widget tests (qa) | Paul Buetow |
| 2026-05-20 | Implement DioPlayerApiClient with real HTTP bodies for core API methods (oa) | Paul Buetow |
| 2026-05-20 | Add go_router + Riverpod wiring and extract SOLID-clean screen/nav layers (na) | Paul Buetow |
| 2026-05-20 | Add DioClient with auth interceptors and refactor PlayerApiClient (ma) | Paul Buetow |
| 2026-05-20 | Extract app wiring from main.go into internal/app package (9a) | Paul Buetow |
| 2026-05-20 | Split FSScanner.Scan into FileDiscoverer, ProbeWorker, ScanWriter (ba) | Paul Buetow |
| 2026-05-20 | Move serveFileResult and serveRemuxed to api/stream.go (3a) | Paul Buetow |
| 2026-05-20 | Validate AbsPath in streamer and clean up partial podcast downloads (l9+k9) | Paul Buetow |
| 2026-05-20 | Merge j9+i9: LIKE wildcard escaping and CreateUser password validation | Paul Buetow |
| 2026-05-20 | Escape LIKE wildcards in search and validate password on CreateUser (j9+i9) | Paul Buetow |
| 2026-05-20 | Block bootstrap.html access after first user created (o9) | Paul Buetow |
| 2026-05-20 | Extract thumbnail generation into thumb.Generator interface (2a) | Paul Buetow |
| 2026-05-20 | Fix PlayerApiClient const constructor and Media.tags deserialization (d9+e9) | Paul Buetow |
| 2026-05-20 | Add doc comments to probe, auth, service packages (ja) | Paul Buetow |
| 2026-05-20 | Dispatch handleError via HTTPStatuser interface (4a) | Paul Buetow |
| 2026-05-20 | Guard dateTimeFromJson against malformed date strings (c9) | Paul Buetow |
| 2026-05-20 | Inject clock.Clock into api.Server and replace time.Now() in share/auth handlers | Paul Buetow |
| 2026-05-20 | Log os.Remove cleanup errors in service (0a) | Paul Buetow |
| 2026-05-20 | Check copyFile destination Close() error (u9) | Paul Buetow |
| 2026-05-20 | Buffer JSON before writing response in writeJSON (y9) | Paul Buetow |
| 2026-05-20 | Log setFeedBackoff UPDATE errors instead of swallowing (w9) | Paul Buetow |
| 2026-05-20 | Promote allowedSetIDs to accessHelper (da) | Paul Buetow |
| 2026-05-20 | Embed CoreStore in service store interfaces (ca) | Paul Buetow |
| 2026-05-20 | Make GCWorker.Start idempotent via sync.Once (x9) | Paul Buetow |
| 2026-05-19 | Introduce thumb.Resolver to decouple browseService from filesystem | Paul Buetow |
| 2026-05-19 | Extract thumbnail path helpers into internal/thumb | Paul Buetow |
| 2026-05-19 | Inject narrow api.Authenticator into NewMiddleware | Paul Buetow |
| 2026-05-19 | Remove nil streamer fallback in api.serveFileResult (DIP) | Paul Buetow |
| 2026-05-19 | Add HTTP retry + per-host backoff to podcast feed fetching | Paul Buetow |
| 2026-05-19 | Replace hardcoded public-path whitelist with route registry | Paul Buetow |
| 2026-05-19 | Complete s9 + aa: NewServerWithLogger returns error; share-page renderer extr... | Paul Buetow |
| 2026-05-19 | Require explicit TokenManager in auth service (DIP) | Paul Buetow |
| 2026-05-19 | Unify panic recovery into service.RecoverWorker | Paul Buetow |
| 2026-05-19 | Add compile-time interface checks for adminService and mediaStreamer | Paul Buetow |