zustand 2 Why the unread badge was wrong three times: from a client-side counter to a server count Jul 28, 2026 Why WebSockets quietly die in background tabs: four causes behind the same banner Jul 24, 2026