summaryrefslogtreecommitdiff
path: root/Biz/PodcastItLater/Episode.py
diff options
context:
space:
mode:
Diffstat (limited to 'Biz/PodcastItLater/Episode.py')
-rw-r--r--Biz/PodcastItLater/Episode.py40
1 files changed, 40 insertions, 0 deletions
diff --git a/Biz/PodcastItLater/Episode.py b/Biz/PodcastItLater/Episode.py
index abcff92..a070d19 100644
--- a/Biz/PodcastItLater/Episode.py
+++ b/Biz/PodcastItLater/Episode.py
@@ -210,6 +210,44 @@ class EpisodeDetailPage(Component[AnyChildren, EpisodeDetailPageAttrs]):
share_url = f"{base_url}/episode/{episode['id']}"
duration_str = UI.format_duration(episode.get("duration"))
+ # Build page title
+ page_title = f"{episode['title']} - PodcastItLater"
+
+ # Build meta tags for Open Graph
+ meta_tags = [
+ html.meta(property="og:title", content=episode["title"]),
+ html.meta(property="og:type", content="website"),
+ html.meta(property="og:url", content=share_url),
+ html.meta(
+ property="og:description",
+ content=f"Listen to this article read aloud. "
+ f"Duration: {duration_str}"
+ + (f" by {episode['author']}" if episode.get("author") else ""),
+ ),
+ html.meta(
+ property="og:site_name",
+ content="PodcastItLater",
+ ),
+ html.meta(property="og:audio", content=episode["audio_url"]),
+ html.meta(property="og:audio:type", content="audio/mpeg"),
+ ]
+
+ # Add Twitter Card tags
+ meta_tags.extend([
+ html.meta(name="twitter:card", content="summary"),
+ html.meta(name="twitter:title", content=episode["title"]),
+ html.meta(
+ name="twitter:description",
+ content=f"Listen to this article. Duration: {duration_str}",
+ ),
+ ])
+
+ # Add author if available
+ if episode.get("author"):
+ meta_tags.append(
+ html.meta(property="article:author", content=episode["author"]),
+ )
+
return UI.PageLayout(
# Show signup banner if user is not logged in
SignupBanner(
@@ -278,4 +316,6 @@ class EpisodeDetailPage(Component[AnyChildren, EpisodeDetailPageAttrs]):
user=user,
current_page="",
error=None,
+ page_title=page_title,
+ meta_tags=meta_tags,
)