JoeSing
Karaoke personal con Spotify: sigue la canción que estás escuchando y muestra la letra sincronizada palabra por palabra, pensado para la TV del salón.
El problema
El karaoke en casa se hace mal: vídeos con mal sonido y anuncios, o pistas que hay que comprar. Quien tiene Spotify Premium ya tiene el catálogo; solo faltaba la letra, sincronizada y legible a tres metros.
En 2026 Spotify limita las apps independientes a cinco cuentas y ya no permite comprobar el Premium desde el perfil. La limitación se convirtió en el diseño: cada usuario registra su propia app de Spotify y pega su Client ID, así la cuota es suya y el Premium se comprueba solo al conectar.
Cómo funciona
Estructura
El navegador nunca habla con Spotify: un proceso PHP consulta Spotify una vez por cuenta y guarda el estado en la base de datos, y todas las pantallas leen de ahí. Solo se consulta a quien tiene una pantalla abierta, con más frecuencia al final de la canción.
Flujo de uso
Un asistente de cuatro pasos acompaña la creación de la app de Spotify, con la dirección de retorno que se copia con un botón. Después basta con dar al play en Spotify: JoeSing reconoce la canción, carga la letra y la muestra a pantalla completa, con estilos personalizables.
Decisiones técnicas
OAuth con PKCE, sin pedir nunca el Client Secret; tokens cifrados con AES-256-GCM. La posición en la canción se recalcula en cada fotograma a partir del último dato del servidor, así el error no se acumula. Las letras vienen de LRCLIB: sincronizadas si existen, estáticas como alternativa.
Límites conocidos
Hace falta Spotify Premium y algo de soltura para crear la app en el portal para desarrolladores. El plan Pro se paga por transferencia y se confirma a mano: no hay pago con tarjeta.
Números
| Líneas de PHP, aprox. | 18.000 |
|---|---|
| Líneas de JavaScript, aprox. | 7.400 |
| Tablas propias | 22 |
| Clases del módulo | 23 |
| Comprobaciones automáticas, aprox. | 450 |
Stack
- PHP 8
- MariaDB
- JoeCMS
- JavaScript
- Spotify Web API
- LRCLIB
- systemd