← Projets
Archivé

TikTok Live Game

Jeu interactif où les spectateurs d'un live TikTok influencent la partie en temps réel.

  • Node.js
  • JavaScript
  • TikTok Live Connector
  • Flask
  • WebSocket

Contexte

TikTok Live Game est un projet expérimental personnel imaginé pour transformer un live TikTok en expérience de jeu collective. L'idée : les spectateurs ne regardent plus passivement — ils votent, offrent des cadeaux et déclenchent des événements qui modifient la partie en cours. Le projet explore l'intersection entre streaming en direct et gamedesign participatif.

Problème résolu

L'API TikTok Live est peu documentée et ne fournit pas de SDK officiel pour les événements temps réel (votes, cadeaux, commentaires). Le défi technique était de capturer ces événements de façon fiable, les interpréter rapidement et les injecter dans la logique de jeu sans introduire de latence perceptible pour les spectateurs. Il fallait également gérer les pics d'engagement (rush de cadeaux simultanés) sans saturer le système.

Architecture technique

Le projet s'articule en deux couches communicantes via WebSocket. Un service Node.js embarque TikTok Live Connector pour s'abonner aux événements du live (commentaires, likes, cadeaux). Il normalise les données et les transmet en temps réel à un bridge Flask (Python) qui héberge la logique de jeu. Flask reçoit chaque événement, applique les règles (cooldowns par type de cadeau, système de combos, compteurs cumulatifs) et renvoie l'état de jeu mis à jour au client. Ce découplage Node ↔ Flask permet d'itérer sur la logique de jeu indépendamment du connecteur TikTok.

Ce que j'ai appris

Ce projet m'a confronté à l'event-driven programming dans un contexte où la source d'événements est externe et non maîtrisée (API non officielle, volumes variables). J'ai appris à concevoir un système résilient face aux pics d'engagement : debounce, cooldowns, file d'attente d'événements. La communication bidirectionnelle Node↔Flask via WebSocket m'a aussi donné une vision concrète des architectures multi-process et des contraintes de synchronisation d'état entre deux runtimes différents.