Project Archive
Subway
In 2012, I built a web IRC proof of concept to validate that real-time browser chat could preserve context, recover from disconnects, and stay usable under active channel traffic.
What This Proved
- IRC could feel native in a browser, not like a compromised fallback.
- Session continuity was possible with persistent history + backlog replay.
- Plugin hooks and notifications could be layered onto IRC workflows without replacing IRC itself.
Throughout college, my friends and I lived on IRC. It was our group chat before modern group chat. The pain point was constant context loss: switching machines meant losing your scroll position, unread state, and conversation momentum.
I had just discovered
Over two years of intermittent development, Subway evolved from a proof of concept into a practical daily client: persistent history across sessions, plugin-driven behavior, desktop highlights, and reconnect logic designed to recover work rather than drop it.
Details
Architecture Proof
A quick architecture pass focused on the two critical questions: how messages moved and how sessions recovered.
System Map
- Browser UI (Backbone/jQuery) handled channels, unread state, and rendering.
- Socket.io bridge carried real-time bidirectional events between browser and Node runtime.
- IRC session layer translated IRC semantics (join/part/topic/message) into browser-safe events.
- Persistence layer replayed recent history after reconnect or browser restart.
- Plugin hooks allowed notifications and automation without changing core transport logic.
Lifecycle Sequence
- Browser connects to Node bridge via Socket.io.
- Bridge binds an IRC session and joins active channels.
- Server rehydrates recent message history for continuity.
- Incoming IRC events stream to browser and update channel state.
- Notification/plugin hooks fire on highlights and alert rules.
- On disconnect, session queues/replays missed highlights on resume.
Session Replay
The replay below auto-runs the connect → sync → notify → reconnect flow. Each event includes a provenance badge: sourced, memory, or inferred.
This replay is a reconstruction of original behavior from the Subway project: socket negotiation, persistent history restore, plugin-driven notifications, and reconnect recovery on a Node.js + Socket.io stack.
Further Reading
Related architecture writing with the same real-time systems thread.