El problema
Las webs de estadísticas le dicen a un jugador de League of Legends su CS por minuto, su KDA y su win rate por campeón. No le dicen qué hacer con eso. La cuenta con la que hice las pruebas estaba en Silver I. Saber que promedia 6,5 de CS por minuto es un número. Saber que eso es normal en Silver, qué hace distinto un jugador Master y qué tres hábitos cambiar primero es un consejo. Esa segunda parte es lo que te da un coach, y la mayoría de los jugadores no tiene uno.
Qué construí
RuneSight es un coach con IA que lee tu historial real de partidas. Lo hice solo para AWS Rift Rewind 2025, un hackathon online donde Riot y AWS pedían construir algo sobre datos de partidas de League con Amazon Bedrock. Entras con tu Riot ID, carga tus últimas veinte partidas por cola, te muestra un dashboard y, al lado, un chat donde puedes preguntar "¿qué tal mi farmeo?" o "compárame con mi dúo" y recibir una respuesta basada en tus propias partidas.

Qué hace
- Dashboard por cola. Partidas recientes con win rate, KDA, CS y daño, separadas en pestañas: All, Ranked Solo/Duo, Flex, Normal y ARAM.
- Cinco coaches en un solo chat. Un Performance Analyst, un Champion Expert, un Team Synergy Specialist, un Comparison Analyst y un Match Summarizer, cada uno con su propio prompt y sus herramientas.
- Routing automático. En modo AUTO la pregunta llega sola al coach correcto. También puedes elegir uno a mano, y una etiqueta sobre cada respuesta dice quién contestó.
- Referencias por rango. Las respuestas comparan tus números con lo que hacen jugadores de rangos más altos, apoyadas en una pequeña base de conocimiento que escribí: seis guías sobre fundamentos, farmeo, macro, composición de equipo y drafts profesionales. El Comparison Analyst te pone lado a lado con un amigo.


Por qué estas herramientas
Amazon Bedrock era requisito del hackathon, y me daba Claude Sonnet 4.5 para escribir los consejos. Encima va Strands Agents, porque el producto en realidad son cinco especialistas que necesitan sus propias herramientas; Strands les permite compartir una herramienta que trae las partidas del jugador sin mezclar sus prompts. La API de Riot Games es la única fuente de verdad: cada respuesta parte de las partidas reales del jugador, no de lo que un modelo cree que hacen los jugadores de Silver.
Elegir el coach no es una llamada a la IA. Lo obvio sería preguntarle primero a un modelo ("¿cuál de estos cinco debería responder?"), pero eso es un viaje extra a Bedrock antes de que empiece la respuesta de verdad. En su lugar, el router puntúa la pregunta con palabras clave: "compara", "dúo" o "compañero" apuntan al Comparison Analyst, "cómo jugar" al Champion Expert, "últimas 10 partidas" al Summarizer, y el Performance Analyst se queda con lo que no está claro. Es tosco, instantáneo y gratis, y cuando se equivoca puedes leer la regla culpable y arreglarla en una línea.
Lo difícil
El rate limit de Riot. Una key personal de desarrollo permite 20 peticiones por
segundo y 100 cada dos minutos, y veinte partidas son veinte peticiones
separadas. Para que el dashboard se sintiera rápido precargué todas las
pestañas de cola, lo que se come el presupuesto de dos minutos en una sola
carga de página. El log se llenó de 429 Too Many Requests y el dashboard
mostraba tarjetas vacías.

La solución fue una caché que sabe cuánto tarda en caducar cada tipo de dato:
un Riot ID, 24 horas; la lista de partidas recientes, cinco minutos; una
partida terminada, una hora (nunca cambia). A eso se suman cinco minutos de
caché en el navegador y esperas crecientes ante cada 429. Una partida que ya
terminó es un hecho, así que se pide una vez. De paso aprendí que el tag de un
Riot ID como Nombre#LAG no indica la región, así que ahora el backend le
pregunta a Riot dónde juega realmente el jugador.
La otra lección fue más pequeña y más molesta. El frontend compilaba en mi
laptop y fallaba en Amplify, siete commits seguidos, porque el .gitignore
estándar de Python ignora cualquier carpeta llamada lib/, y ocho archivos de
mi app de React vivían en frontend/src/lib. El arreglo fue una línea.
En qué se convirtió
Al final del 10 de noviembre RuneSight estaba online en Amplify, con el backend de FastAPI en un contenedor de Lambda detrás, todo dentro del entorno de AWS en torno al que giraba el hackathon. El chat respondía con números reales de partidas reales: tasa de muertes, CS por minuto frente a referencias por rango, un cara a cara con un amigo.
Después el modelo cambió. Todo estaba construido y ajustado sobre Claude Sonnet 4.5 en Bedrock, y el video demo se grabó con él. Luego tuve problemas con los créditos de Sonnet en mi cuenta de AWS, y el backend desplegado pasó a Amazon Nova Pro como respaldo. El último commit, del 11 de noviembre, es sobre todo una nota en el README que lo explica: la versión online es un respaldo, el tool calling no está ajustado para Nova, y si quieres verlo como se pensó, lo corres en local con Sonnet.
Me alegra haberlo dejado por escrito en vez de esconderlo. La app ya no está online, pero el repo es público y esa nota sigue siendo lo primero que se lee.
