← Retour aux projets
Code En cours

NewFlix — Application de streaming personnel

Application full-stack pour gérer et diffuser films et séries depuis un stockage local, déployée sur cluster Kubernetes.

2024
Code
En cours
Spring Boot, Angular, PostgreSQL, Docker, Kubernetes, Helm, TheMovieDB

Présentation

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.

Page d’accueil

Page d'accueil NewFlix

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

Listes

Liste des films

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 film

Détail d'un film

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

Fiche série

Détail d'une série

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

Lecteur vidéo

Lecteur vidéo

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.

Architecture

L’application est composée de trois services :

  • Frontend Angular — SPA servie par Nginx, utilisant PrimeNG pour les composants UI et Slick Carousel pour la navigation visuelle
  • Backend Spring Boot — API REST exposant les ressources médias, proxyfiant les appels TheMovieDB, et servant les fichiers vidéo depuis le stockage local (upload jusqu’à 3 Go)
  • PostgreSQL — stockage des métadonnées (films, séries, épisodes, genres)

Backend

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.

Frontend

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

Déploiement

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