Commit Graph
30 Commits
Author SHA1 Message Date
Michael f50d1072a9 feat: add Library page to manage and unsubscribe from podcast subscriptions 2026-04-16 13:00:10 +02:00
Michael 2b971f97b3 feat: implement main navigation component and integrate protected routing in App structure 2026-04-16 12:57:37 +02:00
Michael b06298d80e chore: upgrade MongoDB to v8 and implement health checks for database services with conditional startup dependencies 2026-04-16 12:51:14 +02:00
Michael 34db9e2542 feat: implement podcast controller for subscription management, discovery, and search functionality 2026-04-16 12:46:22 +02:00
Michael 7e3b43fb5c chore: update mongodb version, rename network, and parameterize app port in docker-compose 2026-04-16 12:42:49 +02:00
Michael 57da7ad50b refactor: rename app service to podcastic and remove explicit image tag in docker-compose.yml 2026-04-16 12:42:15 +02:00
Michael 2c2d7501e6 feat: add Discover page component and define image tag in docker-compose 2026-04-16 12:39:33 +02:00
Michael f356b82258 Please provide the changes or the files you would like me to summarize. 2026-04-16 12:37:22 +02:00
Michael 2d5e90a441 feat: add Trending and AddPodcast pages for podcast discovery and subscription management 2026-04-16 12:35:52 +02:00
Michael f48789dfde feat: implement application routing with protected routes and sidebar navigation component 2026-04-16 12:27:58 +02:00
MichaelandClaude Sonnet 4.6 a8cef14226 Rend l'abonnement idempotent (409 → 200)
Abonner deux fois au même podcast retourne 200 au lieu de 409.
Tous les messages d'erreur traduits en français.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:40:22 +02:00
MichaelandClaude Sonnet 4.6 eb6821ca76 Corrige TypeError dans subscribeFromDiscovery
result.podcast est un plain object (toJSON()), appeler .toJSON() dessus crashe.
Fix: refetch le podcast depuis MongoDB après création pour avoir un vrai Document Mongoose.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:29:55 +02:00
MichaelandClaude Sonnet 4.6 84c5cd6363 Migre eslint v8 → v9 (flat config), supprime les dépréciations
- eslint 8 → 9, @typescript-eslint/* → typescript-eslint (package unifié)
- Remplace .eslintrc.json par eslint.config.mjs (backend) et eslint.config.js (frontend)
- Ajoute eslint-plugin-react, eslint-plugin-react-hooks, globals (frontend)
- Supprime rimraf@3, @humanwhocodes/* qui étaient des deps transitives d'eslint v8

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:27:46 +02:00
MichaelandClaude Sonnet 4.6 3914f28e19 Corrige subscribe 500 et trending 500
- subscribe: passe undefined à createPodcastFromRss pour qu'il parse vraiment le flux RSS (bug: on passait feedData avec episodes:[] vide)
- trending/discover: retournent [] au lieu de 500 si l'API iTunes échoue
- trending: utilise l'iTunes RSS officiel (itunes.apple.com/fr/rss/toppodcasts) au lieu de l'API Marketing Tools instable

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:24:44 +02:00
MichaelandClaude Sonnet 4.6 59144e9ce6 Remplace PodcastIndex par iTunes Search API (gratuit, sans clé)
- Réécriture complète de podcastIndexService avec l'API iTunes d'Apple
- Recherche de podcasts : itunes.apple.com/search (gratuit, pas d'auth)
- Tendances : top podcasts France via rss.applemarketingtools.com + lookup RSS URLs
- Suppression des vérifications isConfigured() dans le contrôleur

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:21:26 +02:00
MichaelandClaude Sonnet 4.6 9a3171f640 Ajoute un champ RSS URL dans la page Découvrir
Permet d'abonner un podcast directement par son URL de flux RSS, sans passer par la recherche PodcastIndex.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:19:40 +02:00
MichaelandClaude Sonnet 4.6 c7a5c171d1 Traduit l'UI en français et corrige les bugs de recherche/abonnement
- Traduit toutes les pages et composants en français (Dashboard, Login, Discover, Navigation, Header, EpisodeCard, AudioPlayer)
- Corrige l'erreur 500 sur /api/podcasts/discover : z.coerce.number() au lieu de z.number() pour limit/offset (paramètres query string)
- Corrige l'abonnement manuel via URL RSS : crée le podcast depuis le flux RSS au lieu de renvoyer 400

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:15:42 +02:00
MichaelandClaude Haiku 4.5 00d92fc668 fix: switch backend to CommonJS to fix ESM module resolution
Remove 'type: module' and use CommonJS output so Node.js resolves
imports without requiring explicit .js extensions.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-16 11:01:48 +02:00
MichaelandClaude Haiku 4.5 ffb85ade90 fix: add @types/cors and fix jwt expiresIn type
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-16 10:58:11 +02:00
MichaelandClaude Haiku 4.5 faec1f37b4 fix: use npm install instead of npm ci (no lockfile in repo)
Also unignore package-lock.json for future deterministic installs.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-16 10:55:28 +02:00
MichaelandClaude Haiku 4.5 1822ab1afe fix: single container without nginx — Express serves frontend
- Remove separate backend/ and frontend/ Dockerfiles
- Add root Dockerfile (3-stage: frontend build → backend build → runtime)
- Frontend static files served by Express from /public
- Simplify docker-compose to 3 services: mongodb, redis, app (port 3579)
- Fix vite proxy not to strip /api prefix from paths
- Default API URL to relative /api instead of hardcoded localhost

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-16 10:43:06 +02:00
Michael a8787857b5 fix: add proper Dockerfiles for backend and frontend, simplify docker-compose 2026-04-16 10:28:40 +02:00
Michael 547de27eed simplify: use official Docker images with clean docker-compose.yml - no complex Dockerfile needed 2026-04-16 10:22:04 +02:00
Michael 65d43c3afb fix: simplify docker-compose.unraid.yml for better Unraid compatibility 2026-04-16 10:15:15 +02:00
Michael 73585213ba feat: add Unraid single-container deployment with docker-compose and comprehensive setup guide 2026-04-16 10:13:08 +02:00
Michael 9bb61cc8a7 feat: implement podcast discovery with PodcastIndex API integration and Discover page 2026-04-16 10:01:05 +02:00
Michael d7f158a498 docs: add comprehensive getting started guide and linting configuration 2026-04-16 09:56:48 +02:00
Michael 068f4e7ef7 feat: implement React components - dashboard, auth pages, audio player UI 2026-04-16 09:56:17 +02:00
Michael 8c00a1b0f5 feat: implement authentication and core API endpoints - auth, podcasts, episodes 2026-04-16 09:55:15 +02:00
Michael 8df1161023 feat: initialize Podcastic project foundation - setup backend and frontend 2026-04-16 09:53:36 +02:00