DevNet
A social platform for developers where feeds, notifications and threads update the moment they happen — no refresh, no polling.
What it is.
DevNet started from a simple frustration: developer communities feel slow. You post, you wait, you refresh. I wanted a social layer for developers that behaves like a terminal — instant, dense and alive — where every like, comment and notification lands the millisecond it happens.
It is a full Next.js + TypeScript application with a WebSocket gateway on Node, PostgreSQL for durable state and Redis for pub/sub. The feed, notifications and thread views are all push-driven, so the client never asks the server “anything new?” — the server simply tells it.
Problems worth solving.
- Keeping hundreds of concurrent feed connections alive on one Node process without melting the event loop.
- Making notifications feel instant without spamming clients with polling traffic.
- Designing a normalized PostgreSQL schema for posts, threads and reactions that stays fast as threads go deep.
- Preventing duplicate or out-of-order events when sockets reconnect on flaky networks.
Built in four moves.
Real-time layer first
A WebSocket gateway with Redis pub/sub, so every server instance sees every event and reconnecting clients replay the messages they missed.
Normalized data model
Posts, threads, reactions and notifications live in PostgreSQL with indexed timelines — feed reads stay at single-digit milliseconds.
Types end to end
TypeScript from database rows to React props. Shared event and entity types killed an entire class of runtime bugs before they shipped.
Optimistic UI
Reactions and comments apply instantly on the client, then reconcile with the server — the feed feels alive even on slow connections.
What it does.
Live feed
Posts stream in over WebSockets with zero polling and zero page reloads.
Instant notifications
Likes, comments and mentions push to the bell the moment they fire.
Threaded discussions
Nested replies with collapsible depth and stable scroll position.
Presence & typing
See who is online in a thread and when someone is composing a reply.
Reconnect replay
Missed events are replayed from Redis on reconnect — nothing gets lost.
Optimistic updates
Interactions land instantly and reconcile quietly in the background.
How it fits together.
- WebSockets over SSE — the feed needs bidirectional traffic (typing, presence), not just a one-way stream.
- Redis pub/sub between instances — horizontal scaling without sticky-session gymnastics.
- PostgreSQL over a document store — threads and reactions are relational by nature; joins beat denormalization here.
What it proved.
- Design the event schema before the UI — every view is just a projection of the event stream.
- Idempotent event IDs make reconnects boring, and boring is exactly what you want in realtime systems.
- Optimistic UI with quiet reconciliation is the single biggest perceived-performance win you can ship.
