Skip to content

AbinjithTK/Vachout

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

VACHOUT — AI-Powered Coaching Analytics for Competitive Valorant

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


What is VACHOUT?

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

How It Works

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)

Data Pipeline

  1. Ingestion — Fetches series data from GRID's GraphQL API (tournaments, games, rounds, player stats)
  2. Micro Analytics — Per-player profiling: KAST, K/D, headshot %, first kill/death rates, free death correlation, clutch rates, weapon profiles, mistake detection
  3. Macro Analytics — Team-level strategy: win type distribution, site preferences, side performance, economy phase win rates, pistol round impact, agent compositions
  4. AI Layer — Gemini-powered insight generation with Strands agent pattern for interactive coaching

The Strands Agent

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.


Features

Match Story

Momentum charts showing round-by-round lead changes, streak detection, and key moments. The match narrative tells you what happened in plain English.

Player Profiles

Detailed per-player breakdown with 8 key metrics, weapon profiles, multikill tracking, mistake detection, and auto-generated coaching notes per player.

AI Coaching Insights

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.

Game Review Agenda

Structured VOD review agenda with expandable sections (pistol rounds, economy management, key rounds, player focus). Practice priorities sidebar for quick reference.

AI Coach Chat

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).

Economy Analysis

Buy phase win rates, pistol round impact analysis, money trends, and buy deviation detection (players who misbuy relative to team average).

Strategy View

Win type distribution, site preferences with win rates, attack/defense performance per map, agent composition analysis.

What-If Scenarios

Simulate round outcomes by adjusting player counts, economy phase, side, and action. Based on historical data patterns from the match.


Tech Stack

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)

Why these choices?

  • 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

Project Structure

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

Key Analytics

Micro Analytics (Per-Player)

  • 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

Macro Analytics (Team-Level)

  • 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

Deployment

Prerequisites

  • AWS CLI configured with appropriate permissions
  • Node.js 18+ and npm
  • Python 3.12

Backend

# 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-1

Frontend

cd 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 "/*"

Environment Variables (Lambda)

Variable Description
GEMINI_API_KEY Google Gemini API key
GRID_API_KEY GRID Esports API key
S3_BUCKET S3 bucket for analytics cache

What Makes This Different

  1. Storytelling over stats — The match narrative tells coaches what happened in plain English before diving into numbers
  2. Every insight is actionable — No insight exists without a coaching action (specific drill + time estimate)
  3. Grounded AI — The Strands agent queries real data through tools before responding. No hallucinated stats.
  4. Graceful degradation — When AI quota is exhausted, the rule-based engine still delivers specific, data-driven coaching using the same tool pipeline
  5. Coach-first UX — Designed for the 10 minutes between maps, not for data scientists. Quick navigation, practice plan sidebars, suggestion chips in chat

Team

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

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors