Contexte
Cyclone part d’un problème simple à formuler mais difficile à exécuter : réunir la conversation textuelle et les échanges audio-vidéo dans un même produit, sans perdre la cohérence des permissions ni de la navigation. Il ne s’agit pas d’une commande client ni d’un produit affilié à Discord.
Enjeu et contraintes
Synchroniser messages, présence et médias en temps réel tout en séparant clairement l’identité, les données applicatives et le transport audio-vidéo.
Approche
J’ai confié chaque responsabilité au service le plus adapté : Clerk pour l’identité, Next.js pour les API et les contrôles d’accès, Supabase pour les données et les événements privés, puis LiveKit pour les médias avec des jetons courts générés côté serveur.
Choix et compromis
Ce découpage évite de faire transiter les médias par Next.js et garde les responsabilités lisibles. En contrepartie, il faut coordonner plusieurs services, leurs secrets, leurs permissions et leurs états de connexion.
Résultat observable
La version déployée permet de parcourir le produit et couvre salons textuels et vocaux, conversations privées, webcam, partage d’écran, rôles, modération et navigation responsive. Je ne lui attribue pas de métrique d’usage qui n’a pas été mesurée.