# Seen Frontend (Phase 1) UI-first implementation for `/seen/`, a self-hosted media control center. ## Stack - SolidJS + TypeScript + Vite - TailwindCSS - Vitest (unit) - Playwright (smoke e2e) - Docker + Nginx runtime ## Implemented in this phase - App shell with sidebar + top bar - Theme system (`dark`, `light`, `system`) with persistent storage - Full route contract scaffolded: - `/app/dashboard` - `/app/discover` - `/app/movies` - `/app/shows` - `/app/games` - `/app/watch-later` - `/app/watched` - `/app/downloads` - `/app/calendar` - `/app/recommendations` - `/app/library` - `/app/collections` - `/app/settings` - `/app/admin` - Polished `Dashboard`, `Discover`, `Games`, and `Queue` pages - Unified media cards and search flows for movies, shows, and games - Typed mock service layer compatible with future API replacement ## Environment Copy `.env.example` to `.env` if you want to customize defaults. ```bash cp .env.example .env ``` Required variables: - `VITE_APP_NAME` - `VITE_ENABLE_MOCK_API` (`true` for mock mode, `false` for backend mode) Optional mock controls: - `VITE_MOCK_API_LATENCY_MS` - `VITE_MOCK_FORCE_ERROR` Optional backend base URL: - `VITE_API_BASE_URL` (leave empty to use same-origin `/api` with proxying) ## Run locally ```bash npm install npm run dev ``` ## Tests Unit tests: ```bash npm run test:unit ``` `test:unit` forces mock API mode so local `.env` files do not accidentally switch the suite into live API mode. Playwright smoke tests: ```bash npm run test:e2e ``` ## Build ```bash npm run build npm run preview ``` ## Docker runtime (frontend) Build and run from repository root: ```bash docker compose up --build ``` App will be served at `http://localhost:8080`.