VOLVER AL INICIO
DEV_LOG

roomie-detector

una aplicacion web sencilla para detectar si hay alguien en casa.

JavaScript 0 0
README.md

🏠 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.

Roomie Detector Screenshot

🌟 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.

  1. Sube tu código a tu cuenta de GitHub.
  2. Inicia sesión en Vercel e importa este repositorio.
  3. En la pestaña de Environment Variables de Vercel, asegúrate de configurar tu ROUTER_IP público, las contraseñas, y los AUTH_TOKENS.
  4. (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.