'use client'; import { useEffect } from 'react'; import { TimelineFeed } from '../../components/timeline/timeline-feed'; import { useTimelineStore } from '../../components/timeline/timeline-store'; export default function TimelinePage() { return (

Activity Timeline

Real-time stream of project mutations.

); } function TimelineControls() { return (
{/* Placeholder for future filters */}
Showing all activity
); } function TimelineSubscription() { const { addEvent, setHistory } = useTimelineStore(); useEffect(() => { // 1. Fetch history fetch('/api/activity') .then(res => { if (!res.ok) throw new Error('History fetch failed'); return res.json(); }) .then(data => setHistory(data)) .catch(err => console.error('Failed to load history', err)); // 2. Subscribe to SSE const es = new EventSource('/api/events'); es.addEventListener('activity', (e) => { try { const event = JSON.parse(e.data); addEvent(event); } catch (err) { console.error('Failed to parse activity event', err); } }); return () => es.close(); }, [setHistory, addEvent]); return null; }