frontend: add websocket discovery and health check handler