← Écosystème

JoeSing

sing.giorgiopalermo.com en production

Un karaoké personnel via Spotify : il suit le morceau que vous écoutez et affiche les paroles synchronisées mot par mot, pensé pour la télé du salon.

Le problème

Le karaoké à la maison se fait mal : des vidéos au son médiocre avec de la publicité, ou des pistes à acheter. Qui a Spotify Premium a déjà le catalogue ; il ne manquait que les paroles, synchronisées et lisibles à trois mètres.

En 2026, Spotify limite les applications indépendantes à cinq comptes et ne permet plus de vérifier le Premium depuis le profil. La contrainte est devenue le design : chaque utilisateur enregistre sa propre application Spotify et colle son Client ID, le quota est donc le sien et le Premium se vérifie de lui-même à la connexion.

Comment ça marche

Structure

Le navigateur ne parle jamais à Spotify : un processus PHP interroge Spotify une fois par compte et garde l'état en base de données, et tous les écrans lisent là. On n'interroge que les comptes qui ont un écran ouvert, plus souvent vers la fin du morceau.

Parcours d'usage

Un assistant en quatre étapes guide la création de l'application Spotify, avec l'adresse de retour à copier d'un clic. Ensuite il suffit de lancer la lecture sur Spotify : JoeSing reconnaît le morceau, charge les paroles et les affiche en plein écran, avec des styles personnalisables.

Choix techniques

OAuth avec PKCE, sans jamais demander le Client Secret ; jetons chiffrés en AES-256-GCM. La position dans le morceau est recalculée à chaque image à partir de la dernière mesure du serveur, pour que l'erreur ne s'accumule pas. Les paroles viennent de LRCLIB : synchronisées quand elles existent, statiques à défaut.

Limites connues

Il faut Spotify Premium et un peu d'aisance pour créer l'application sur le portail développeurs. L'offre Pro se paie par virement, confirmé à la main : pas de paiement par carte.

Chiffres

Lignes de PHP, environ 18 000
Lignes de JavaScript, environ 7 400
Tables dédiées 22
Classes du module 23
Vérifications automatiques, environ 450

Stack

  • PHP 8
  • MariaDB
  • JoeCMS
  • JavaScript
  • Spotify Web API
  • LRCLIB
  • systemd
Capture d'écran de JoeSing