Skip to content

feat: expose verified podcast video availability - #13

Merged
thedamfr merged 6 commits into
mainfrom
codex/explicit-podcast-availability
Sep 6, 2026
Merged

feat: expose verified podcast video availability#13
thedamfr merged 6 commits into
mainfrom
codex/explicit-podcast-availability

Conversation

@thedamfr

@thedamfr thedamfr commented Sep 4, 2026

Copy link
Copy Markdown
Owner

Résumé

  • affiche une métadonnée vidéo compacte uniquement sur les pages épisode, sans encart dédié ni tag agrégé sur /podcast
  • conserve la chaîne YouTube parmi les plateformes de diffusion de /podcast
  • n'affiche une carte YouTube sur une page épisode que si le lien vidéo direct de cet épisode a été réconcilié, sans secours vers la chaîne générique
  • sépare strictement les preuves par plateforme : enclosure MP4/HLS pour l’hébergeur, HLS + lien direct pour Apple, oEmbed par épisode pour Spotify et lien direct par épisode pour YouTube
  • met en cache le verdict Spotify sans ajouter d’appel externe au rendu HTTP
  • affiche les qualités éditorialement confirmées : Spotify HD sur S3E1, Spotify 4K et YouTube 4K sur S3E2
  • ajoute une micro-pastille discrète sur les cartes Spotify et YouTube concernées
  • corrige le contraste de la pastille YouTube avec un texte blanc sur rouge (4,76:1, WCAG AA)
  • utilise la miniature YouTube maxres 16/9 comme image Open Graph/Twitter, avec fallback sur l’image OG existante
  • rend /podcast/:season/:episode/ compatible par redirection vers l’URL canonique

Données et sécurité

  • ajoute la migration additive 010_add_podcast_video_availability.sql
  • valide strictement les URLs Spotify avant l’appel oEmbed afin d’éviter toute requête serveur vers une URL libre
  • valide l’hôte, l’identifiant, les dimensions et le ratio de la miniature YouTube avant de la rendre
  • conserve le fonctionnement dégradé lorsque PostgreSQL, le worker ou une API externe sont indisponibles

Vérifications

  • tests ciblés de la feature et des routes connexes : 28/28 réussis ; tests de régression finaux YouTube : 8/8 réussis
  • npm test : 150 exécutés, 137 réussis, 12 ignorés et 1 échec sur le test mémoire Jimp fluctuant ; ses 2 cas passent isolément avec --expose-gc
  • npm run build : réussi ; l’artefact CSS local Tailwind 4.1.11 n’est pas conservé face à la version 4.3.3 du dépôt, et les classes utilisées sont déjà présentes
  • migration 010 : appliquée avec succès sur PostgreSQL local après 001–009, puis reconnue comme déjà appliquée au second passage
  • git diff --check : réussi
  • contrôle Tailscale avec les données publiques réelles : /podcast n'affiche plus de tag vidéo et propose la chaîne YouTube parmi les plateformes ; S3E1 affiche Spotify (HD) sans carte YouTube ; S3E2 affiche Spotify (4K) · YouTube (4K) avec son lien direct
  • métadonnées de S3E2 contrôlées : miniature YouTube réelle dans og:image et twitter:image, dimensions 1280 × 720
  • URL avec slash final contrôlée : redirection 301 vers l’URL canonique

Aperçu

  • https://macbook-pro-de-damien.taild95457.ts.net:9446/podcast
  • https://macbook-pro-de-damien.taild95457.ts.net:9446/podcast/3/1
  • https://macbook-pro-de-damien.taild95457.ts.net:9446/podcast/3/2

L’aperçu est limité au tailnet et lit le RSS ainsi que les liens publics réels. Le flux public ne contient pas encore les enclosures MP4/HLS annoncées : le site officiel et Apple apparaîtront par épisode dès leur ajout, indépendamment de Spotify et YouTube.

Aucune production, variable Clever Cloud ou base distante n’a été modifiée.

@thedamfr
thedamfr marked this pull request as ready for review September 4, 2026 09:54
Copilot AI lite review requested due to automatic review settings September 4, 2026 09:54

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Some newly added UI copy/ARIA labeling is misleading (claims “direct links” where there are none) and the PRD update contains statements that should be clarified/rewritten to remain consistent and verifiable.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Pull request overview

Cette PR clarifie l’affichage de la disponibilité des formats (audio/vidéo) et des plateformes sur /podcast et sur les pages d’épisode, en distinguant l’“annonce” de disponibilité (résumé) des liens (cartes existantes), et en conditionnant l’annonce YouTube à la présence d’un lien vidéo résolu.

Changes:

  • Ajout de tests de route pour valider l’affichage des sections de disponibilité sur /podcast et /podcast/:season/:episode.
  • Ajout de deux sections de disponibilité dans le template podcast.hbs : une générale (audio + vidéo si chaîne configurée) et une spécifique épisode (plateformes à lien direct + vidéo si URL YouTube résolue).
  • Mise à jour du PRD YouTube pour refléter l’extension UI (v1.1) et les vérifications associées.
File summaries
File Description
test/routes/podcast-availability.test.js Nouveau test couvrant l’affichage “disponibilité plateformes / formats” sur la page podcast et sur une page épisode.
server/views/podcast.hbs Ajoute des sections dédiées qui distinguent audio/vidéo et conditionnent l’annonce de disponibilité à la configuration/résolution.
documentation/prd_youtube_podcast.md Met à jour le PRD (v1.1) pour documenter le comportement attendu et les vérifications effectuées.
Review details
  • Files reviewed: 3/3 changed files
  • Comments generated: 3
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread server/views/podcast.hbs Outdated
Comment on lines +306 to +307
<p class="mb-3 text-sm text-gray-300">Liens directs vers cet épisode :</p>
<ul class="flex flex-wrap gap-2" aria-label="Plateformes audio avec un lien direct vers cet épisode">
Comment thread documentation/prd_youtube_podcast.md Outdated
Comment on lines +142 to +147
Extension d'interface 1.1 :

- 13 tests ciblés des routes podcast, YouTube et mode dégradé passent.
- `npm test` exécute 141 tests : 128 passent, 12 intégrations externes sont
ignorées et le test mémoire Jimp fluctuant échoue à 58,83 Mo de croissance.
Les deux tests mémoire passent isolément avec GC explicite.
Comment thread documentation/prd_youtube_podcast.md Outdated
Comment on lines +148 to +150
- `npm run build` réussit. Le CSS généré par Tailwind 4.1.11 n'est pas conservé,
car l'artefact du dépôt vient de Tailwind 4.3.3 et toutes les classes utilisées
par le nouveau récapitulatif y sont déjà présentes.
@thedamfr thedamfr changed the title feat: clarify podcast format availability feat: expose verified podcast video availability Sep 4, 2026
@thedamfr
thedamfr merged commit a8b3435 into main Sep 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants