up to spec, ended up not using socket.io