# ROADMAP Goal: build a small, lightweight, container-based file browser web app that lets an admin mount arbitrary host folders and browse/stream/download their contents through a login-gated web UI, in light and dark themes. ## Priority 1 — Authentication & access control Objective: absolutely no content, file listing, download, or streaming is reachable without an authenticated session. Login is the only unauthenticated page/route (plus static login assets). - Login page (username/password) is the only page reachable while unauthenticated; every other route (file listing, file content, download, stream, admin) requires a valid server-side session. - Server-side session cookie: random session ID, HTTP-only + Secure + SameSite cookie, session record (with expiry, e.g. 7-day sliding window) stored in SQLite. Logout deletes the session server-side. - Passwords hashed with bcrypt (or equivalent), never stored/logged in plaintext. - Seed data on first startup: admin user `boss@zecevic-ninja.com`, password `Start1234!`, flagged `must_change_password = true`. - Any account (seeded admin or created user) with `must_change_password = true` is redirected to a forced "change your password" screen immediately after login and cannot reach any other page (including file browsing) until the password is changed. New password must differ from the temporary/old one and meet a minimum strength rule (documented in the plan). - Two roles: `admin` and `user`. Both roles can browse/download/stream all configured roots (no per-user folder restrictions in this cycle). Only `admin` can access the user-management screens (create user, reset a user's password / force `must_change_password`, delete/disable a user). - App assumes it runs behind a reverse proxy (nginx/Traefik/Caddy) for TLS; the app itself serves plain HTTP inside the container. This assumption and the required reverse-proxy config (incl. passing through HTTP Range headers) must be documented in `README.md`. ## Priority 2 — Folder browsing UI Objective: a light, simple, low-dependency UI (server-rendered HTML + minimal vanilla JS, no SPA build pipeline) with light/dark theme, for browsing configured root folders. - Multiple named roots are configurable via a config file / env var read at container startup (each entry: container path + display name). Roots are fixed host-to-container Docker volume mounts; adding/removing a root requires editing the config and restarting the container (a Docker/host constraint, not an app limitation) — this must be documented clearly in `README.md`. - After login, user sees the list of configured roots, can enter subfolders, see breadcrumb navigation, and go back up. All path handling must be strictly confined inside each root (no path traversal outside the mounted root, symlink escapes rejected). - Folder view lists files and subfolders (name, type, size, modified time for files). - Theme: light and dark mode, user-toggleable, minimal/clean styling (no heavy CSS/JS framework). ## Priority 3 — File download & video streaming (no transcoding) Objective: allow downloading any file and streaming video files directly, with zero server-side transcoding/encoding (server is slow), by serving raw bytes with HTTP Range support. - Download endpoint streams the raw file bytes as-is with correct `Content-Type` / `Content-Disposition`. - Video files are served with full HTTP `Range` request support (seek, partial content, resumable) so the browser's native `