docs: add desktop crate README and link from main README
Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
parent
ad013902fb
commit
6b2c97eb10
|
|
@ -61,6 +61,7 @@ docker run -p 3000:3000 ruvnet/wifi-densepose:latest
|
|||
| [Build Guide](docs/build-guide.md) | Building from source (Rust and Python) |
|
||||
| [Architecture Decisions](docs/adr/README.md) | 48 ADRs — why each technical choice was made, organized by domain (hardware, signal processing, ML, platform, infrastructure) |
|
||||
| [Domain Models](docs/ddd/README.md) | 7 DDD models (RuvSense, Signal Processing, Training Pipeline, Hardware Platform, Sensing Server, WiFi-Mat, CHCI) — bounded contexts, aggregates, domain events, and ubiquitous language |
|
||||
| [Desktop App](rust-port/wifi-densepose-rs/crates/wifi-densepose-desktop/README.md) | **WIP** — Tauri v2 desktop app for node management, OTA updates, WASM deployment, and mesh visualization |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,137 @@
|
|||
# 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](../../docs/adr/ADR-053-ui-design-system.md).
|
||||
|
||||
## 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)
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- [Rust 1.85+](https://rustup.rs/)
|
||||
- [Node.js 20+](https://nodejs.org/)
|
||||
- [Tauri v2 CLI](https://v2.tauri.app/start/prerequisites/)
|
||||
|
||||
### Development
|
||||
|
||||
```bash
|
||||
# Install frontend dependencies
|
||||
cd ui && npm install
|
||||
|
||||
# Start in dev mode (Vite + Tauri)
|
||||
cargo tauri dev
|
||||
```
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
# Production build
|
||||
cargo tauri build
|
||||
```
|
||||
|
||||
The built installer will be in `target/release/bundle/`.
|
||||
|
||||
## 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](../../LICENSE) for details.
|
||||
Loading…
Reference in New Issue