Ah, interesting question. I had never implemented a chat server before and initially read the IRC/XMPP specifications but Slack felt like a "superset" of both (federation/p2p wasn't a priority for me) and I was more familiar with web protocols.
The stack is Node.js and PostgreSQL (I probably reinvented some kind of message queue). There is a "dumb" websocket server that just receives/sends events from/to the backend server. Both the websocket and backend servers can scale horizontally.
I haven't written any XMPP/IRC gateways for now though I suppose it wouldn't be that difficult to do.