Help us improve
Share bugs, ideas, or general feedback.
From godmode
Guides real-time communication implementation using WebSocket, SSE, Socket.io, Redis pub/sub, presence/typing indicators, CRDT collaboration with Yjs, and scaling setups.
npx claudepluginhub arbazkhan971/godmodeHow this skill is triggered — by the user, by Claude, or both
Slash command
/godmode:realtimeThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- `/godmode:realtime`, "add websockets", "real-time"
Implements real-time features with WebSockets (Socket.io, ws), SSE, Supabase Realtime, Firebase, Pusher. Covers presence indicators, live cursors, CRDT collaboration (Yjs, Automerge), chat, notifications, Redis scaling. For live updates, chat, collaboration.
Builds real-time bidirectional communication systems with WebSockets or Socket.IO, including authentication, rooms, Redis horizontal scaling, presence tracking, and monitoring.
Builds real-time WebSocket/Socket.IO systems with authentication, room management, pub/sub, and horizontal scaling via Redis adapter.
Share bugs, ideas, or general feedback.
/godmode:realtime, "add websockets", "real-time"grep -r "socket.io\|ws\|websocket\|sse\|EventSource" \
--include="*.ts" --include="*.js" -l 2>/dev/null
grep -r "redis.*pub\|redis.*sub\|createAdapter" \
--include="*.ts" --include="*.js" -l 2>/dev/null
Direction: server->client | bidirectional | both
Latency: <100ms | <1s | <30s
Concurrency: <1K | 1K-10K | 10K-100K | >100K
Persistence: ephemeral | replay needed
IF only server->client push: use SSE (simpler). IF bidirectional needed: use WebSocket/Socket.io.
Authenticate during handshake (not after). Reject unauthenticated connections immediately. Heartbeat: client+server exchange every 30s. Dead connection detection within 60s.
Channel patterns: room:{id}, user:{id},
team:{id}, presence:{room}, typing:{room}.
Use Redis pub/sub for multi-server fan-out.
Track online/offline per user+room in Redis sorted set. Score = last-seen timestamp. Expire after 60s. Debounce "user left" by 3-5s (prevents flicker on network blips).
Ephemeral state. Never persist. Broadcast at most
once per 2s. Auto-expire after 5s. Send stop_typing
on blur or submit.
IF multiple users edit same document: use CRDT (Yjs). IF simple form fields: last-write-wins sufficient.
Redis pub/sub adapter for Socket.io multi-instance. Sticky sessions (IP hash) for WebSocket at LB. Per-instance: ~10K connections. Cluster: scale horizontally with Redis adapter.
upstream websocket_backend {
ip_hash;
server ws1:3000;
server ws2:3000;
}
Exponential backoff: base=1s, max=30s, max attempts=10. On reconnect: re-authenticate, rejoin rooms, fetch missed messages by last-received ID. Queue messages during disconnection.
[ ] Auth on handshake
[ ] Heartbeat configured (30s interval)
[ ] Reconnection with state recovery
[ ] Redis pub/sub for multi-instance
[ ] Presence with debounce (3-5s)
[ ] Rate limiting on incoming messages
[ ] Server-side message validation
Append .godmode/realtime-results.tsv:
timestamp transport event_types rooms presence scaling reconnection status
KEEP if: reconnection recovers state AND latency
< 100ms p95 AND ordering preserved.
DISCARD if: messages lost on reconnect
OR cross-instance delivery fails.
STOP when FIRST of:
- All features work (chat, presence, typing)
- Reconnection with state recovery verified
- Cross-instance delivery confirmed
On failure: git reset --hard HEAD~1. Never pause.
| Failure | Action |
|---|---|
| Connections drop often | Heartbeat + backoff reconnect |
| Out-of-order messages | Add sequence numbers, reorder |
| Memory grows per client | Check listener leaks, limit buffers |
| Updates not reaching all | Verify Redis pub/sub fan-out |