| Age | Commit message (Expand) | Author |
| 2026-04-30 | refactor: split repository.Store into focused interfaces | Paul Buetow |
| 2026-04-30 | fix: exclude soft-deleted media from GetMediaByID | Paul Buetow |
| 2026-04-30 | fix: seed random source in thumbnail generator | Paul Buetow |
| 2026-04-30 | fix: add explicit permission checks to StreamMedia and DownloadMedia | Paul Buetow |
| 2026-04-29 | fix: correct LIKE escape in ListMedia | Paul Buetow |
| 2026-04-29 | fix: prevent GCWorker.Stop panic on nil ticker or double stop | Paul Buetow |
| 2026-04-29 | fix: prevent path traversal in UploadMedia | Paul Buetow |
| 2026-04-29 | fix: start HTTP server in main.go | Paul Buetow |
| 2026-04-29 | docs: create AGENTS.md documentation | Paul Buetow |
| 2026-04-29 | feat: create web PWA frontend | Paul Buetow |
| 2026-04-29 | feat: implement filesystem scanner | Paul Buetow |
| 2026-04-29 | feat(n9): Implement MediaService, AdminService, ProgressService, GCWorker | Paul Buetow |
| 2026-04-29 | feat: Create Dockerfile, k8s manifests, and Magefile.go with build/test/insta... | Paul Buetow |
| 2026-04-29 | feat(q9): implement REST handlers, streaming, uploads, shares, notes, progres... | Paul Buetow |
| 2026-04-29 | q9: add table-driven httptest coverage for REST handlers | Paul Buetow |
| 2026-04-29 | feat: implement bcrypt password hashing, session management, login/logout han... | Paul Buetow |
| 2026-04-29 | fix(model): add Permissions field to Set struct to sync with repository layer | Paul Buetow |
| 2026-04-29 | feat: SQLite schema migrations, repository interfaces, and concrete SQLite im... | Paul Buetow |
| 2026-04-28 | feat(k9): Define domain model structs (Media, User, Set, Tag, Session, Share,... | Paul Buetow |
| 2026-04-28 | h9: scaffold go project structure | Paul Buetow |