I made an IRC client. In fact for the past few months I've been doing a lot of client-side work using AngularJS.
As a daily user of IRC, I've built a ton of bots, and frequently bounce between clients (currently using hexchat through znc ). I don't have any spectacular needs in a client though, so I decided that this would be a cool opportunity to build my own using 100% client-side web technology.
In only two days of hacking I have a client capable of connecting to multiple networks and participating in conversation. It is currently built as a Chrome packaged app and relies on Chrome's socket API in order to actually connect to the IRC server. However I have abstracted away the socket code so when the time is right it will be a piece of cake to port to both node-webkit and a regular browser environment using WebSockets (with a proxy).
I have some big plans for new features to bring to the table that don't exist in other clients, but first I want to work on getting the base nice and solid, and providing a nice API for third-party plugins (a lot of the framework is there already, including theme support).
I expect to hack on this for another week or two before releasing an initial version to the world for a small fee via the Chrome Web Store, although I am considering a simultaneous source release on GitHub.
Thinks are progressing nicely (have updated the screenshot to reflect some additional messages). The chat window correctly handles IRC colors and a few other nice things too, so colorizing status messages and such is very easy.
A few parts have also been rewritten, and the input box supports some basic autocompletion (commands and nicks), and
ctrl-(shift)-tab aswell as
alt-[0-9] can be used to switch windows. I'm still working on adding more commands and protocol support, but it seems pretty stable now.
One big gotcha is that Chrome doesn't have an API for SSL sockets, meaning that I might have to resort to something like forge for TLS enabled IRC servers. Hoping to work that one out soon so I can use my bouncer...