feat: implement Mr. Wiggles — real-time wireless signal fox hunting sonar visualizer - #1
Conversation
- Backend: Express + WebSocket server, DemoSDR synthetic data, HardwareSDR (RTL-SDR/HackRF), SignalManager with EMA smoothing - Frontend: HTML5 Canvas renderer with crescent ripples, beat waves, located circle; interactive signal menu; WebSocket client with auto-reconnect - Scripts: install-sdr.sh for RTL-SDR/HackRF Linux driver installation - Docs: extending-antennas.md guide for adding new SDR backends - Full README with features, setup, config reference, API docs
- renderer.js: guard beatFreq against zero to prevent unexpected spawn timing - helpers.js: use crypto.randomBytes for randomId (collision-safe, cryptographically random) - demoSDR.js: rename _tick_ to _tick (consistent naming), rename _tick counter to _tickCount to avoid property/method shadowing
GG-93
left a comment
There was a problem hiding this comment.
not rtl or hack rf hardware focused make it qctually functional and usable immediately using 2.4g wifi, 5 gwifi, luetooth and bluetooth low energy being received from internal or external computer hard wired wireless modules and or esp 32 chips that are hardwired to a computer. if any of that is possible on a phone that would be nice but i dont know how with ios locked down so tight and android inconsistent between manufacterers
Done — the app no longer requires RTL-SDR or HackRF. The new What works out of the box (zero extra deps):
Optional (one
Quick start: cp backend/.env.example backend/.env
# Edit backend/.env → DEMO_MODE=false
npm install # from repo root
npm start
# open http://localhost:3000For BLE on Linux, also run Phone/tablet: Any device on the same network can open Demo mode now also includes synthetic BLE devices (iPhone, AirPods, Galaxy Watch, etc.) alongside the Wi-Fi APs so the UI previews realistically without any hardware. |
Bootstraps the entire Mr. Wiggles application from an empty repo (only a placeholder README existed). Implements a full-stack real-time signal visualization tool with animated crescent ripples showing RSSI, Direction of Arrival, and frequency data on an HTML5 Canvas.
Backend (
backend/src/)index.js— Express server + HTTP + WebSocket (/ws); serves frontend statically; REST API:GET /api/status,GET /api/signals,POST /api/targetsdr/demoSDR.js— 5 synthetic Wi-Fi signals at 60 Hz with drifting DoA, fluctuating RSSI, and randomized tx bursts; no hardware requiredsdr/hardwareSDR.js— Spawnsrtl_power(RTL-SDR) orhackrf_sweep(HackRF), parses CSV output, auto-detects available backendprocessors/signalManager.js— EMA smoothing on RSSI/DoA, RSSI threshold →locatedflag, stale signal pruningutils/wsServer.js— Rate-limited broadcast loop (default 60 Hz)utils/helpers.js—ema,rssiToStrength,normaliseDeg,randomId(crypto-backed),bufToMacFrontend (
frontend/)renderer.js— 240 HzrequestAnimationFrameloop; crescent arcs emanate from centre in DoA direction; arc span and line weight scale with RSSI strength; sinusoidal beat waves modulated along each crescent bybeatFreq; nested ring layers (×3); green pulsing hard circle + banner whenlocatedapp.js— Wires WebSocket updates → renderer + sidebar UI (signal selector, info table, signal list)wsClient.js— WebSocket client with exponential-backoff reconnectInfrastructure
scripts/install-sdr.sh— Interactive RTL-SDR / HackRF udev + driver installer for Ubuntu/Debian/RPi OSdocs/extending-antennas.md— Frame contract, DoA estimation approaches (single antenna, rotating directional, phased array), supported protocol table (BLE, Zigbee, LoRa, ADS-B, etc.).env.example— All tunable parameters:DEMO_MODE,SDR_TYPE,RSSI_THRESHOLD,DOA_SMOOTHING,WS_BROADCAST_RATE_HZ, etc.Visual parameter mapping