Estructura
Monorepo con pnpm y Turborepo, TypeScript estricto en todo el árbol:
| Paquete | Contenido |
|---|---|
apps/web | Next.js como PWA |
apps/game-server | Colyseus, salas autoritativas |
packages/game-engine | Phaser 3 |
packages/ai-gateway | Proveedores de LLM, imagen y voz |
packages/db | Esquema y migraciones de Supabase |
Por qué el servidor es autoritativo
En un juego educativo con puntaje, el cliente no puede ser la fuente de verdad: bastaría abrir las herramientas del navegador para inventarse un resultado. Colyseus mantiene el estado de cada sala en el servidor y los clientes solo envían intenciones.
El gateway de IA
En lugar de llamar a un proveedor desde la aplicación, hay un paquete que abstrae LLM, generación de imagen y síntesis de voz tras una interfaz común. Cambiar de proveedor —o mezclarlos según costo— no toca el código del juego.