From 5360e89457b057eb4faff03d995116ffaef4d543 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 29 Apr 2026 20:31:40 +0300 Subject: docs: create AGENTS.md documentation --- AGENTS.md | 265 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ PLAN.md | 22 +++--- 2 files changed, 276 insertions(+), 11 deletions(-) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..b558dd9 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,265 @@ +# KISS Media Player — Agent Documentation + +This file is written for coding agents working on the `kiss-media-player` project. + +--- + +## Architecture Overview + +The project is a **self-hosted media player** designed for simplicity (KISS): minimal dependencies, no frontend frameworks, interface-driven Go code for easy testing. + +### Backend + +- **Language / Runtime:** Go 1.23 +- **HTTP Server:** `net/http` stdlib only; `http.ServeMux` with pattern matching +- **Database:** SQLite via `modernc.org/sqlite` +- **Media Processing:** `ffmpeg` / `ffprobe` installed in runtime container +- **Password Hashing:** `golang.org/x/crypto/bcrypt` + +**Layered architecture:** + +| Layer | Package | Role | +|-------|---------|------| +| Entrypoint | `cmd/mediaplayer` | Flags, config, dependency wiring, server start | +| API / Transport | `internal/api` | `Server` struct holds `http.ServeMux`, route table, middleware, handlers | +| Service | `internal/service` | Business logic: `MediaService`, `AdminService`, `ProgressService`, `GCWorker` | +| Repository | `internal/repository` | `Store` interface (composite of per-entity repos); concrete SQLite in `sqlite.go` | +| Domain | `internal/model` | Pure structs (`Media`, `User`, `Set`, `Session`, etc.) — zero external deps | +| Utilities | `internal/auth`, `internal/scanner`, `internal/probe`, `internal/thumb`, `internal/clock`, `internal/setassign` | Hasher, session manager, filesystem scanner, ffprobe wrapper, thumbnail generator, clock abstraction, permission helper | + +All external dependencies are injected via constructors (e.g., `NewServer`, `NewMediaService`, `NewFSScanner`). Hand-written mocks live in `internal/repository/mock.go` and `internal/service/mock.go`. + +### Frontend + +- **Stack:** Vanilla ES modules, no bundler or build step +- **Pages:** `index.html` (SPA), `login.html`, `bootstrap.html` +- **Styling:** CSS Custom Properties (`var(--*)`) defined in `web/css/theme.css`; utility/component/layout styles in separate files +- **PWA:** `manifest.json` + `web/sw.js` caches static assets for offline usage +- **Media Player:** HTML5 `