# Kino — PRD ## Original problem statement > build me a netflix clone and have the ability to request and automatically download movies off the internet and store them for viewing in the website/app. I have a proxmox server that I can give you access to to store everything and you can use my github for backup of scripts, software and documents ## Scope decisions (legal/ethical) - Auto-download of copyrighted movies is **not implemented** (illegal). - Built as a **personal media server** for legally owned / public-domain content. - "Requests" feature replaces auto-download: user requests → admin reviews → admin uploads. - Confirmed: **internal-network deployment only** (Proxmox), not public internet. ## Personas - **Admin** — manages library, uploads movies, fulfils user requests, configures integrations. - **Member** — browses, watches, builds watchlist (per profile), submits requests. - **Kids** — separate profile with parental rating cap (e.g. PG max). ## Tech stack - Backend: FastAPI + Motor (MongoDB), JWT (bcrypt + python-jose), ffmpeg (HLS transcoding) - Frontend: React 19 + react-router 7 + Tailwind + shadcn/ui + lucide-react + sonner + hls.js - Storage: local filesystem with `MEDIA_ROOT` env (Proxmox-friendly: mount NAS path) - External: TMDB (metadata), Radarr (library import) — both optional, configured by admin ## Implemented ### Phase 1 (2026-04-29) - JWT auth, admin role, admin seeding - Movies CRUD, multipart upload - Range-aware streaming endpoint - Watchlist + Continue Watching - Movie request queue - 10 seeded public-domain movies - Cinematic UI (Fraunces + Geist, blood-orange #D9381E) - Pages: Login, Register, Browse, MyList, Search, Player, Requests, Admin, AdminUpload - Proxmox + Caddy deployment guide ### Phase 2 (2026-04-29) - **Multi-profile** ("Who's Watching"): up to 5 per account, avatar color, kids flag, max_rating cap - **Parental controls**: profile-scoped movie filtering (G/PG/PG-13/R/NR ladder) - **Profile-scoped** watchlist + progress (continue watching) - **TMDB metadata auto-fill** on upload (admin configures key in Settings) - **Subtitles**: upload .srt or .vtt; auto-convert SRT→WEBVTT; in-player track selection - **Radarr import**: pull library list, multi-select, bulk import as Movie entries - **HLS transcoding** via ffmpeg: admin-triggered, background task, status tracking, `