El modelo nunca calcula
Los números los produce una capa de métricas en el servidor. El modelo de lenguaje solo los narra. Si le pides un porcentaje que no le dieron, debe decir que no lo tiene — no estimarlo.
Proyecto personal
LoL Coach lee tus partidas clasificatorias directamente de la API de Riot, las guarda y las analiza con estadística de verdad. Te dice qué está fallando, con cuánta confianza lo dice, y qué hacer en la próxima partida. Cuando los números no dan para afirmar algo, lo dice en vez de rellenar el hueco.
Las páginas de estadísticas de League te enseñan qué pasó: tu winrate, tu KDA, tu CS por minuto. Ninguna te dice por qué ni qué hacer. Y las que lo intentan suelen apoyarse en muestras diminutas: tres partidas con un campeón y ya te lo recomiendan al 100 % de victorias.
Este proyecto nació de esa frustración. Si voy a cambiar cómo juego, quiero saber si la señal es real o es ruido — y quiero que quien me lo diga sepa distinguirlo.
Todo el diseño sale de tres invariantes que no se rompen en ninguna parte del código:
Los números los produce una capa de métricas en el servidor. El modelo de lenguaje solo los narra. Si le pides un porcentaje que no le dieron, debe decir que no lo tiene — no estimarlo.
Nada sobre tu rendimiento sale de la memoria del modelo. Todo viene de tus partidas guardadas. Cuando falta el dato, la respuesta es «no lo sé», no una aproximación plausible.
El navegador nunca habla con la API de Riot ni con el modelo. Pide a su propio servidor, que es quien tiene las credenciales y quien controla el ritmo de las llamadas.
Cinco piezas, cada una con una responsabilidad. Los datos van siempre en la misma dirección:
Descarga partidas y cronologías de la API de Riot en lotes, respetando los límites de peticiones.
PostgreSQL guarda cada partida como documento y, aparte, las proyecciones ya extraídas.
Funciones puras que convierten partidas en hallazgos con su medida de confianza.
Una API JSON y una interfaz sin dependencias — sin framework, sin paso de compilación.
Un LLM que corre en la GPU de la misma máquina y consulta las métricas mediante herramientas.
Un proceso en segundo plano repite la ingesta periódicamente para cada cuenta registrada, así que los datos están al día sin que nadie pulse nada. Todo se ejecuta en contenedores compilados, detrás de un proxy inverso con TLS, sobre un servidor propio en casa. Ninguna partida sale de esa máquina: el modelo es local, así que las preguntas que le haces al coach no viajan a ningún servicio externo.
Es donde está el trabajo de verdad, y lo que separa esto de un panel de gráficas bonito.
Sin framework de front-end, sin librería de gráficas y sin paso de compilación en desarrollo. Las gráficas son SVG escrito a mano. La dependencia de producción es el cliente de PostgreSQL.