By Lachlan Hardy
1000h Monday, 30 August 2010 Permalink

Updated: 0200h Monday, 27 February 2012

This weekend was the first ever Node.js Knockout. It’s a a 48-hour coding contest using Node.js inspired by Rails Rumble. Around 215 teams from around the world competed.

I’ve been fascinated by Node ever since I heard of it and have built a few small things here and there. But this was my first opportunity to build a fully-fledged app.

Dan Neighman contacted me about the contest, saying he had a team and an idea, and I jumped at the chance. Together with Dave Goodlad and Lincoln Stoll, we formed the team Explorer Sox.

Our objective was to build a web commenting engine that updates in real-time. This is made possible because of Node’s evented design and the gloriousness that is HTML5’s WebSockets specification. Using the Socket.IO library, which provides fallbacks for those browsers that don't support the spec yet, we built GabberTalk on top of a Node web framework called Express. For added buzzwords points, we wrote the backend in CoffeeScript rather than JavaScript, used the new JS implementation of LESS for our CSS, and used Jade for templating.

Our bootstrap file is plain JavaScript, but we offer a client written in jQuery for ease-of-use. Passing ?client=none in the bootstrap URL cancels the request for the client and simply connects the sockets and provides an API. You can find more information on this at our Customisations page.

We got massive amounts of functionality built in such a short time, but a project like this is all about the details of a tight user experience and we just didn’t quite finish it. There are certainly still some bugs, but we plan to continue working on this in future and improving it. Please try the demo below, check out the site to get your own chat room and throw us some votes for the contest if you like it!

Here’s a demo of a chatroom that’s running simultaneously both here and on Lincoln’s site. Try opening each one in a different browser to see how quickly it passes your messages:

Update: I’ve removed the demo since we took the domain down a while back. It was fun while it lasted!