About Rift Scout
Inspiration
Every pro League of Legends team has analysts who prepare scouting reports before matches—detailed breakdowns of opponents' champion pools, tendencies, and weaknesses. But solo queue players go in blind, relying on gut instinct and maybe a quick op.gg lookup.
We wanted to bridge that gap. What if every ranked player could have access to the same quality of pre-game intel that pros get?
What We Learned
- GRID's esports data is incredibly rich. Professional match data includes detailed item builds, game timelines, and player performance metrics that simply aren't available elsewhere.
- Rate limiting is a real constraint. Riot's API has strict limits, so we had to design a caching layer and background sync system to keep data fresh without hammering the API.
- The "38 questions" framework works. By structuring our analysis around specific questions players actually ask ("Do I win this 1v1?", "Who should I focus?", "When do they spike?"), we created output that's immediately actionable.
How We Built It
Stack: Next.js 14, TypeScript, Tailwind CSS, SQLite, Docker
Data Pipeline:
- A background indexer pulls professional tournament data from GRID's GraphQL API hourly
- We store champion stats, matchups, and item builds in SQLite for fast queries
- When a user scouts a game, we hit Riot's Spectator API for live game data
- We fetch recent match history for each opponent and analyze their tendencies
- Our analysis engine combines pro meta data with player-specific patterns to generate personalized advice
Key Components:
- Player-focused analysis answering 38 tactical questions
- Team composition classifier (early game, scaling, teamfight, split-push archetypes)
- Win probability calculator based on pro matchup data
- Enemy tendency detector (aggressive/passive, tilted/streaking, one-tricks)
Challenges
Challenge 1: Making it fast enough to be useful. Players have ~60 seconds in loading screen. We needed sub-10-second response times while fetching data for 10 players. Solution: aggressive caching, shallow analysis mode, and background pre-syncing of player data.
Challenge 2: Turning data into advice. Raw stats aren't helpful mid-load. "43% win rate" means nothing without context. We built a translation layer that converts statistics into tactical guidance: "You lose the 1v1 after level 6—play for ganks."
Challenge 3: Handling missing data gracefully. Not every player has extensive match history. Not every champion has enough pro games for reliable stats. We built confidence scoring and fallback logic so the app never shows misleading information.
Built With
- docker
- next.js-14
- sqlite
- tailwind-css
- typescript
Log in or sign up for Devpost to join the conversation.