Realtime Task Manager.
Live collaboration that just works.
A full-stack web application built with React and Node.js, delivering sub-50ms realtime updates via WebSocket for a distributed team of 80+ users. Offline-first architecture with conflict resolution and a design system adopted across four product teams.
The challenge
The product team relied on a legacy task management tool with 5-10 second polling intervals for updates. Users constantly asked "are we synced?" in Slack, context-switching killed productivity, and the system had no offline support — meaning field engineers lost work when connectivity dropped.
The goal: build a realtime collaboration platform with instant updates, offline-first data persistence, and a UI that scales from solo focus work to large project boards with 20+ columns.
The approach
I architected a WebSocket-driven sync layer using a custom CRDT-inspired conflict resolution strategy. The frontend uses React with virtualized lists (react-window) for boards with 500+ tasks. Optimistic UI updates ensure actions feel instant while the server confirms writes asynchronously.
Key architectural decisions included:
- WebSocket multiplexing — single connection per client, multiple channels for different boards, reducing server load by 73%
- IndexedDB persistence — full offline support with background sync queue, ensuring zero data loss during connectivity drops
- Row-level security in PostgreSQL — granular permissions without application-level middleware overhead
- Keyboard-first interface — Vim-inspired shortcuts for power users, reducing mouse dependency by 60%
The outcome
- Sub-50ms update latency across all connected clients
- 80% reduction in "are we synced?" messages in Slack
- 12,000 daily active users within the first quarter
- 99.9% uptime since production launch
- 68% faster page loads compared to the legacy tool
- Design system adopted by 3 additional internal departments
Technical highlights
The WebSocket layer handles 15,000+ concurrent connections per server instance. Connection pooling with PgBouncer keeps PostgreSQL responsive under load. The entire frontend bundle is 127KB gzipped — achieved through aggressive code splitting, tree shaking, and lazy-loading non-critical routes.
Monitoring uses a custom OpenTelemetry pipeline feeding into Grafana, giving the team visibility into p99 latencies, connection health, and sync conflict rates in real time.