web interface with socket.io