Project2012–2014Archived
Subway
A web IRC client with server-side sessions, plugin hooks, and history that survives disconnects and machine switches.
The story
Throughout college, my friends and I lived on IRC. It was our group chat before modern group chat existed. The constant pain was context loss: switching machines meant losing your scroll position, your unread state, and the momentum of whatever conversation you were in.
I had just discovered
Over two years of intermittent development it grew from a proof of concept into the client I used daily: history that persisted across sessions, plugin-driven behavior, desktop highlights, and reconnect logic built to recover work rather than drop it. The IRC session lived on the server, so closing a laptop mid-conversation stopped costing anything.
The repository is archived now, and that's the right status. The stack reads like a time capsule — Backbone.js, jQuery, Underscore — and group chat moved on. But for two years it did exactly what I built it for, and a proof of concept that becomes your daily client is the best outcome a proof of concept can have.
How it works
Two questions drove the architecture: how messages moved, and how sessions recovered.
sequenceDiagram
participant Browser as Browser UI (Backbone.js + jQuery)
participant Bridge as Socket.io bridge (Node.js)
participant Session as IRC session layer
participant History as Persistent history
Browser->>Bridge: connect over Socket.io
Bridge->>Session: bind IRC session and join channels
Session->>History: read recent messages
History-->>Browser: rehydrate scrollback and unread state
Session-->>Browser: stream events (join, part, topic, message)
Session->>Session: plugin hooks fire on highlights
Note over Browser,Session: On disconnect, the server-side session stays up, queues missed events, and replays them on resumeDemo
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.
Artifacts & further reading
- [1]GitHub
the challenge that prompted the project