added real-time refresh using socket.io