WebApp to find rogue MeshCore nodes by plotting signal strength on a map
| src | ||
| .dockerignore | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| vite.config.js | ||
🥷 MC Rogue Hunter
⚠️ Notice: This entire application was vibe-coded — built interactively with an AI coding assistant, one prompt at a time, without a single line of code written manually.
A web app for connecting to a MeshCore companion radio via Web Bluetooth, displaying your GPS position on a map, logging LoRa packets, and mapping signal strength to help locate rogue nodes.
Features
- BLE connection to a MeshCore companion radio using meshcore.js
- Live GPS tracking on an interactive Leaflet map
- Packet log with hierarchical filters (type → channel → sender) and a "direct only" toggle to hide relayed packets
- Channel message decryption (AES-128-ECB + HMAC-SHA256) for channels with known secrets
- Signal mapper — walk around to plot RSSI-coloured dots on the map and hunt down nodes; SNR controls opacity to indicate reading reliability
- Contact plotting — known contacts with GPS coordinates appear on the map
- Touch-friendly UI — 44 px tap targets, responsive layout for mobile and desktop
- Dark theme with a compact header; BLE and GPS status pills with dropdown popups
Prerequisites
- Node.js ≥ 18
- mkcert (or your own TLS certs) — Web Bluetooth requires HTTPS
- Docker and Docker Compose (optional, for containerised development)
Setup
Generate HTTPS certificates
mkdir -p .certs
mkcert -key-file .certs/key.pem -cert-file .certs/cert.pem localhost 127.0.0.1 ::1
Add your LAN IP (e.g. 192.168.0.105) to the mkcert command if you want to access the app from a phone on the same network.
Install dependencies
npm install
Run (local)
npm run dev
Opens at https://localhost:5173.
Run (Docker)
docker compose up --build -d
The Vite dev server starts inside the container on port 5173 with source files bind-mounted for live HMR.
docker compose logs -f # follow logs
docker compose down # stop
Usage
- Open the app in a browser that supports Web Bluetooth (Chrome / Edge).
- Tap the BLE pill in the header → Connect BLE and pair with your MeshCore radio.
- Grant GPS permission when prompted — your position appears on the map.
- Incoming LoRa packets stream into the Packet Log at the bottom. Use the filter chips to narrow by type, channel, or sender.
- Tap Start Mapping in the map overlay, then walk around. Each received packet plots an RSSI-coloured dot at your current GPS position (blue = weak, red = strong). Use these to triangulate the node you're hunting.
Tech stack
| Layer | Library |
|---|---|
| Bundler | Vite 6 |
| Map | Leaflet 1.9 |
| BLE / MeshCore | @liamcottle/meshcore.js |
| Crypto (AES-ECB) | aes-js |
| Crypto (SHA-256, HMAC) | Web Crypto API |
License
MIT