Operator dashboardο
The robotapp dashboard is an optional Next.js web app that lets one or
more operators drive and monitor a robot over HTTP / WebSocket. The robot is
fully operable without it (CLI / Python API); the dashboard adds a multi-user
interactive layer.
Note
π· Screenshot slot β add images/shot_dashboard.png (the full
dashboard) and the per-panel shots named below into
source/contents/images/.
The dashboard: device/location pickers, task input, live plan & world state, shortcut buttons, and camera feed.ο
Choosing a robot and a siteο
The DevicePanel has two pickers:
Robot β a client-side registry (kept in
localStorage) of robot backend URLs. Switching robots re-targets every API call and the WebSocket; an unreachable robot rolls back to the previous one.Location β per-robot, server-side config profiles (each a
connections.json+ global configs for one deployment site). Activating a location hot-reloads the backendβs device connections, so the connection list refreshes right after. Sites are distinct from the multi-robot URL registry.
The panel also exposes device connections (ROS topics/services/actions, LLM clients, API keys) for the active site.
Sending a taskο
The AgentPanel is the command box:
Structured vs. unstructured input (predefined tasks vs. free natural language), with optional voice input/output (vi / ko / en).
Planner selection β
grace(SAGE closed loop) ordirect.Plan-only β generate the plan without executing it.
Submitting opens the /ws/agent WebSocket and streams the run back live.
Watching the runο
The PlanPanel shows, top to bottom:
Robot State (
WorldStateBlock) β editable inputs forarrived/holding/found/opened/on, a βheld N m agoβ age hint, and a read-only found pose with a fresh / β stale badge. Each save is aPUT /agent/worldβ safe even mid-run.Plan β the generated steps.
Execution timeline β per-step status (β³ running, β done, β failed) with nested logs, result objects, and step images.
The value shown comes from the latest world event on the agent WebSocket,
falling back to GET /agent/world on mount.
Other panels: ButtonPanel (server-synced shortcut buttons, drag to reorder), CameraFeed (WebRTC / MJPEG streams), SkillPanel, EnvPanel, and GuidePanel.
Safetyο
POST /skill/<name> is the same path the CLI mode resolves through. Two
clients driving the same robot simultaneously is unsafe β coordinate so only
one operator (or the dashboard or the CLI) commands a given robot at a time.
Build & deployο
cd robotapp
make run-frontend # next dev on :3007
make build-frontend # static export to frontend/out/
CLOUDFLARE_API_TOKEN=β¦ make deploy
The production build is a static export deployed to Cloudflare Pages.