Skip to content

Podcast Discovery Adapter (Phase 2) #3

@bradygaster

Description

@bradygaster

Overview

Implement podcast discovery via curated RSS feed list to capture industry narrative, thought leadership, and Aspire mentions in .NET podcast ecosystem. Provides long-form discussion signals missing from text-based sources.

Background

Per gap analysis:

  • Current blind spot: Industry narrative at 20% completeness
  • Podcast value: 5-15 episodes/month with Aspire mentions, high-quality thought leadership signals
  • Target podcasts: .NET Rocks, The .NET Core Show, Coding Blocks, Hanselminutes, etc.
  • Signal types: Expert opinions, adoption stories, community sentiment, deep dives

Requirements

  • Implement PodcastSourceAdapter extending SourceAdapter interface
  • Use RSS parser (already installed: rss-parser) to fetch podcast feeds
  • Curated feed list (hardcoded or config file): .NET Rocks, The .NET Core Show, Coding Blocks, Hanselminutes, The 6 Figure Developer, etc.
  • Filter episodes by keyword in title/description: "aspire", "dotnet aspire", ".net aspire"
  • Extract: episode title, podcast name, URL, publish date, description, duration, audio URL
  • Map to ContentItem type with channel="podcast:{podcastName}", source="podcast"
  • Add metadata: { duration: string, audioUrl: string, keywords: string[] }\
  • Optional future enhancement: Podchaser API integration for search/discovery (requires API key)
  • Handle malformed RSS feeds gracefully (skip invalid entries, log warning)

Squad SDK Integration

  • Adapter registration: Auto-discovered by SourceRegistry
  • Validation logic: PodcastSourceAdapter.validate() returns true (no env vars needed for RSS)
  • Configuration: Hardcoded podcast feed list in adapter (easy to extend)

Acceptance Criteria

  • AC1: Adapter discovers 2+ Aspire-related podcast episodes per run (if available)
  • AC2: Each episode maps to ContentItem with: id, title, url, author (podcast name), publishedAt, duration, audioUrl
  • AC3: Episodes appear in reports with channel="podcast:{podcastName}"
  • AC4: Keyword filtering reduces false positives (only episodes mentioning Aspire in title/description)
  • AC5: If an RSS feed is unreachable, adapter logs warning and continues with remaining feeds
  • AC6: Duplicate episodes detected (same audio URL or episode URL = same canonical hash)

Dependencies

Depends on: Issue #1 (Architecture Refactor)

Assigned To

  • Kima (Content scout, podcast ecosystem knowledge)

Estimated Effort

1 session

  • Implement PodcastSourceAdapter with curated feed list
  • Test keyword filtering accuracy
  • Validate RSS parsing for all target podcasts

Metadata

Metadata

Assignees

No one assigned

    Labels

    go:needs-researchNeeds investigationsquadSquad triage inbox — Lead will assign to a membersquad:freamonAssigned to Freamon (Lead / Editor-in-Chief)

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions