Commit Graph
29 Commits
Author SHA1 Message Date
MichaelandClaude Opus 4.7 318683b6c4 fix: remplacement égaliseur à barres par waveform continue style Stitch
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 10:48:40 +02:00
MichaelandClaude Opus 4.7 e66f4cdf1d fix: suppression clignotement barre de lecture pendant la lecture
Extraction du composant MiniPlayer hors d'AudioPlayer pour stabiliser sa référence.
Avant: MiniPlayer était une fonction imbriquée recréée à chaque rendu (4x/sec avec
onTimeUpdate), React le traitait comme un nouveau type de composant → démontage/remontage →
animation slide-up rejouée → clignotement.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-29 08:15:10 +02:00
MichaelandClaude Opus 4.7 550bf81381 fix: fonds modals/panneau dashboard illisibles + clignotement mini-player + ombres cartes + avatar
- Ajout des variables CSS manquantes (--bg-primary, --bg-secondary, --radius-panel/--radius-card)
- Ajout des classes manquantes (premium-glass, neon-button, input-premium, shadow-glow-indigo, animate-aura)
- Fond du panneau latéral dashboard passé à --bg-elevated pour le décrocher du fond de page
- Fond solide sur le mini-player flottant + correction clignotement IntersectionObserver
- Ombres des cartes renforcées (shadow-card/shadow-card-hover)
- Contour de l'avatar profil amélioré (dégradé plus épais + glow + lettre en gradient)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 23:14:41 +02:00
MichaelandClaude Opus 4.7 a49e9f04d8 fix: clignotement mini-bar + bouton play noir + badge LU vert + visualiseur horizontal
- IntersectionObserver avec debounce 250ms pour éviter le clignotement
- Bouton play sur cartes: bg-black/85 text-white (plus de blanc sur blanc)
- Badge LU: fond vert solide (var(--accent-emerald))
- AudioVisualizer: forme d'onde horizontale style Stitch (canvas)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 13:52:17 +02:00
MichaelandClaude Opus 4.7 5c2a6438cd feat: redesign complet de l'application basé sur les maquettes Stitch
Refonte du design system (CSS variables, composants glass/card/button/badge),
nouvelle page PodcastDetails avec route /podcast/:id,
lecteur audio immersif avec visualiseur audio,
animations, thème dark/light, responsive mobile/desktop.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 13:22:25 +02:00
MichaelandClaude Opus 4.7 53b0e68cfd fix: remove spinning animation from podcast artwork
The artwork image in the inline player card should stay static,
not rotate during playback.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 16:11:03 +02:00
MichaelandClaude Opus 4.7 d5e3aa3be5 fix: artwork spin animation in inline player
Replace class-based animation toggle with inline animationPlayState
style. The transition-all class was conflicting with the CSS keyframe
animation, preventing the artwork from spinning when playing.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 15:41:10 +02:00
MichaelandClaude Opus 4.7 99c9c299de feat: reactive audio visualizer centered below inline player
Replace static CSS eq-bars with a real-time AudioVisualizer component
using the Web Audio API AnalyserNode. The visualizer is now centered
below the progress bar in the inline hero player, with 28 bars and
boosted mid-range frequencies for better speech visualization.

- AudioContext: wire AnalyserNode, expose getFrequencyData, add
  crossOrigin="anonymous" and key on the audio element
- AudioPlayer (inline): remove static eq-bars, add AudioVisualizer
- New AudioVisualizer component: requestAnimationFrame loop,
  smooth decay on pause, configurable bar count/height/gap

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 15:22:55 +02:00
Michael 656046b0bf feat: implement global CSS styling and create AudioPlayer component 2026-04-22 14:39:59 +02:00
MichaelandClaude Sonnet 4.6 5a9a0904a1 fix: audio persistence across navigation + LU badge at 90% + filter continuer section
- AudioPlayer is now purely presentational — no internal <audio> element or state.
  All playback state (currentTime, duration, volume, speed, mute, error, isResuming)
  comes from AudioContext, which holds the persistent <audio> at provider level.
  This prevents audio from cutting when navigating between pages.

- userId is synced into AudioContext via setUserId() so progress saving/loading
  works without the player needing to manage it locally.

- EpisodeCard: isCompleted now triggers at ≥90% listened (progressPercent >= 0.9)
  in addition to the isCompleted flag, so the LU badge appears correctly.
  Progress bar also hidden when ≥90%.

- Dashboard: episodesInProgress now excludes episodes at ≥90% listened,
  removing them from the "Continuer l'écoute" section once effectively finished.
  setUserId() called after user loads to wire context progress saving.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 15:08:04 +02:00
MichaelandClaude Sonnet 4.6 842ead6518 style: unify floating player design across all pages
Replace the old compact floating bar (h-88px rounded-2rem with expand
button) with the same clean mini-bar design as the Dashboard sticky
sub-bar — artwork + title + seeks + play + time + speed/volume/expand/
close + thin progress bar. The Dashboard hero inline player is kept.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 11:41:25 +02:00
MichaelandClaude Sonnet 4.6 6786226a6c feat: hero player, LU/NOUVEAU badges, metadata resync, sticky mini-bar
- Refresh podcast title/author/imageUrl/description on RSS sync (fixes
  legacy 'Unknown Podcast' records)
- Always-visible Resync button on Library cards
- LU badge on completed episodes, NOUVEAU badge on <7-day-old episodes
- AudioPlayer gains mode='inline' that embeds in the Dashboard hero card
- Floating player suppressed on /dashboard to avoid dual audio
- Sticky mini-bar appears via IntersectionObserver when inline player
  scrolls out of view (shares the same <audio> element)
- Fix: 'Reprendre' button called undefined setSelectedEpisode; now calls
  playEpisode
- Add progress field to Episode TS interface

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 11:33:47 +02:00
Michael dfd2cce761 feat: implement AudioPlayer component with playback controls, progress tracking, and persistence 2026-04-16 16:22:46 +02:00
Michael 5305f3e5f6 feat: add Trending page to display and subscribe to popular podcasts by genre 2026-04-16 16:18:47 +02:00
Michael f68989c228 feat: implement AudioPlayer component with playback controls, progress tracking, and persistence 2026-04-16 16:11:39 +02:00
Michael ad78a34cb4 feat: implement AudioPlayer component with playback controls, progress tracking, and persistence 2026-04-16 16:05:23 +02:00
Michael ea4fdb38d5 feat: implement AddPodcast page with RSS subscription and discovery search functionality 2026-04-16 15:45:20 +02:00
Michael acd9a1a2c5 feat: initialize global styles with theme variables, Tailwind configuration, and custom UI components 2026-04-16 15:39:32 +02:00
Michael 030ddfba81 feat: implement AudioPlayer component with playback controls, progress tracking, and persistent settings 2026-04-16 15:34:34 +02:00
Michael 17f2496dda feat: implement global audio player with playback controls, progress tracking, and persistent settings 2026-04-16 15:34:09 +02:00
Michael a993e2d658 feat: implement podcast discovery and management controllers and services 2026-04-16 14:57:49 +02:00
Michael aa54304bf3 feat: implement backend episode management and progress tracking controllers and routes 2026-04-16 14:48:32 +02:00
MichaelandClaude Haiku 4.5 686c4d9007 feat: use episode-specific images instead of podcast images
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>
2026-04-16 14:29:45 +02:00
MichaelandClaude Sonnet 4.6 b73f06c2b2 Refonte thème + fixes lecteur + suppression faux stats
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>
2026-04-16 14:26:19 +02:00
Michael 6e9da01488 feat: initialize frontend entry point with HTML boilerplate and custom fonts 2026-04-16 14:09:14 +02:00
Michael 8156b7b228 feat: implement AudioPlayer component with playback controls, speed adjustment, and progress tracking 2026-04-16 13:23:45 +02:00
Michael b2d0af639f feat: implement audio player component with progress tracking and add library page for managing subscriptions 2026-04-16 13:13:12 +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
Michael 068f4e7ef7 feat: implement React components - dashboard, auth pages, audio player UI 2026-04-16 09:56:17 +02:00