Dashboard

The RosFit dashboard is a React-based web application that gives fleet operators a single pane of glass for monitoring, controlling, and debugging every device in the fleet. It connects to the API via REST and WebSocket for real-time updates.

Layout

The dashboard is organized into four main areas:

AreaPositionPurpose
SidebarLeftNavigation between views (Fleet, Devices, Commands, Alerts, Settings)
Fleet MapTop centerGeospatial or grid-based view of all device locations
Device ListBottom centerFilterable, sortable table of registered devices
Telemetry PanelRightLive telemetry charts and widgets for the selected device

The layout is fully responsive. On smaller screens the sidebar collapses into a hamburger menu and the panels stack vertically. All panels can be resized, reordered, or hidden via Settings > Layout.

The dashboard ships as a Docker container (rosfit/dashboard:latest) and is served on port 3000 by default. It communicates with the FastAPI backend on port 8000.

Fleet view

The fleet view provides three modes for visualizing your device fleet:

Map view

Displays every device as a pin on an interactive map (Leaflet-based). Pins are color-coded by status:

ColorStatus
Greenonline — healthy and reporting telemetry
Yellowonline — warning threshold triggered
Rederror — critical fault reported
Grayoffline — no heartbeat
Bluemaintenance — manually paused

Click a pin to open a tooltip with quick stats (battery, uptime, last command). Double-click to navigate to the device detail view.

List view

A data table showing all devices with sortable columns: name, type, status, group, battery, CPU temperature, uptime, and last seen. Supports full-text search and column-level filtering.

Group view

Organizes devices by their group field in a tree structure. Expand a group to see member devices and aggregate health metrics (% online, average battery, total errors).

Health summary

A top-bar widget showing fleet-wide KPIs:

  • Total devices — registered count
  • Online — percentage currently connected
  • Alerts — active alert count
  • Commands — commands sent in the last hour
  • Avg battery — fleet average battery percentage

Device detail

Clicking on any device opens a full-page detail view with the following panels:

Info header

Displays the device name, ID, type, group, tags, firmware version, connection status, and uptime. Includes quick-action buttons for reboot, maintenance mode, and decommission.

Live telemetry

Configurable widget grid showing real-time telemetry streams. Default widgets include:

  • Odometry — 2D position trace on a mini-map
  • Battery — gauge with charge rate trend
  • Velocity — linear and angular velocity line charts
  • IMU — orientation euler angles
  • Diagnostics — CPU, memory, disk, temperature gauges

Widgets auto-update via WebSocket at the configured refresh rate.

Command panel

Inline command interface for sending commands directly to the selected device. Supports free-form JSON or pre-built command templates (navigate, stop, set parameter, restart node).

History

Timeline of all events for the device: state transitions, commands sent/acked, shadow updates, OTA deployments, and alert triggers. Filterable by event type and time range.

Configuration

View and edit the device's shadow desired state. Changes are pushed to the device via MQTT when it is online, or queued for delivery when it reconnects.

Logs

Scrollable, searchable log viewer for device-side logs streamed through the bridge. Supports log level filtering and full-text search.

Command console

The command console is accessible from the sidebar or within a device detail view. It provides a unified interface for sending commands to individual devices, groups, or the entire fleet.

Send commands

Select a target (device ID, group, or broadcast), choose a command type, fill in the payload, and send. The console shows real-time status updates as the command flows through the pipeline: pending → delivered → acked → completed.

Templates

Pre-built command templates for common operations:

TemplateCommandDescription
Navigate Tonavigate_toSend a Nav2 goal pose
Emergency Stopemergency_stopImmediate halt of all motion
Set Parameterset_paramUpdate a ROS 2 parameter at runtime
Restart Noderestart_nodeRestart a specific ROS 2 node
Start Mappingstart_mappingBegin SLAM mapping session
Return Homereturn_homeNavigate to the charging station

Scheduled commands

Create scheduled commands that execute at a specific time or on a recurring cron schedule. Useful for automated patrol routes, scheduled recharging, or periodic data collection.

Alerts

The alert system monitors device telemetry and state, triggering notifications when configured conditions are met.

Threshold-based alerts

Fire when a metric crosses a boundary:

battery_percent < 20      → warning
battery_percent < 10      → critical
cpu_temp > 80             → warning
cpu_temp > 90             → critical

Configure thresholds per device, group, or globally via Settings > Alerts.

State-based alerts

Fire on device state transitions:

  • Device goes offline (heartbeat timeout)
  • Device enters error state
  • Command fails or times out
  • OTA deployment fails
  • Shadow conflict detected

Notification channels

Alerts are routed to one or more channels:

ChannelConfiguration
DashboardAlways enabled — banner and bell icon
EmailSMTP server settings, recipient list
SlackWebhook URL, channel name
DiscordWebhook URL
WebhookCustom HTTP endpoint for integration with PagerDuty, Opsgenie, etc.
SMSTwilio integration (requires API key)

Each alert rule can target different channels based on severity. For example, warnings go to Slack, while critical alerts go to both email and PagerDuty.