About the Project: ScoutMaster 3000

Inspiration

Competitive esports coaching is a data-heavy grind. Coaches spend hours manually scraping match histories, watching VODs, and collating spreadsheets just to answer one simple question: "How do we beat next week's opponent?"

We realized that while the data exists (thanks to GRID), the synthesis is missing. We wanted to build a tool that doesn't just show stats, but thinks like a coach—identifying habits, weaknesses, and winning conditions instantly. ScoutMaster 3000 was born from the desire to turn raw data into a 30-second "How to Win" game plan.

What it does

ScoutMaster 3000 is an automated tactical analysis engine for League of Legends and VALORANT.

  • Instant Scouting Reports: Enter a team name, and within seconds, get a comprehensive profile of their playstyle, map pool, and draft tendencies.
  • "How to Win" Engine: Our proprietary logic engine analyzes the data to generate ranked, confidence-scored strategic advice (e.g., "Ban Map X," "Exploit their passive early game").
  • Matchup Predictor: Compare your team directly against an opponent to see win probabilities and head-to-head stat deltas.
  • PDF Exports: Generates professional-grade, shareable PDF dossiers for offline strategy meetings.
  • Multi-Title Support: Seamlessly handles both MOBA (LoL) and FPS (VALORANT) data structures from a single interface.

How we built it

We built a robust, type-safe monorepo to handle the complexity of esports data:

  • Frontend: Built with Vite + React (TypeScript) for a snappy, responsive UI. We focused heavily on "glance value"—using visual cues like color-coded aggression badges and win-rate heatmaps.
  • Backend: A Node.js API that acts as an intelligent layer over the GRID ecosystem. We use GraphQL to query the GRID Central Data and Series State APIs.
  • Infrastructure: Hosted entirely on Vercel. We migrated a traditional Express app to Vercel Serverless Functions to ensure infinite scalability and zero idle costs.
  • Data Layer: We implemented a custom request coalescing and caching layer (using Vercel KV / Redis) to handle heavy GRID payloads efficiency, preventing rate limits while delivering sub-second repeated queries.
  • PDF Engine: We utilized puppeteer-core with a serverless-optimized Chromium build (@sparticuz/chromium) to generate pixel-perfect PDFs on the fly within function memory limits.

Challenges we ran into

  • Serverless PDF Generation: Running a full browser for PDF generation in a serverless environment is notoriously difficult due to size (50MB limits) and memory constraints. We had to carefully engineer a specialized build using puppeteer-core and compressed binaries to make it reliable on Vercel.
  • Data Normalization: GRID provides incredibly granular data, but LoL and VALORANT are fundamentally different games. Designing a unified internal schema (ScoutMasterReport) that could represent "Draft Phases" (LoL) and "Map Vetos" (VALORANT) polymorphically without type soup was a significant architectural challenge.
  • The "Coach's Brain": Writing the logic for the "How to Win" engine was tricky. We had to move from hard-coded if/else statements to a weighted scoring system that evaluates "Impact," "Severity," and "Confidence" to ensure we only surface high-quality advice.

Accomplishments that we're proud of

  • The Polish: We didn't just build a dashboard; we built a product. From the "electric blue" design system to the branded PDF exports, it feels ready for professional use.
  • Performance: Despite processing heavy match history payloads, our caching and coalescing strategies make the app feel instant.
  • The "Matchup" Experience: Seeing the "Win Probability" swing dynamically based on the specific matchup makes the data feel alive and actionable.

What we learned

  • Data is Narrative: Raw numbers are boring. Telling a story ("This team is aggressive but tilts early") is powerful. We learned to prioritize insights over tables.
  • Serverless Constraints breed Creativity: The limitations of Vercel functions forced us to write cleaner, more modular code and implement better caching than we would have with a traditional server.

What's next for ScoutMaster 3000

  • Live Game Tracking: hooking into GRID's live websocket feeds to provide real-time adjustments during a match ("They are rotating to A!").
  • LLM "Scout Assistant": Integrating a local LLM to let coaches "chat" with the data (e.g., "Find me a game where they threw a 5k gold lead").
  • Video Integration: Deep-linking specific timestamps in match VODs corresponding to the key moments identified in our report.

Built With

Share this project:

Updates