Inspiration
Esports coaches at organizations like Cloud9 spend hours reviewing match footage. They pause, rewind, take notes, cross-reference stats. A single best-of-three series takes 4-6 hours to review manually.
GRID provides match data for every professional League of Legends and VALORANT game. The data exists, but turning it into coaching feedback before the next match requires manual effort.
I built an AI coach that analyzes GRID match data and explains it conversationally, with voice output.
What it does
Zenith is a voice-enabled AI coaching assistant. Ask Coach Jack "what went wrong?" and you hear:
"DnDn was solid - 3.4 KDA, showed up for every objective. But bot lane got caught three times before 10 minutes. Same mistake each time: pushed up, no wards. Fix the vision and those deaths don't happen."
Response time is under 2 seconds from question to spoken answer.
The app pulls LCK matches from GRID (T1 vs Gen.G, DRX vs Nongshim RedForce, HLE vs KT Rolster). All stats come from GRID's official Central Data API.
Features:
- Voice Output - Coach Jack speaks responses through ElevenLabs. Coaches can listen while reviewing footage or walking between scrims.
- Zenith Score - One number (0-100) summarizing player performance across combat, economy, and objectives.
- Interactive Heatmaps - Summoner's Rift map with kill locations, death locations, objective fights, and ward placements.
- Player Comparison - Side-by-side stats for any two players.
- What-If Analysis - "What if we contested Baron?" with probability calculations.
- Pattern Detection - "Jungler ganks top pre-6 with 22% success rate."
- VOD Timestamps - Review agenda with timestamps for key moments.
- Conversation Memory - Ask about a player, then ask a follow-up. Coach Jack remembers context.
How I built it
| Layer | Technology |
|---|---|
| Frontend | Next.js 16, React 19, TypeScript, Tailwind CSS |
| Backend | Python 3.12, FastAPI |
| AI | AWS Bedrock (Amazon Nova), Anthropic Claude (fallback) |
| Voice | ElevenLabs (eleven_turbo_v2_5 model) |
| Data | GRID Esports Central Data API |
| Dev Tools | PyCharm with Junie |
User asks question → Next.js frontend → FastAPI backend → Three parallel calls:
- GRID API for match data
- AWS Bedrock for AI analysis
- ElevenLabs for voice synthesis
I used Junie throughout development. It helped with the ElevenLabs integration, GRID API client with pagination and retry logic, and fixing a bug where Map from lucide-react was shadowing JavaScript's Map.
Challenges I ran into
Voice Latency - First version took 6 seconds (3s AI + 3s audio). I switched to ElevenLabs turbo model, limited responses to 500 characters with sentence boundary detection, and added caching. Now under 2 seconds.
GRID Data Inconsistency - Player assists appear at participant.stats.killAssistsGiven or player.assists depending on endpoint. I built a normalization layer so the frontend gets consistent data shapes.
React Hydration Errors - Next.js 16 is strict about server/client rendering. Fixed by adding "use client" to components using browser APIs.
Making AI Sound Human - Early Coach Jack returned bullet points. Fixed through prompt engineering: no bullets, no "based on the data," talk like reviewing film with the team.
Accomplishments that I'm proud of
- Voice output works - Coach Jack gives spoken feedback, not text walls
- Real data throughout - Select match → see stats → hear analysis (no mocks)
- Cut response time from 6 seconds to under 2
- Zero console errors, polished UI
- AI fallback chain works - Bedrock → Anthropic → pre-written responses
What I learned
- Voice should have been core from day one, not added at end
- Prompt engineering matters more than model selection for personality
- Normalize data early - I kept hitting shape issues throughout development
- Single metrics (Zenith Score) more useful than data dumps
What's next for Zenith
- Live match analysis during scrims
- Mobile app for coaches on the go
- Draft analysis across team history
- Multi-game support (VALORANT, CS2)
- Integration with team video review tools
Built With
- aws-bedrock
- elevenlabs
- fast-api
- grid-esports
- jetbrains-junie
- next.js
- pycharm
- python
- react
- tailwind
- typescript
Log in or sign up for Devpost to join the conversation.