🏠 Roomie Detector (v2.0)
Roomie Detector es un proyecto personal diseñado para saber quién está en casa de forma automática e instantánea. Funciona conectándose directamente a la API de tu router local para leer la tabla de dispositivos DHCP/ARP y mostrar un panel de presencia en tiempo real con una estética premium inspirada en la app Buscar (Find My) de Apple.
⚠️ Aviso de compatibilidad: Este proyecto está fuertemente acoplado y pensado para trabajar específicamente con los routers Livebox Fibra 6 (distribuidos en España por Orange/Jazztel) y su sistema operativo/firmware. Para usarlo con otros routers, sería necesario reescribir la clase
LiveboxClient.

🌟 Novedades en la v2.0
Esta versión es una reescritura completa del proyecto original. Hemos abandonado el antiguo sistema dividido (un Daemon pesado de Node.js + Frontend en Vite) para abrazar una arquitectura Serverless moderna. Ahora es un único repositorio de Next.js, mucho más rápido, seguro y perfecto para alojarlo gratis en la nube (ej. Vercel).
✨ Características Principales
- Detección en Tiempo Real: Escanea la red buscando qué móviles están conectados al WiFi para determinar quién está en casa.
- Diseño Apple "Find My": Interfaz ultralimpia construida con Tailwind CSS. Soporta Modo Oscuro nativo (
dark mode), listas agrupadas, efectos glassmorphism y micro-animaciones. - Arquitectura Serverless (BFF): Construido con Next.js (App Router). El frontend se comunica con una API Route interna (
/api/status), la cual actúa de puente seguro (Backend-For-Frontend) hacia el router. - Seguridad con "Enlaces Mágicos": Protegido contra miradas indiscretas. No requiere usuario ni contraseña, sino que utiliza URLs con tokens privados (ej.
/?token=secreto). Una vez autorizado, se guarda una cookie segura de larga duración. - Wake-on-LAN (WoL): Incluye un botón en "Acciones Rápidas" que envía un Paquete Mágico UDP para encender ordenadores apagados directamente desde la web.
- Gestión Fácil: Base de datos en JSON local (
src/data/known_devices.json) para añadir invitados y dispositivos sin tocar la lógica de programación.
🏗️ Arquitectura
graph LR
A[Usuario / Móvil] -->|Enlace Mágico| B(Vercel: Next.js Frontend)
B -->|Polling| C{Vercel: Serverless API}
C -->|HTTPS al Router| D[Livebox Fibra 6]
D -->|DHCP Table JSON| C
C -->|Filtra Dispositivos| B
🚀 Instalación y Despliegue Local
1. Clonar el repositorio
git clone https://github.com/tu-usuario/roomie-detector.git
cd roomie-detector
npm install
2. Configurar Variables de Entorno
Crea un archivo .env en la raíz del proyecto basándote en el siguiente ejemplo:
# IP o Dominio de tu Livebox 6 (Pon tu IP Pública si despliegas en la nube, ej: 87.219.xxx.xxx:10001)
ROUTER_IP=192.168.1.1
ROUTER_USERNAME=tu_usuario_admin
ROUTER_PASSWORD=tu_contraseña_del_router
# Seguridad: Lista de tokens separados por comas para acceder a la app
AUTH_TOKENS=clave_secreta_1,clave_secreta_2
3. Registrar tus Dispositivos
Abre src/data/known_devices.json y añade las direcciones MAC de los móviles de tus roomies u ordenadores.
Nota: La propiedad
"esFijo": true(ordenadores, smart TVs) indica que ese dispositivo no debe contar para la lógica de saber si "hay alguien en casa".
4. Iniciar el servidor
npm run dev
Abre http://localhost:3000/?token=clave_secreta_1 en tu navegador.
🔒 Despliegue en Producción (Vercel)
El proyecto está diseñado para funcionar en Vercel de forma gratuita.
- Sube tu código a tu cuenta de GitHub.
- Inicia sesión en Vercel e importa este repositorio.
- En la pestaña de Environment Variables de Vercel, asegúrate de configurar tu
ROUTER_IPpúblico, las contraseñas, y losAUTH_TOKENS. - (Opcional) Si quieres que el botón de Wake-on-LAN funcione desde Vercel hacia tu casa, deberás hacer un Port Forwarding del puerto 9 (UDP) a la dirección de broadcast de tu red local en la configuración de tu Livebox.
📄 Licencia
Este es un proyecto personal subido con fines educativos. Está bajo la Licencia MIT. Eres libre de utilizarlo, modificarlo e intentar adaptarlo a otros modelos de routers.