diff --git a/src/components/MusicDetailContent.tsx b/src/components/MusicDetailContent.tsx
index 1244da89..e978e0f7 100644
--- a/src/components/MusicDetailContent.tsx
+++ b/src/components/MusicDetailContent.tsx
@@ -105,7 +105,7 @@ function TrackDetail({ event }: { event: NostrEvent }) {
-
Track
+ Track Details
{/* Hero: artwork + info side by side */}
@@ -300,7 +300,7 @@ function PlaylistDetail({ event }: { event: NostrEvent }) {
- Playlist
+ Playlist Details
{/* Hero */}
diff --git a/src/components/PodcastDetailContent.tsx b/src/components/PodcastDetailContent.tsx
index 6b88ba3a..648e2cfd 100644
--- a/src/components/PodcastDetailContent.tsx
+++ b/src/components/PodcastDetailContent.tsx
@@ -107,7 +107,7 @@ function EpisodeDetail({ event }: { event: NostrEvent }) {
- Episode
+ Episode Details
{/* Hero: artwork + info side by side */}
@@ -315,7 +315,7 @@ function TrailerDetail({ event }: { event: NostrEvent }) {
- Trailer
+ Trailer Details
{/* Hero */}
diff --git a/src/pages/PostDetailPage.tsx b/src/pages/PostDetailPage.tsx
index 270e92e6..22a73a95 100644
--- a/src/pages/PostDetailPage.tsx
+++ b/src/pages/PostDetailPage.tsx
@@ -56,6 +56,18 @@ const MUSIC_KINDS = new Set([36787, 34139]);
const PODCAST_KINDS = new Set([30054, 30055]);
/** NIP-52 Calendar Events. */
const CALENDAR_EVENT_KINDS = new Set([31922, 31923]);
+
+/** Map a kind number to a human-readable shell title for the loading state. */
+function shellTitleForKind(kind?: number): string {
+ if (!kind) return 'Loading...';
+ if (MUSIC_KINDS.has(kind)) return 'Track Details';
+ if (PODCAST_KINDS.has(kind)) return 'Episode Details';
+ if (CALENDAR_EVENT_KINDS.has(kind)) return 'Event Details';
+ if (FOLLOW_PACK_KINDS.has(kind)) return 'Follow Pack';
+ if (kind === LIVE_STREAM_KIND) return 'Live Stream';
+ return 'Post Details';
+}
+
import { useReplies } from '@/hooks/useReplies';
import { useComments } from '@/hooks/useComments';
import { CommentContext } from '@/components/CommentContext';
@@ -194,16 +206,17 @@ export function PostDetailPage({ eventId, relays, authorHint }: PostDetailPagePr
title: (event || retryEvent) ? `Post Details - ${config.appName}` : `Loading... - ${config.appName}`,
});
+ const resolvedEvent = event || retryEvent;
+ const detailTitle = shellTitleForKind(resolvedEvent?.kind);
+
if (isLoading) {
return (
-
+
);
}
- const resolvedEvent = event || retryEvent;
-
if (isError || !resolvedEvent) {
return (
@@ -216,7 +229,7 @@ export function PostDetailPage({ eventId, relays, authorHint }: PostDetailPagePr
}
return (
-
+
@@ -232,15 +245,18 @@ export function AddrPostDetailPage({ addr, relays }: AddrPostDetailPageProps) {
const resolvedEvent = event || retryEvent;
+ // We know the kind from the addr before the event loads — use it for the shell title
+ const loadingTitle = shellTitleForKind(addr.kind);
+
useSeoMeta({
title: resolvedEvent
- ? `${resolvedEvent.tags.find(([n]) => n === 'title')?.[1] || resolvedEvent.tags.find(([n]) => n === 'name')?.[1] || 'Post Details'} - ${config.appName}`
- : `Loading... - ${config.appName}`,
+ ? `${resolvedEvent.tags.find(([n]) => n === 'title')?.[1] || resolvedEvent.tags.find(([n]) => n === 'name')?.[1] || loadingTitle} - ${config.appName}`
+ : `${loadingTitle} - ${config.appName}`,
});
if (isLoading) {
return (
-
+
);
@@ -248,7 +264,7 @@ export function AddrPostDetailPage({ addr, relays }: AddrPostDetailPageProps) {
if (isError || !resolvedEvent) {
return (
-
+
- {/* Header — matches Ditto: ← Post Details */}
-
Post Details
+
{title}
{children}