Nexus — Journal culturel personnel
App web React pour tracker films, séries, livres, jeux et musique
ReactTypeScriptDev personnel
Application de journal culturel multi-catégories (films, séries, livres, jeux, musique) avec recherche multi-API, wishlist, profil et visualisations statistiques.
Rôle : Développeur (solo)Durée : 2025 - en cours
Voir le projet en ligne ↗
Contexte
D'où on part.
- Besoin personnel de tracker sa consommation culturelle dans un seul endroit
- 5 catégories de médias → 4 APIs différentes à normaliser
- Hébergement statique (GitHub Pages) → pas de backend, persistance localStorage
- Stack moderne : React 19 + Vite + TypeScript + Tailwind CSS v4
Objectif
Ce que je vise.
- Créer une vraie app utilisable au quotidien, pas juste un exercice
- Concevoir un pattern d'adapter unifié pour normaliser toutes les APIs
- Proposer une UI soignée avec des stats et un profil culturel visuel
- Déployer proprement sur GitHub Pages avec HashRouter
Ce que j'ai fait
Actions concrètes.
- Architecture adapter pattern : chaque API normalisée en NormalizedMedia
- Recherche multi-API avec filtres, pagination et dédoublonnage
- Journal (LogMediaModal) avec tags, notes, dates et états de lecture
- Wishlist persistée en localStorage
- Profil avec 'ADN culturel' (recharts), top 10 et export/import JSON
- Gestion des edge cases API (OpenLibrary TypedText, MusicBrainz 404...)
Outils & méthodes
Stack et pratiques utilisées.
- React 19
- Vite
- TypeScript
- Tailwind CSS v4
- TMDB API
- OpenLibrary
- RAWG
- MusicBrainz
- localStorage
- GitHub Pages
Résultats
Neutre et factuel.
- App déployée et utilisée au quotidien sur https://gardenny.github.io/nexus/
- 4 APIs intégrées et normalisées avec un pattern unifié
- Journal, wishlist et profil fonctionnels avec persistance locale
- Visualisations statistiques avec recharts (répartition, top 10)
Ce que j'ai appris
Synthèse perso.
- Normaliser des APIs hétérogènes avec un adapter pattern évite la dette technique
- Concevoir pour un usage réel pousse à soigner les edge cases
- TypeScript + localStorage suffisent pour une app personnelle robuste
- L'architecture initiale conditionne la facilité d'évolution
Projet similaire ?