WebApp to find rogue MeshCore nodes by plotting signal strength on a map
Find a file
2026-03-21 21:07:57 +01:00
src feat: First working version 2026-03-21 21:07:57 +01:00
.dockerignore feat: First working version 2026-03-21 21:07:57 +01:00
.gitignore feat: First working version 2026-03-21 21:07:57 +01:00
docker-compose.yml feat: First working version 2026-03-21 21:07:57 +01:00
Dockerfile feat: First working version 2026-03-21 21:07:57 +01:00
index.html feat: First working version 2026-03-21 21:07:57 +01:00
package-lock.json feat: First working version 2026-03-21 21:07:57 +01:00
package.json feat: First working version 2026-03-21 21:07:57 +01:00
README.md first commit 2026-03-21 21:06:08 +01:00
vite.config.js feat: First working version 2026-03-21 21:07:57 +01:00

🥷 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

  1. Open the app in a browser that supports Web Bluetooth (Chrome / Edge).
  2. Tap the BLE pill in the header → Connect BLE and pair with your MeshCore radio.
  3. Grant GPS permission when prompted — your position appears on the map.
  4. Incoming LoRa packets stream into the Packet Log at the bottom. Use the filter chips to narrow by type, channel, or sender.
  5. 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