diff --git a/frontend/src/pages/index.tsx b/frontend/src/pages/index.tsx index 6933806..2d1aeac 100644 --- a/frontend/src/pages/index.tsx +++ b/frontend/src/pages/index.tsx @@ -55,20 +55,25 @@ const portalHighlights = [ ]; const fallbackTickerItems = [ - { id: 'fallback-1', title: 'Prime Time Studio', stream_type: 'video', status: 'live', starts_at: new Date().toISOString() }, - { id: 'fallback-2', title: 'Evening Bulletin', stream_type: 'audio', status: 'scheduled', starts_at: new Date(Date.now() + 45 * 60 * 1000).toISOString() }, - { id: 'fallback-3', title: 'Culture Call-In', stream_type: 'audio', status: 'live', starts_at: new Date().toISOString() }, - { id: 'fallback-4', title: 'Weekend Music Hour', stream_type: 'video', status: 'scheduled', starts_at: new Date(Date.now() + 2 * 60 * 60 * 1000).toISOString() }, + { id: 'fallback-1', title: 'Prime Time Studio', stream_type: 'video', status: 'live', starts_at: '2026-04-05T18:00:00.000Z' }, + { id: 'fallback-2', title: 'Evening Bulletin', stream_type: 'audio', status: 'scheduled', starts_at: '2026-04-05T18:45:00.000Z' }, + { id: 'fallback-3', title: 'Culture Call-In', stream_type: 'audio', status: 'live', starts_at: '2026-04-05T19:30:00.000Z' }, + { id: 'fallback-4', title: 'Weekend Music Hour', stream_type: 'video', status: 'scheduled', starts_at: '2026-04-05T20:00:00.000Z' }, ]; export default function HomePage() { const router = useRouter(); const [tickerStreams, setTickerStreams] = useState([]); const [selectedTickerStreamId, setSelectedTickerStreamId] = useState(''); + const [hasHydrated, setHasHydrated] = useState(false); const [isNowPlayingVisible, setIsNowPlayingVisible] = useState(false); const [isNowPlayingMinimized, setIsNowPlayingMinimized] = useState(false); const [hasDismissedNowPlaying, setHasDismissedNowPlaying] = useState(false); + useEffect(() => { + setHasHydrated(true); + }, []); + useEffect(() => { let isMounted = true; @@ -96,7 +101,13 @@ export default function HomePage() { }; }, []); - const tickerItems = useMemo(() => (tickerStreams.length ? tickerStreams : fallbackTickerItems), [tickerStreams]); + const tickerItems = useMemo(() => { + if (!hasHydrated) { + return []; + } + + return tickerStreams.length ? tickerStreams : fallbackTickerItems; + }, [hasHydrated, tickerStreams]); const queryStreamId = useMemo(() => getPublicStreamQueryId(router.query.stream), [router.query.stream]); useEffect(() => {