Tracker TV
actif · depuis 2026Un suivi de films et de séries. Watchlist, progression saison par saison et épisode par épisode, et un catalogue qui se tient à jour tout seul depuis TMDB.
- ▸Elixir / Phoenix (API REST JSON)
- ▸Next.js (App Router, SSR), TypeScript
- ▸PostgreSQL 18
- ▸Meilisearch
- ▸Oban (jobs cron)
- ▸Prometheus, Grafana, GlitchTip




Ce que ça fait
On met un film ou une série dans sa watchlist, on coche une saison ou un seul épisode, et on lit sa progression depuis sa bibliothèque. Les séries se suivent épisode par épisode, revisionnages compris. La recherche répond films, séries, sagas et personnes depuis un seul champ dans le header. On suit une personne, et ses nouveaux films atterrissent tout seuls dans la watchlist.
Deux choses en font autre chose qu'un simple site : les imports et les webhooks. Un compte BetaSeries ou Simkl se connecte en OAuth2 et livre toute sa bibliothèque : films, séries, épisodes. Plex, Jellyfin et Tautulli envoient ce qu'on vient de finir à une adresse qui n'appartient qu'à soi, et c'est marqué comme vu ici, avec un interrupteur "ne touche pas à ce que je ne suis pas" pour le reste.
Tout est bilingue jusqu'aux réponses de l'API : français sur /, anglais sur
/en.
Comment c'est fait
Le dépôt est un monorepo avec une image Docker par application. Le backend est une API REST Phoenix (pas de LiveView, pas de HTML rendu côté serveur), et le frontend Next.js en est le seul consommateur, avec des appels côté serveur pour que les pages arrivent déjà rendues.
La partie que je trouve la plus intéressante, c'est le pipeline de catalogue. TMDB publie chaque jour des exports d'identifiants ; un pipeline Oban les ingère la nuit, enrichit chaque entité via l'API TMDB, et pousse ce qui a changé dans les index Meilisearch. Personne ne déclenche rien : le catalogue est à jour le lendemain matin, et les notifications tombent de la même passe : un film qui reçoit une date de sortie, un nouvel épisode, une série qui se termine.
PromEx alimente Prometheus et Grafana, GlitchTip récupère les erreurs via le protocole Sentry. Les deux sont optionnels, l'application tourne sans.
Pourquoi
J'ai essayé pas mal de trackers, et aucune de leurs interfaces ne m'a jamais convenu. Trop de clics pour cocher un épisode, une progression enterrée deux pages plus loin, une watchlist qui dit tout sauf la seule chose que je veux savoir : qu'est-ce que je regarde ce soir. Construire le mien était le seul moyen d'avoir les écrans que je voulais vraiment, à commencer par le prochain épisode de chaque série, devant moi, dès la première page.
Elixir et Phoenix m'ont donné une deuxième raison de m'y mettre : un catalogue qui se rafraîchit toutes les nuits, c'est exactement le genre de charge pour laquelle OTP et Oban sont taillés, et ça a transformé en vrai projet un langage que je n'avais jamais fait que lire.
Un client Android est en cours, sur la même API.