Cloud9 x JetBrains Hackathon — Category 1: Comprehensive Assistant Coach
Live Demo: https://d38g96gibrpid5.cloudfront.net
API Endpoint: https://ljun7rqyx7.execute-api.us-east-1.amazonaws.com/prod
VACHOUT is an AI coaching platform that turns raw GRID esports match data into actionable coaching decisions for Valorant teams. It doesn't just crunch numbers — it tells the story of a match, identifies what went wrong, and prescribes concrete practice drills with time estimates.
The problem: Coaches spend hours manually reviewing VODs and spreadsheets to find patterns. By the time insights are ready, the next match is already happening.
Our solution: Ingest a match from GRID's API, and within seconds get:
- A match narrative that tells the story of what happened
- Per-player coaching notes with specific drills
- Economy analysis with buy coordination gaps
- An AI coach you can ask questions in natural language
GRID Esports API → Data Ingestion → Analytics Engine → AI Coaching Layer → Interactive Dashboard
↓ ↓
Micro Analytics Strands Agent Pattern
(per-player) (tool-calling AI coach)
Macro Analytics Gemini AI Integration
(team strategy) (deep analysis)
- Ingestion — Fetches series data from GRID's GraphQL API (tournaments, games, rounds, player stats)
- Micro Analytics — Per-player profiling: KAST, K/D, headshot %, first kill/death rates, free death correlation, clutch rates, weapon profiles, mistake detection
- Macro Analytics — Team-level strategy: win type distribution, site preferences, side performance, economy phase win rates, pistol round impact, agent compositions
- AI Layer — Gemini-powered insight generation with Strands agent pattern for interactive coaching
The AI Coach Chat uses a Strands-inspired agent pattern with registered tools:
| Tool | What it does |
|---|---|
get_player_profiles |
Queries player performance data (KAST, K/D, mistakes, etc.) |
get_strategy_summary |
Queries team strategy (win types, site preferences, side performance) |
get_economy_analysis |
Queries economy data (buy phase win rates, pistol impact) |
get_match_info |
Queries match metadata (teams, scores, maps) |
The agent gathers data from all tools, then either:
- Uses Gemini AI to generate a natural language coaching response, or
- Falls back to a rule-based engine that still references specific player names and real stats
Every response is grounded in data — no hallucinated stats.
Momentum charts showing round-by-round lead changes, streak detection, and key moments. The match narrative tells you what happened in plain English.
Detailed per-player breakdown with 8 key metrics, weapon profiles, multikill tracking, mistake detection, and auto-generated coaching notes per player.
Gemini-generated insights categorized as Player Improvement, Strategy Adjustment, or Practice Priority. Each insight includes evidence (specific stats) and a concrete coaching action with time estimates.
Structured VOD review agenda with expandable sections (pistol rounds, economy management, key rounds, player focus). Practice priorities sidebar for quick reference.
Conversational interface powered by the Strands agent. Ask questions like:
- "Who was the weakest player and why?"
- "Give me a 30-min practice plan"
- "How can we improve our attack side?"
Shows which engine powered the response (Strands Agent / Gemini AI / Analytics).
Buy phase win rates, pistol round impact analysis, money trends, and buy deviation detection (players who misbuy relative to team average).
Win type distribution, site preferences with win rates, attack/defense performance per map, agent composition analysis.
Simulate round outcomes by adjusting player counts, economy phase, side, and action. Based on historical data patterns from the match.
| Layer | Technology |
|---|---|
| Frontend | React 18 + TypeScript + Vite |
| Backend | Python 3.12 on AWS Lambda |
| AI/LLM | Google Gemini 2.0 Flash (REST API, no SDK) |
| Agent Pattern | Strands-inspired tool-calling architecture |
| Data Source | GRID Esports API (GraphQL) |
| Hosting | S3 + CloudFront (frontend), API Gateway + Lambda (backend) |
| Storage | S3 (analytics cache) |
- Gemini REST API instead of SDK — eliminates grpc/protobuf dependencies, keeps Lambda package under 10MB
- Strands agent pattern — tool-calling loop where the AI decides which data to query, making responses contextual and grounded
- Serverless — zero infrastructure to manage, scales to zero when not in use, deploys in seconds
- No CDK/CloudFormation — pure AWS CLI deployment for speed and simplicity
Vachout/
├── backend/
│ ├── lambda_handler.py # API Gateway router
│ ├── handlers/
│ │ ├── ingestion_handler.py # GRID data ingestion
│ │ ├── analytics_handler.py # Player/strategy/economy endpoints
│ │ ├── insights_handler.py # AI-generated insights + game review
│ │ ├── chat_handler.py # Strands agent chat endpoint
│ │ └── scenario_handler.py # What-if scenario simulator
│ ├── services/
│ │ ├── gemini_client.py # Direct Gemini REST API client with retry
│ │ ├── grid_client.py # GRID GraphQL API client
│ │ ├── ingestion.py # Data ingestion pipeline
│ │ ├── micro_analytics.py # Per-player analytics engine
│ │ ├── macro_analytics.py # Team strategy analytics engine
│ │ ├── insight_generator.py # AI insight generation with fallbacks
│ │ ├── strands_agent.py # Strands-pattern coaching agent
│ │ └── scenario_modeler.py # What-if scenario engine
│ └── models/
│ └── data_models.py # All data models and enums
├── frontend/
│ ├── src/
│ │ ├── App.tsx # Main app with sidebar navigation
│ │ ├── api/client.ts # API client (axios)
│ │ ├── types/index.ts # TypeScript type definitions
│ │ ├── styles/theme.ts # Valorant-inspired color theme
│ │ └── components/
│ │ ├── MatchSelector.tsx # Landing page + tournament/series picker
│ │ ├── MatchOverview.tsx # Momentum charts + match narrative
│ │ ├── PlayerProfiles.tsx # Player cards + coaching notes
│ │ ├── StrategyView.tsx # Team strategy analysis
│ │ ├── EconomyView.tsx # Economy analysis + trends
│ │ ├── GameReview.tsx # VOD review agenda
│ │ ├── InsightsView.tsx # AI coaching insights + practice plan
│ │ ├── CoachChat.tsx # AI coach chat interface
│ │ └── ScenarioView.tsx # What-if scenario simulator
│ ├── index.html
│ ├── package.json
│ ├── vite.config.ts
│ └── tsconfig.json
└── README.md
- KAST — Kill/Assist/Survive/Trade percentage
- Free Death Correlation — How often the team loses a round after this player dies without being traded
- Mistake Detection — Identifies free deaths and economy mismanagement per round
- Weapon Profile — Kill distribution across weapons, Operator dependency score
- Entry Stats — First kill rate, first death rate
- Clutch Performance — Success rate in 1vN situations
- Win Type Distribution — Elimination vs bomb vs time wins
- Site Preferences — Which sites the team attacks and their win rates
- Side Performance — Attack vs defense win rates per map
- Economy Phases — Win rates during pistol, eco, force buy, full buy rounds
- Pistol Impact — How pistol round outcomes affect the rest of the half
- Agent Compositions — Which agent lineups were used and their success rates
- AWS CLI configured with appropriate permissions
- Node.js 18+ and npm
- Python 3.12
# Copy backend into lambda package
cp -r backend/ lambda_package/backend/
# Zip and deploy
python zip_lambda.py
aws lambda update-function-code \
--function-name valorant-ai-coach \
--zip-file fileb://lambda_package.zip \
--region us-east-1cd frontend
npm install
npx vite build
aws s3 sync dist/ s3://valorant-ai-coach-frontend-476114 --delete --region us-east-1
aws cloudfront create-invalidation --distribution-id E42DOH83AHZ8B --paths "/*"| Variable | Description |
|---|---|
GEMINI_API_KEY |
Google Gemini API key |
GRID_API_KEY |
GRID Esports API key |
S3_BUCKET |
S3 bucket for analytics cache |
- Storytelling over stats — The match narrative tells coaches what happened in plain English before diving into numbers
- Every insight is actionable — No insight exists without a coaching action (specific drill + time estimate)
- Grounded AI — The Strands agent queries real data through tools before responding. No hallucinated stats.
- Graceful degradation — When AI quota is exhausted, the rule-based engine still delivers specific, data-driven coaching using the same tool pipeline
- Coach-first UX — Designed for the 10 minutes between maps, not for data scientists. Quick navigation, practice plan sidebars, suggestion chips in chat
Built for the Cloud9 x JetBrains Hackathon using GRID's official esports data platform.
Category: Comprehensive Assistant Coach — AI-powered Moneyball-style analytics for Valorant