You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on May 14, 2026. It is now read-only.
New streams take up to 30 seconds to appear on the dashboard even when OpsDec's backend has already processed the session update. WebSocket is connected, but real-time updates are silently dropped and only the 30s polling loop actually refreshes the UI.
Root cause
Event-type mismatch between the backend broadcast and the frontend listener:
Those strings don't match, so the message is received over the socket and then ignored. The dashboard still updates because `loadData()` runs on a `setInterval(..., 30000)` — but that's not real-time, and it masks the fact that WS-driven updates don't work at all.
Repro
Start a new stream on any server OpsDec is monitoring
Watch the OpsDec backend logs — `📺 New session started: ...` appears
Dashboard does NOT update
Wait up to 30s — dashboard finally refreshes on the next poll
Fix options
Pick one:
Change the backend to broadcast `type: 'session.update'` so it matches the listener
Or change the frontend to listen for `type: 'activity'` to match the backend
Ideally settle on one convention across all broadcasts (look for other `broadcast({...})` callsites too)
Why this matters
Without real-time updates, the Dashboard loses most of its value — especially for audiobook sessions where the state changes (play/pause/seek) happen often and the 30s lag is very visible. This is probably why the dashboard has felt "sluggish" on new-stream detection.
Symptom
New streams take up to 30 seconds to appear on the dashboard even when OpsDec's backend has already processed the session update. WebSocket is connected, but real-time updates are silently dropped and only the 30s polling loop actually refreshes the UI.
Root cause
Event-type mismatch between the backend broadcast and the frontend listener:
```js
broadcast({ type: 'activity', data: currentSessions });
```
```js
if (data.type === 'session.update') { ... }
```
Those strings don't match, so the message is received over the socket and then ignored. The dashboard still updates because `loadData()` runs on a `setInterval(..., 30000)` — but that's not real-time, and it masks the fact that WS-driven updates don't work at all.
Repro
Fix options
Pick one:
Why this matters
Without real-time updates, the Dashboard loses most of its value — especially for audiobook sessions where the state changes (play/pause/seek) happen often and the 30s lag is very visible. This is probably why the dashboard has felt "sluggish" on new-stream detection.