Cómo lagiga.info lee en directo los resultados de GigaBracket
TL;DR
lagiga.info, el sitio de GIGA'GAMES, no guarda ninguna clasificación de torneo en su CMS. Las lee en una ruta pública de GigaBracket, integra el cuadro en un iframe y recurre a un podio estático si la ruta no responde. Este artículo sigue lo que pasa de un producto al otro, y en qué sentido.
Dos repositorios, tres fuentes de datos
GIGA'GAMES Federation Guadeloupe eSports opera dos aplicaciones. GigaBracket, lanzado en junio de 2026, gestiona los torneos: el artículo sobre GigaBracket cubre sus formatos y su stack. lagiga.info es el sitio público: agenda, disciplinas, noticias, directorios y resultados.
El sitio reparte su contenido entre tres fuentes, según quién lo produce:
- Payload CMS: lo que redacta la asociación, en un Postgres dedicado, editado desde
/admin. - PocketBase: lo que crean los usuarios, como las cuentas, los perfiles de jugadores y los equipos. La instancia y el esquema pertenecen a GigaBracket.
- El código: las páginas fijas y el contenido de respaldo, en
src/lib/data.ts.
Payload y PocketBase no se cruzan. Sin ninguno de los dos, el sitio arranca y sirve su contenido estático.
El contrato: una ruta pública de solo lectura
La clasificación depende del formato del torneo, y solo GigaBracket sabe calcularla. En eliminación, sigue la profundidad de eliminación y no el número de victorias. lagiga no recalcula nada: recibe el resultado.
Para ello, GigaBracket expone una ruta sin autenticación, como sus vistas de espectador:
GET /api/public/results/:shareId
El shareId es el identificador público de 12 caracteres que ya usan los enlaces /spectate. La ruta responde con un JSON cuyo orden de claves se mantiene estable, aquí reducido a unos pocos campos:
{
"shareId": "dEYzqldL00VY",
"gameName": "street-fighter-6",
"format": "double-elimination",
"status": "completed",
"playerCount": 11,
"standings": [
{
"rank": 1,
"playerName": "100scrupuls",
"played": 5,
"wins": 4,
"points": 4
}
]
}
Un shareId desconocido devuelve un 404 con not_found. Una caída de PocketBase devuelve un 503, un error inesperado un 500.
Un solo campo hace la unión
El contrato completo tiene 11 campos, y la página de resultados solo muestra uno: standings. El título, el lugar, la fecha y el número de jugadores vienen de Payload o del respaldo estático. La crónica y la galería solo existen en Payload.
La unión está en el campo shareId de la colección Payload tournament-results. Un miembro conectado lo rellena en el admin. Alimenta la clasificación y el cuadro integrado; si está vacío, no aparece ninguno de los dos.
En directo: dos velocidades en la misma página
La expresión «en directo» abarca dos mecanismos distintos en una página de resultados:
- La clasificación: la ruta de GigaBracket no guarda nada en caché, pero lagiga conserva su respuesta 300 segundos (
revalidate: 300). La tabla de clasificación puede retrasarse unos cinco minutos. - El cuadro integrado: el iframe carga
/embed/:shareId. Esta vista se suscribe a los partidos mediante el tiempo real de PocketBase y se actualiza con cada cambio.
Durante un torneo en curso, el cuadro puede llevar un marcador de ventaja sobre la clasificación que aparece justo encima.
GigaBracket acota dónde se puede integrar. Las rutas /embed/ declaran los dominios de lagiga en frame-ancestors. Todas las demás páginas responden frame-ancestors 'none' y X-Frame-Options: DENY.
Cuando GigaBracket no responde
fetchLiveResults nunca lanza una excepción. Devuelve null si el shareId está vacío, si la respuesta falla, si el JSON no es válido o si se corta la red. La página elige entonces entre tres vistas:
- La clasificación en directo: puesto, jugador, partidos, victorias y puntos.
- El podio estático de
data.ts: solo puesto y jugador, con una nota discreta. - El mensaje «clasificación próximamente», si no existe ni lo uno ni lo otro.
Payload sigue el mismo principio. Si falta su base de datos o una migración, la lectura falla de forma limpia y el sitio pasa al respaldo estático.
Lo que también pasa por PocketBase
La ruta de resultados no es el único vínculo. Las dos aplicaciones comparten la misma instancia de PocketBase, y dejé la regla escrita en una decisión del proyecto: el esquema vive en GigaBracket, para evitar dos fuentes de verdad.
Los intercambios van en los dos sentidos:
- De GigaBracket a lagiga: el catálogo de juegos (
games) y las estadísticas de jugadores (player_stats), que GigaBracket recalcula y lagiga lee. - De lagiga a GigaBracket: los perfiles (
player_profiles). Solo lagiga los crea y los edita; GigaBracket selecciona perfiles existentes para sus equipos y sus cuadros. - Los votos de los Awards: lagiga los escribe, y la página de voto de GigaBracket redirige hacia él.
Una segunda ruta pública, /api/public/map-tournaments, alimenta el mapa /carte con los torneos declarados visibles (mapVisible). El navegador la llama cuando el visitante cambia de filtro, de ahí los encabezados CORS abiertos.
Esta regla tiene un coste, también escrito en la decisión: toda colección nueva del lado de lagiga pasa por GigaBracket.
Tres idiomas, pero no los mismos en todas partes
lagiga.info ofrece francés, inglés y español. El criollo guadalupeño sigue servido en /gcf/, fuera del selector y del sitemap. Cada capa cubre un perímetro distinto:
- Diccionarios y contenido estático: francés, inglés y español.
- Payload: francés e inglés, con respaldo en francés. En
/es/, una crónica se muestra en inglés. - GigaBracket: francés, inglés y criollo, sin español.
La ruta de resultados supera esta diferencia sin daño, porque devuelve datos y no frases: nombres, puestos, cifras. Las etiquetas de las columnas vienen del diccionario de lagiga, y por tanto del idioma de la página.
El iframe, en cambio, la sufre. Su URL no lleva idioma y GigaBracket elige el suyo: un navegador que pide español recibe el cuadro en francés, dentro de una página en español.
Lo que muestra el #GCD 2026
El #GCD, evento principal de la federación, reunió 7 torneos y 143 participantes el 25 y 26 de julio de 2026 en Sainte-Anne. Esos torneos se disputaron en start.gg y Challonge, y seis se incorporaron después a GigaBracket mediante scripts de importación: cuatro desde start.gg, dos desde Challonge. Para esta edición, la ruta sirve por tanto resultados cerrados.
El séptimo, Domino Clash, se jugó en el lugar. Su shareId vale null: su página no llama a GigaBracket y muestra 13 participantes y un podio estático de tres nombres.