Ruview/v2/crates/wifi-densepose-desktop/README.md
rUv f49c722764
chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427)
The Rust port lived two directories deep (rust-port/wifi-densepose-rs/)
without any sibling under rust-port/ that warranted the extra level.
Move the whole workspace up to v2/ to match v1/ (Python) at the same
depth and shorten every cd / build command across the repo.

git mv preserves history for all tracked files. 60 files updated for
path references (CI workflows, ADRs, docs, scripts, READMEs, internal
.claude-flow state). Two manual fixes for relative-cd paths in
CLAUDE.md and ADR-043 that became wrong after the depth change
(cd ../.. → cd ..).

Validated:
- cargo check --workspace --no-default-features → clean (after target/
  nuke; the gitignored target/ was carried by the OS rename and had
  hard-coded old paths in build scripts)
- cargo test --workspace --no-default-features → 1,539 passed, 0 failed,
  8 ignored (same totals as pre-rename)
- ESP32-S3 on COM7 → still streaming live CSI (cb #40300, RSSI -64 dBm)

After-merge follow-up: contributors should `rm -rf v2/target` once and
let cargo regenerate from the new path.
2026-04-25 21:28:13 -04:00

7.4 KiB

RuView Desktop

Work in Progress — This crate is under active development. APIs and UI are subject to change.

Cross-platform desktop application for managing ESP32 WiFi sensing networks. Built with Tauri v2 (Rust backend) and React + TypeScript (frontend), following the ADR-053 design system.

Overview

RuView Desktop provides a unified interface for node discovery, firmware management, over-the-air updates, WASM edge module deployment, real-time sensing data visualization, and mesh network topology monitoring — all from a single native application.

Pages

Page Description Status
Dashboard System overview with live stat cards, server panel, quick actions, and node grid Done
Nodes Sortable table of discovered ESP32 nodes with expandable detail rows Done
Flash 3-step serial firmware flash wizard (select port, pick firmware, flash + verify) Done
OTA Update Single-node and batch over-the-air firmware updates with strategy selection Done
Edge Modules WASM module upload, lifecycle management (start/stop/unload) per node Done
Sensing Server start/stop, live log viewer (pause/clear), activity feed with confidence bars Done
Mesh View Force-directed canvas graph showing mesh topology with click-to-inspect nodes Done
Settings Server configuration (ports, bind address, discovery interval, theme) Done

Architecture

wifi-densepose-desktop/
├── src/
│   ├── main.rs              # Tauri app entry point
│   ├── lib.rs               # Command registration
│   ├── commands/            # Tauri IPC command handlers
│   │   ├── discovery.rs     # Node discovery (mDNS/UDP probe)
│   │   ├── flash.rs         # Serial firmware flashing
│   │   ├── ota.rs           # OTA update (single + batch)
│   │   ├── wasm.rs          # WASM module management
│   │   └── server.rs        # Sensing server lifecycle
│   └── domain/              # DDD domain models
│       ├── node.rs           # DiscoveredNode, NodeRegistry, HealthStatus
│       └── config.rs         # ProvisioningConfig with validation
├── ui/                       # React + TypeScript frontend
│   ├── src/
│   │   ├── App.tsx           # Shell with sidebar nav, live status bar
│   │   ├── design-system.css # ADR-053 design tokens and components
│   │   ├── types.ts          # TypeScript types mirroring Rust domain
│   │   ├── components/       # Shared UI components (StatusBadge, NodeCard)
│   │   ├── hooks/            # React hooks (useServer, useNodes)
│   │   └── pages/            # 8 page components
│   └── index.html
└── tauri.conf.json           # Tauri v2 configuration

Tauri Commands

Group Command Description
Discovery discover_nodes Scan network for ESP32 nodes via mDNS/UDP
Flash list_serial_ports List available serial ports
detect_chip Detect connected chip type
start_flash Flash firmware via serial
OTA ota_update Push firmware to a single node
batch_ota_update Push firmware to multiple nodes
WASM wasm_list List loaded WASM modules on a node
wasm_upload Upload a .wasm module to a node
wasm_control Start/stop/unload a WASM module
Server start_server Start the sensing HTTP/WS server
stop_server Stop the sensing server
server_status Get current server status
Provision get_provision_config Read provisioning configuration
save_provision_config Save provisioning configuration

Design System (ADR-053)

The UI follows a dark professional theme with the following design tokens:

Token Value Usage
--bg-base #0d1117 Main background
--bg-surface #161b22 Cards, sidebar, panels
--bg-elevated #1c2333 Elevated elements
--accent #7c3aed Primary accent (purple)
--status-online #3fb950 Online/success indicators
--status-error #f85149 Error/offline indicators
--font-mono JetBrains Mono Technical data, code
--font-sans Inter UI text, labels

UI Features

  • Glassmorphism cards with backdrop-filter: blur(12px)
  • Count-up animations on dashboard stat numbers
  • Page transitions with fade-in + scale on navigation
  • Gradient accents on logo, nav indicator, primary buttons
  • Status dot glows with ambient box-shadow per health state
  • Staggered fade-ins for card grids
  • Force-directed graph for mesh topology (pure Canvas 2D)

Download

Pre-built binaries are available on the Releases page.

Platform Download Status
Windows x64 v0.3.0-alpha Debug build
macOS Planned
Linux Planned

Running the pre-built exe (Windows)

The current release is a debug build that loads the frontend from a local Vite dev server. Follow these steps:

# 1. Clone the repo (or download just the ui/ folder)
git clone https://github.com/ruvnet/RuView.git
cd RuView/v2/crates/wifi-densepose-desktop/ui

# 2. Install frontend dependencies
npm install

# 3. Start the Vite dev server
npx vite --host

# 4. Download and run the exe from the release page
#    (or run from the repo if you built it locally)
#    The app window will open and connect to localhost:5173

Requirements: Windows 10 (1803+) or Windows 11. WebView2 runtime is required (pre-installed on Windows 10 1803+ and all Windows 11).

Note: Production builds will bundle the frontend assets directly into the exe, removing the need for a dev server.

Build from Source

Prerequisites

  • Rust 1.85+
  • Node.js 20+
  • Tauri v2 CLI
  • Windows: MSVC build tools + MinGW-w64 (for dlltool)
  • macOS: Xcode Command Line Tools
  • Linux: libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev

Development mode

# Install frontend dependencies
cd ui && npm install

# Start in dev mode (hot-reload on both Rust and React)
cargo tauri dev

Production build

# Build optimized release with bundled frontend
cargo tauri build

The installer/bundle will be in target/release/bundle/ (.msi on Windows, .dmg on macOS, .deb/.AppImage on Linux).

Domain Types

Type Fields Description
Node ip, mac, hostname, node_id, firmware_version, chip, mesh_role, health, ... Full node record
HealthStatus online, offline, degraded, unknown Node health state
FlashSession port, firmware, chip, baud, progress Active flash operation
OtaResult node_ip, success, previous_version, new_version, duration_ms OTA outcome
WasmModule module_id, name, size_bytes, state, node_ip Edge module record
ServerStatus running, pid, http_port, ws_port Sensing server state
SensingUpdate timestamp, node_id, subcarrier_count, rssi, activity, confidence Real-time data

License

MIT — see LICENSE for details.