Panel de control en tiempo real para monitorear el estado y rendimiento de tu kit Starlink. Visualiza métricas de red, salud del hardware, datos de instalación y consumo de datos con una interfaz oscura y responsiva.
El proyecto es un monorepo con tres servicios principales orquestados con Docker Compose:
starlink-dashboard/
├── frontend/ # Next.js 16 + React 19 + Tailwind CSS v4
├── backend/ # Node.js + Express + Socket.io
├── prometheus/ # Configuración de Prometheus
├── docker-compose.yml # Orquestación completa
└── prometheus.yml # Scrape config (intervalo: 1s)
Antena Starlink (gRPC :9200)
↓
starlink-exporter :9451 ← expone métricas en formato Prometheus
↓
Prometheus :9090 ← almacena series temporales
↓
Backend :4000 ← consulta Prometheus, normaliza y emite por WebSocket
↓
Frontend :3000 ← recibe eventos en tiempo real vía Socket.io
- Descarga / Subida (Mbps) con promedios históricos de sesión
- Latencia (ms) + pérdida de paquetes (%)
- SNR — calidad de señal (sincronizada / ruido alto)
- Enlace Ethernet activo/inactivo
- Temperatura de la antena con alerta de Thermal Throttling
- Motores — estado sano / atascado
- Calefacción activa/inactiva
- Potencia consumida (Watts)
- Estado Online / Offline
- Uptime y downtime acumulado
- Obstrucciones — fracción actual y segundos obstruido en las últimas 24h
- Clase de movilidad — Fija / Móvil
- Ahorro de energía (Power Save Idle)
- Actualización de firmware disponible
- Inclinación y Azimuth — valores actual y objetivo
- GPS — satélites visibles, validez, latitud, longitud y altitud
- Sesión actual (GB)
- Hoy (GB)
- Mes (GB)
Score 0–100% calculado en tiempo real combinando pérdida de paquetes, latencia, SNR y obstrucciones.
| Alerta | Nivel |
|---|---|
| Motores atascados | Error |
| Límite térmico alcanzado | Warning |
| Apagado térmico | Error |
| Mástil no vertical | Error |
| Antena obstruida | Warning |
| Señal más baja de lo esperado | Warning |
| Ubicación inesperada (restricción regional) | Error |
| Instalación pendiente | Info |
El método recomendado. Solo necesitás Docker instalado — ningún archivo extra, nada de Git.
Linux / macOS:
mkdir starlink && cd starlink
curl -O https://raw.githubusercontent.com/lipicero/starlink-dashboard/main/docker-compose.ymlWindows (PowerShell):
mkdir starlink; cd starlink
Invoke-WebRequest -Uri https://raw.githubusercontent.com/lipicero/starlink-dashboard/main/docker-compose.yml -OutFile docker-compose.ymlNota: En PowerShell,
curles un alias deInvoke-WebRequest. Para usar elcurlreal escribícurl.exe, o instalá Git for Windows que incluye bash y curl nativo.
docker-compose up -dEsto inicia cinco contenedores:
| Contenedor | Imagen | Puerto |
|---|---|---|
starlink-exporter |
ghcr.io/joshuasing/starlink_exporter |
9451 |
prometheus |
ghcr.io/lipicero/starlink-dashboard-prometheus |
9090 |
starlink-backend |
ghcr.io/lipicero/starlink-dashboard-backend |
4000 |
starlink-frontend |
ghcr.io/lipicero/starlink-dashboard-frontend |
3000 |
watchtower |
containrrr/watchtower |
— |
| Servicio | URL |
|---|---|
| Dashboard | http://localhost:3000 |
| API Backend | http://localhost:4000 |
| Prometheus | http://localhost:9090 |
docker-compose downCopiá backend/env.example a backend/.env para desarrollo local:
| Variable | Descripción | Default |
|---|---|---|
PROMETHEUS_URL |
URL de la API de Prometheus | http://localhost:9090 |
POLL_INTERVAL_MS |
Frecuencia de consulta a Prometheus | 5000 |
PORT |
Puerto del servidor backend | 4000 |
MOCK_MODE |
Activar datos simulados (sin antena real) | false |
En Docker, estas variables están definidas en el docker-compose.yml.
# Clonar el repositorio
git clone https://github.com/lipicero/starlink-dashboard.git
cd starlink-dashboard
# Instalar dependencias de todos los paquetes del workspace
pnpm install# Windows (PowerShell)
Copy-Item backend/env.example backend/.env
# Linux / macOS
cp backend/env.example backend/.envEditá backend/.env con la URL de tu Prometheus.
# Levanta backend (nodemon) y frontend (Next.js) en paralelo
pnpm dev| Servicio | URL |
|---|---|
| Frontend (Next.js dev) | http://localhost:3000 |
| Backend (Node.js) | http://localhost:4000 |
| Comando | Descripción |
|---|---|
pnpm dev |
Backend + Frontend en modo desarrollo (hot-reload) |
pnpm start |
Backend + Frontend en modo producción |
pnpm build |
Compilar el frontend para producción |
pnpm install-all |
Instalar dependencias del workspace |
- Next.js 16 + React 19 — Framework y UI
- TypeScript 5 — Tipado estático
- Tailwind CSS v4 — Estilos
- Recharts 3 — Gráficos de red (downlink/uplink/latencia)
- Socket.io Client 4 — Actualizaciones en tiempo real
- Lucide React — Iconografía
- Node.js (ESM) + Express 5 — Servidor HTTP
- Socket.io 4 — Emisión de métricas en tiempo real
- InfluxDB Client — Persistencia de métricas (opcional)
- dotenv — Gestión de variables de entorno
- starlink-exporter — Expone métricas gRPC de la antena como endpoints Prometheus
- Prometheus — Almacenamiento de series temporales (scrape cada 1s)
- Watchtower — Actualización automática de contenedores al detectar nuevas imágenes en GHCR
- GitHub Actions — CI/CD: build y push automático de imágenes a GHCR en cada push a
main
Cada push a main o master dispara el workflow .github/workflows/docker-publish.yml, que publica tres imágenes en GitHub Container Registry (GHCR):
ghcr.io/lipicero/starlink-dashboard-backend:latestghcr.io/lipicero/starlink-dashboard-frontend:latestghcr.io/lipicero/starlink-dashboard-prometheus:latest
Watchtower detecta las nuevas imágenes y actualiza los contenedores en producción sin intervención manual (revisión cada 5 minutos).
Diseñado para exploradores digitales. 🚀🛰️