Full-stack application to manage and stream movies and TV shows from local storage, deployed on a Kubernetes cluster.
NewFlix is a personal streaming application for managing and playing movies, TV shows and episodes stored locally. The interface resembles a classic streaming service: category browsing, detailed metadata pages, and an integrated video player.
Metadata (titles, posters, synopsis, genres) is automatically fetched from TheMovieDB API when adding media.

Main dashboard: two separate carousels for TV shows and movies, with posters fetched from TheMovieDB.

Movie list view with genre filter. Each entry displays the poster, title, year and associated genres.

Movie detail page: title, genres, synopsis, a scene photo and a direct play button.

TV show page with season selector and list of available episodes, each playable with one click.

Full-frame video player with progress bar, volume control and duration display. Files are streamed directly from local storage via the backend. Autoplay - at the end of the current episode, the next one launches automatically.
The application consists of three services:
The backend follows a standard Spring Boot layered architecture:
controllers/ → REST endpoints (movies, shows, genres, TMDB proxy)
services/ → business logic and file management
repositories/ → data access via Spring Data JPA
models/ → JPA entities + DTOs for the external API
The storage service (FileStorageService) handles uploading and referencing video files from a configured directory. OpenAPI documentation is available at /swagger-ui.html.
components/
├── main/ → landing / dashboard
├── list/ → movie and TV show lists
├── details/ → detail pages
├── api-add/ → add content from TheMovieDB
├── video-player/ → integrated video player
└── carousel/ → visual browsing
The application is packaged via Docker Compose (dev/local) and deployed on the homelab K3s cluster via a custom Helm chart.
The Kubernetes deployment requires specific Traefik configuration for large file uploads: extended timeouts to 3600s and removal of request body size limits.
Docker images are published to the private registry hosted on the cluster (registry.cluster).