Scuttle.gg
a full-stack League of Legends stats tracker with real-time match data, cached Riot API integration, and an ML-powered draft analysis tool.

Next.js · React · TypeScript · Tailwind CSS · Framer Motion · Recharts · NextAuth · MongoDB · Upstash Redis · FastAPI · scikit-learn
why i built it
Scuttle lets you search any Riot ID and see ranked progress, champion mastery, and match history across 11 regions. under the hood it's a full authenticated app — GitHub sign-in, saved search history, and a caching layer that keeps it fast under Riot's rate limits. the standout feature is draft intelligence: a separate machine learning service that scores a 10-champion draft against a model trained on nearly 15,000 ranked matches, and lets you swap a single pick to see how the score shifts.
selected details
- built a typed Riot API client with automatic retry/backoff and platform-to-regional routing across all 11 supported regions
- added GitHub authentication (NextAuth) with persisted per-user search history in MongoDB
- cut redundant Riot API calls with Upstash Redis caching (7-day match cache, 1-hour mastery cache)
- shipped KDA and performance trend charts with Recharts
how it works
- collected and processed 14,826 ranked matches into a training pipeline
- trained and evaluated a logistic regression model using rolling forward-patch validation, so it's tested the way it'll actually be used — on metas it hasn't seen yet
- served the model through a separate FastAPI microservice, called server-side from a Next.js API route
- built a counterfactual draft explorer that swaps one pick and shows how the model's score changes, without ever claiming a win probability the data can't support