2026en producciónrepo privado
Suite para juegos de cartas
TCG Suite: de contador de vidas offline a torneos y ligas en directo
Empezó contando vidas en Magic sin red y hoy organiza torneos y ligas en la nube, en directo y hasta 2.048 jugadores, con mazos, colección valorada y búsqueda de cartas. Magic, Riftbound y Lorcana; la partida sigue funcionando sin conexión.
Añadir un juego nuevo es una entrada en un registro, no una rama de código: el formato define vidas iniciales —o puntos, si se gana sumando—, contadores propios y disposición de mesa, y la interfaz se deriva de ahí. Así entraron Riftbound y Lorcana sin tocar las vistas.
Detrás hay un solo Worker de Cloudflare, y cada sala con estado es un Durable Object: la partida en línea, cada torneo, cada liga y los datos de cada usuario. El torneo vive en su objeto y se retransmite por WebSocket a jueces, mesa y jugadores, con suizo, pools, cortes, desempates, sanciones y relojes de ronda. La búsqueda de cartas va contra un índice FTS5 en D1 que se recarga cada día de forma atómica: todo o nada, después de que una carga a medias dejara el índice de producción roto media jornada.
El bug más instructivo fue de service worker. Corregir la CSP no llegaba a nadie que ya tuviera la app abierta: el SW precachea el `index.html` con las cabeceras con las que lo bajó, y como las cabeceras no forman parte del bundle, ningún hash cambiaba, `sw.js` quedaba idéntico byte a byte y el navegador no veía actualización. La solución fue sellar un hash de las cabeceras como `<meta>` en el HTML durante el build, para que cambiar la política cambie el documento y con él la revisión del precaché.