Application full-stack pour gérer et diffuser films et séries depuis un stockage local, déployée sur cluster Kubernetes.
NewFlix est une application de streaming personnel permettant de gérer et lire des films, séries et épisodes stockés en local. L’interface ressemble à celle d’un service de streaming classique : navigation par catégories, fiches détaillées avec métadonnées, lecteur vidéo intégré.
Les métadonnées (titres, affiches, synopsis, genres) sont récupérées automatiquement depuis TheMovieDB API lors de l’ajout d’un média.

Dashboard principal : deux carousels distincts pour les séries et les films, avec les affiches récupérées depuis TheMovieDB.

Vue liste des films avec filtre par genre. Chaque entrée affiche l’affiche, le titre, l’année et les genres associés.

Fiche détaillée d’un film : titre, genres, synopsis, photo de scène et bouton de lecture directe.

Fiche série avec sélecteur de saison et liste des épisodes disponibles, chacun accessible en un clic.

Lecteur vidéo plein cadre avec barre de progression, contrôle du volume et affichage de la durée. Les fichiers sont streamés directement depuis le stockage local via le backend. Autoplay - à la fin de l’apisode en cours, le suivant est lancé automatiquement.
L’application est composée de trois services :
Le backend suit une architecture en couches classique Spring Boot :
controllers/ → endpoints REST (films, séries, genres, proxy TMDB)
services/ → logique métier et gestion des fichiers
repositories/ → accès données via Spring Data JPA
models/ → entités JPA + DTOs pour l'API externe
Le service de stockage (FileStorageService) gère l’upload et le référencement des fichiers vidéo depuis un répertoire configuré. La documentation OpenAPI est disponible à /swagger-ui.html.
components/
├── main/ → landing / dashboard
├── list/ → listes films et séries
├── details/ → fiches détaillées
├── api-add/ → ajout depuis TheMovieDB
├── video-player/ → lecteur vidéo intégré
└── carousel/ → navigation visuelle
L’application est packagée via Docker Compose (dev/local) et déployée sur le cluster K3s homelab via un chart Helm maison.
Le déploiement Kubernetes nécessite une configuration spécifique de Traefik pour les uploads de gros fichiers : timeout étendu à 3600s et désactivation des limites de taille de corps de requête.
Les images Docker sont publiées sur le registry privé hébergé sur le cluster (registry.cluster).