A Rails web application for monitoring amateur radio SVXReflector / GeuReflector node activity in real time. Supports GeuReflector extensions: trunk links, cluster TGs, and satellites. Registered users can tune in to talkgroups and transmit audio directly from their browser.
Wiki — full documentation
- Live node grid with signal levels, squelch indicators, and activity log
- Interactive map with per-node popups and multiple tile layers
- Historical stats: top talkers, top talkgroups, signal strength
- Web listener — tune in to any talkgroup (Opus audio via WebSocket)
- S-meter and spectrum analyser showing real-time audio levels (RX and TX)
- Push-to-Talk from the browser (requires HTTPS)
- CTCSS tone-to-talkgroup matrix with CHIRP CSV export
- GeuReflector support — trunk link status, satellite monitoring, cluster TG indicators, and network-wide analytics
- Web admin for SVXReflector/GeuReflector configuration (global settings, certificates, users, passwords, TG rules, trunk peers, satellites)
- Multi-protocol bridge management — SVXLink reflector-to-reflector, EchoLink, XLX (DCS/DExtra), DMR, YSF, AllStar, Zello, IAX (Asterisk/HOIP), and SIP (PJSIP) bridges with auto-generated configs, snapshot backups, and 30-day archive on delete
- User management with callsign validation, admin approval, and role-based permissions
git clone https://github.com/audric/SvxReflectorDashboard
cd SvxReflectorDashboard
cp .env.example .env # edit with your reflector details
./update.sh # pulls images, starts services, sets up DBPre-built multi-arch images (amd64, arm64/Raspberry Pi) are published to ghcr.io/audric/svxreflectordashboard-web. To build locally instead, run docker compose build.
Set DOMAIN=yourdomain.com in .env for automatic HTTPS, or leave as localhost for local dev.
Open https://yourdomain.com (or http://localhost locally). Default admin: ADM1N / changeme.
Run ./update.sh again anytime to pull the latest code, images, and run migrations.
See the wiki for configuration details and production deployment.
init-reflector-conf → One-shot init container that seeds svxreflector.conf
svxreflector → GeuReflector daemon (SVXReflector-compatible, with trunks/satellites)
caddy → Reverse proxy with automatic HTTPS (Let's Encrypt, optional)
web → Rails app (Puma) on port 3000
updater → Background poller (ReflectorListener)
audio_bridge → Go binary, SVXReflector protocol V2 (browser audio)
xlx_bridge → Go binary, D-STAR XLX bridge (DCS + DExtra, OPUS ↔ AMBE)
dmr_bridge → Go binary, DMR bridge (OPUS ↔ AMBE via MMDVM Homebrew)
ysf_bridge → Go binary, YSF bridge (OPUS ↔ IMBE)
allstar_bridge → Go binary, AllStar bridge (OPUS ↔ µLaw via IAX2)
iax_bridge → Go binary, generic Asterisk/HOIP bridge via IAX2 (OPUS ↔ GSM/µLaw/A-law/G.726)
sip_bridge → Go + C (PJSIP) bridge to any SIP endpoint, UDP/TCP/TLS with DTMF/PIN gate
zello_bridge → Go binary, Zello bridge (OPUS 48kHz ↔ 16kHz via WebSocket)
mqtt → Mosquitto 2 broker for GeuReflector event publishing
redis → ActionCable + snapshot cache + RX metadata + audio pub/sub
All Go bridges include configurable voice bandpass filtering (HPF/LPF), AGC, and hard limiting.
Stack: Ruby 3.2 · Rails 8.0 · ActionCable/WebSocket · Go · SQLite · Redis · Hotwire (Turbo + Stimulus) · HAML · Tailwind CSS · Leaflet.js
See the wiki for architecture details and reflector protocol docs.
| Topic | Link |
|---|---|
| Getting Started | wiki/Getting-Started |
| Architecture | wiki/Architecture |
| Configuration | wiki/Configuration |
| User Management | wiki/User-Management |
| Bridges | wiki/Bridges |
| Audio Bridge | wiki/Audio-Bridge |
| Reflector Protocol | wiki/Reflector-Protocol |
| Troubleshooting | wiki/Troubleshooting |
| Code Map | wiki/Code-Map |
Developed by IW1GEU, member of the XLX585 group.