EpisodeCard and AudioPlayer now display episode.imageUrl when available,
falling back to the podcast image only if the episode has none.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
AudioPlayer:
- Supprime section vitesse de lecture
- -30s/+30s (compact et expanded), avec icônes RotateCcw/RotateCw
- Rewind compact passé de -15s à -30s
Thème:
- globals.css refait : animations slide-up/fade-in/reveal définies, glass card améliorée
- Background plus profond (#080d1a), glow/blur plus soignés
- Boutons neon-button avec hover translateY
Corrections:
- Supprime Settings2 (bouton sans action) dans Library
- Supprime stat "2.4k mins listened" inventée dans Navigation
- Stats Library passent de 3 à 2 colonnes (réelles uniquement)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- podcastController: createPodcastFromRss sans feedData (parse le RSS réel)
- Discover.tsx: stub vide (remplacé par /trending et /add)
- App.tsx + Navigation.tsx: conflits déjà résolus
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
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>
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>
- 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>
- 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>
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>
- 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>
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>