← Back to projects
Code In progress

NewFlix — Personal Streaming Application

Full-stack application to manage and stream movies and TV shows from local storage, deployed on a Kubernetes cluster.

2024
Code
In progress
Spring Boot, Angular, PostgreSQL, Docker, Kubernetes, Helm, TheMovieDB

Overview

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.

Home

NewFlix home page

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

Lists

Movie list

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

Movie detail

Movie detail page

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

TV show detail

TV show detail page

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

Video player

Video player

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.

Architecture

The application consists of three services:

  • Angular Frontend — SPA served by Nginx, using PrimeNG for UI components and Slick Carousel for visual browsing
  • Spring Boot Backend — REST API exposing media resources, proxying TheMovieDB calls, and serving video files from local storage (uploads up to 3 GB)
  • PostgreSQL — metadata storage (movies, TV shows, episodes, genres)

Backend

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.

Frontend

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

Deployment

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).