'use client'; import { useEffect, useMemo, useState } from 'react'; import { connectBeacon, type BeaconMessage } from '../lib/beacon'; const LEVEL_STYLES: Record = { info: 'bg-emerald-500/20 text-emerald-100', warn: 'bg-amber-500/20 text-amber-100', error: 'bg-red-500/20 text-red-100' }; export default function BeaconFeed() { const [events, setEvents] = useState([]); useEffect(() => { const source = connectBeacon((payload) => { setEvents((prev) => [payload, ...prev].slice(0, 20)); }); return () => source.close(); }, []); const emptyState = useMemo( () => (
Waiting for Beacon events… keep this tab open.
), [] ); return (

Live telemetry

Beacon feed

SSE
{events.length === 0 && emptyState} {events.map((event) => (
{event.agent} {new Date(event.ts).toLocaleTimeString()}

{event.detail}

))}
); }