model avatar π TactiScout Project Story Inspiration The Problem: The Grassroots Scouting Gap I watched grassroots football coaches evaluate players with paper and gut instinct. Meanwhile, professional clubs deploy AI-powered scouting systems costing $1,000+ per monthβtools like Wyscout, StatsBomb, and Opta Sports that aren't accessible to the 99% of coaches working in grassroots academies.
This inequality bothered me.
A talented 14-year-old in a rural area has ==zero chance== of professional evaluation because scouts only visit elite academies in major cities. Yet the data to scout them exists:
Match footage (video recordings) League statistics (goals, assists, pass completion) Performance metrics (speed, positioning, decision-making) What was missing? Accessible AI.
The Spark When I learned about the AWS + Anthropic Hackathon, I realized this was the perfect opportunity to build something that could ==democratize scouting==. The combination of:
Technology Why It Matters Strands Agents SDK Multi-agent orchestration Claude 3.5 Sonnet Enterprise-grade reasoning AWS Serverless Affordable, scalable infrastructure Amazon Bedrock No GPU costs, pay-per-token ...meant I could build enterprise-grade analysis for pocket-change costs.
Vision Statement β¨ "How can AI close the grassroots scouting gap?" What It Does TactiScout is an autonomous multi-agent AI system that transforms raw player data into professional scouting reports in ==under 5 minutes== for $0.30β$1.50 per report.
Core Capabilities 1οΈβ£ Multi-Source Data Ingestion Coaches can input player data in 4 ways:
Player ID β Query API-Football database in real-time CSV Upload β Bulk stats from league systems JSON β Raw structured data Match Video β Phone recording β Claude Vision extracts stats frame-by-frame 2οΈβ£ Tactical Intelligence The system doesn't just score playersβit understands their role:
Compares against 14 positional archetypes (CB, RB, LB, CM, AM, LW, RW, ST, GK, etc.) Identifies archetype matches (e.g., "This player is similar to Virgil van Dijk") Generates gap analysis (what's missing actionable development areas to reach elite level) 3οΈβ£ Multi-Dimensional Evaluation Scores across 5 key dimensions:
Dimension Range Example π Athleticism 0β100 Speed, strength, endurance β½ Technical Skill 0β100 Ball control, passing accuracy π§ Decision-Making 0β100 Tactical awareness, timing π Positioning 0β100 Game reading, spatial awareness π₯ Leadership 0β100 Communication, influence Hybrid Scoring Philosophy:
Final Score = Base Score (algorithmic) + LLM Adjustment (bounded Β±10) 80% algorithmic (position-weighted baseline) 20% LLM (contextual adjustment, bounded to Β±10 for fairness) 4οΈβ£ Personalized Development Identifies the 2 weakest dimensions and generates an ==8-week training plan==:
Weeks Phase Focus 1β2 Foundation ποΈ Basic skill drills 3β4 Intermediate π 1v1 scenarios 5β8 Advanced π Game-realistic situations 5οΈβ£ Beautiful Report Generation HTML scouting report with:
Overall score & tier (Youth, Amateur, Semi-Pro, Professional) 5-dimension radar chart Archetype comparison with elite profiles Training plan checklist Downloadable PDF How We Built It System Architecture βββββββββββββββββββββββββββββββββββββββ β Coach (Web Browser) β β React UI: Input form β ββββββββββββββββ¬βββββββββββββββββββββββ β ββββββββββββββββΌβββββββββββββββββββββββ β API Gateway (REST) β β POST /scout (async) β β GET /scout/{jobId} β ββββββββββββββββ¬βββββββββββββββββββββββ β ββββββββββββββββΌβββββββββββββββββββββββ β AWS Lambda: Ingest Function β β β Validate input β β β Start DynamoDB job β β β Invoke orchestrator β ββββββββββββββββ¬βββββββββββββββββββββββ β ββββββββββββββββΌβββββββββββββββββββββββ β Orchestrator Agent β β (Strands SDK) β β β β βββββββββββββββββββββββββββββββ β β β Data Retrieval Agent βββ β β βββββββββββββββββββββββββββββββ β β β β β β β βββββΌββββββββββββββββββββββββββ β β β β Tactical Analyst Agent β β β β βββββ¬ββββββββββββββββββββββββββ β β β β β β β βββββΌββββββββββββββββββββββββββ β β β β Evaluation Agent βββ β β βββββ¬ββββββββββββββββββββββββββ β β β β β βββββΌββββββββββββββββββββββββββ β β β Development Agent β β β βββββ¬ββββββββββββββββββββββββββ β β β β β βββββΌββββββββββββββββββββββββββ β β β Report Agent β β β βββββββββββββββββββββββββββββββ β ββββββββββββββββ¬βββββββββββββββββββββββ β ββββββββ΄βββββββββββ¬ββββββββββ βΌ βΌ βΌ DynamoDB S3 CloudWatch (Job state) (Reports) (Logs) 7 Autonomous Agents Each agent has a ==single responsibility== and independent reasoning capability:
Agent Responsibility Primary Tools π― Orchestrator Pipeline control, state management invoke_step, update_status π Data Retrieval Normalize stats (4 sources) fetch_api, fetch_s3, normalize π Tactical Analyst Compare archetypes compare_profiles, generate_dna βοΈ Evaluation Score 5 dimensions compute_scores, write_results π Development Generate training plans analyze_gaps, create_plan π Report Generate HTML output compile_data, upload_s3 π¬ Video Analysis Extract from footage extract_frames, claude_vision Technical Stack Layer Technology Why π€ AI/LLM Claude 3.5 Sonnet Best reasoning + vision Amazon Bedrock Managed inference, no infra π Agent Framework Strands Agents SDK Multi-agent orchestration Kiro Dev environment & steering TypeScript Type-safe, production-ready βοΈ Compute AWS Lambda Serverless, event-driven Node.js 20.x Fast cold starts 9 functions Modular, independent πΎ Storage DynamoDB State, jobs, caching S3 Report storage, file uploads π API API Gateway REST endpoints Async/polling Non-blocking UX π‘ Observability CloudWatch Logs, metrics, alarms Structured logging Debugging & analytics π IaC AWS SAM Infrastructure as Code template.yaml Reproducible deployment π External API-Football Player stats database Agent Implementation: Evaluation Agent // evaluation.js (AWS Lambda function) const invokeEvaluationAgent = async (playerStats, tacticaDNA) => { // Step 1: Compute base scores using position weights const baseScores = computePositionWeights( playerStats, tacticaDNA.position );
// Step 2: Get LLM contextual adjustment const llmResponse = await bedrock.invoke({ modelId: "anthropic.claude-3-5-sonnet", messages: [{ role: "user", content: ` Base scores: ${JSON.stringify(baseScores)} Tactical DNA: ${JSON.stringify(tacticaDNA)}
Should we adjust scores? Return JSON with:
{ adjustment: number (bounded -10 to +10), rationale: string }
`
}]
});
const { adjustment } = parseJSON(llmResponse);
// Step 3: Apply bounded adjustment const finalScores = { athleticism: Math.min(100, Math.max(0, baseScores.athleticism + adjustment)), technical: Math.min(100, Math.max(0, baseScores.technical + adjustment)), decisionMaking: Math.min(100, Math.max(0, baseScores.decisionMaking + adjustment)), positioning: Math.min(100, Math.max(0, baseScores.positioning + adjustment)), leadership: Math.min(100, Math.max(0, baseScores.leadership + adjustment)) };
return finalScores; }; Cost Optimization Cost breakdown per report:
Component Cost Data Retrieval (API call) $0.01 Claude Sonnet (tokens) $0.15β0.40 Claude Vision (if video) $0.10β0.30 Lambda execution $0.0000002 DynamoDB writes $0.01 S3 storage $0.01 Total per report $0.30β$1.50 vs. professional tools at $1,000+/month = ==667x cheaper== π
Challenges We Ran Into Challenge 1: Agent Autonomy vs. Orchestration Problem: How do we ensure 7 independent agents work together without constant human intervention?
Solution:
Strands SDK provides tool contractsβagents can only call defined tools Orchestrator agent maintains state machine (validates transitions) DynamoDB ensures idempotency (if Agent 2 fails, retry doesn't re-run Agent 1) Key Insight: Constraints enable autonomy.
Challenge 2: Fairness in Scoring Problem: LLMs can have bias. How do we prevent Claude from unfairly adjusting scores based on player demographics?
Solution: ==Bounded adjustment== with explicit filtering
LLM Adjustment β [-10, +10] This ensures:
Algorithm is primary driver (80% of score) LLM provides context, not overrides (20% of score) No demographic data passed to LLM (position-only) Challenge 3: Video Analysis at Scale Problem: Processing 100+ frames from a match video is expensive. Claude Vision costs $0.003 per image.
Statistics:
Cost = 100 frames Γ $0.003/frame = $0.30 Time = 100 frames Γ 0.18s/frame = 18.3 seconds Optimization:
β Parallel frame processing (AWS Lambda concurrent executions) β Key frame extraction (skip redundant frames) β Caching (store frame analysis for 7 days) Learned: Parallelization beats optimization.
Challenge 4: Position-Specific Weights Problem: Centre-backs and strikers excel in different dimensions. How do we fairly evaluate them?
Solution: Position-specific weight matrices
For centre-back:
Ξ±_CB = 0.30, 0.25, 0.25, 0.15, 0.05 For striker:
Ξ±_ST = [0.20, 0.35, 0.20, 0.15, 0.10] Each position has different priorities π―
Challenge 5: AWS Lambda Cold Starts Problem: First invocation of Lambda takes 2β5s (cold start). For async scouting, latency matters.
Solution:
β Provisioned concurrency (keep 1 Lambda warm) β Node.js 20.x (faster startup than Python) β Lightweight dependencies (minimal vendor code) Challenge 6: Report Generation HTML Problem: Generating beautiful, printable HTML reports programmatically is tedious.
Solution:
β Template library (EJS or Handlebars) β CSS Grid for responsive design β SVG for radar chart (scales infinitely) Accomplishments We're Proud Of 1οΈβ£ End-to-End Autonomous Pipeline β ==No human intervention required.== From input β report, 7 agents work independently with zero orchestration overhead. The system:
Validates itself Retries on failure Logs everything 2οΈβ£ Real-World Video Analysis β Tested on a real Chelsea vs Arsenal U18 match:
Metric Result π¬ Frames processed 100 β±οΈ Processing time 18.3 seconds ποΈ Arsenal possession 58% β½ Pass success rate 74% π΅οΈ Player #7 detection 90% of frames Insight: Claude Vision can extract tactical data from amateur footage.
3οΈβ£ Hybrid Evaluation (Fair AI) β Combined algorithmic precision with LLM context:
80% algorithmic (position-weighted baseline) 20% LLM (contextual adjustment, bounded to Β±10) Result: ==Fair, explainable, reproducible scores== 4οΈβ£ Cost Efficiency β Tool Cost/Report Enterprise tools (Wyscout, StatsBomb, Opta) $33+/report TactiScout $0.30β$1.50/report Order of magnitude: ==22x cheaper== π°
5οΈβ£ 94 Unit Tests β β Every agent tested β Every tool tested β Every edge case covered β Smoke tests validate full pipeline end-to-end 6οΈβ£ Responsible AI Framework β Principle Implementation π€ Fairness No demographics in scoring ποΈ Transparency Rationale + confidence on every score π‘οΈ Bounded AI LLM adjustments capped at Β±10 π Privacy 7-day URL expiry, KMS encryption β¨ Honesty Video-derived stats labelled as estimates 7οΈβ£ Open Source & Reproducible β Full GitHub repo with:
AWS SAM template (deploy in 5 minutes) 94 unit tests Real smoke test results (timestamps, costs) React frontend ready to run What We Learned 1οΈβ£ Multi-Agent Orchestration is Hard, But Strands Makes It Easy Lesson: Without Strands SDK, building 7 independent agents would require:
Manual state management (error-prone) Tool contract definitions (boilerplate) Agent loop implementations (complexity) Strands abstraction: Define agents in YAML, tools in TypeScript, ==let framework handle orchestration==.
2οΈβ£ Cost Scales With Intelligence, Not Infrastructure We started worried about Lambda costs. Reality:
Component Cost Lambda cost $0.0000002/invocation Bedrock cost $0.003/1K tokens The expensive part is thinking, not computing. Optimize inference, not infrastructure.
3οΈβ£ Claude Vision Changes What's Possible Prior to Claude Vision, extracting player stats from video required:
Computer vision pipeline (pose detection) Optical character recognition (jersey numbers) Temporal modeling (frame sequences) Claude Vision does this in one API call. ==Multimodal reasoning== is a game-changer for real-world data.
4οΈβ£ Fairness Requires Active Design AI bias doesn't disappear by accident. We had to:
Design bounded adjustments (prevent unchecked LLM authority) Remove demographics from scoring (explicit filtering) Test edge cases (extreme scores, minority positions) Lesson: ==Responsible AI is architecture, not an afterthought.==
5οΈβ£ Async APIs Are Essential for User Experience Original design: Synchronous (coach waits for report)
Problem: 180-second latency = poor UX π
Solution: ==Async pattern==:
POST /scout β Returns jobId immediately
Poll: GET /scout/{jobId} β Status + report URL Coach can close browser, check back in 5 minutes. Better engagement π―
6οΈβ£ Serverless Scales, But Observability Matters At scale (100+ concurrent requests), debugging becomes hard. We invested in:
Structured logging (CloudWatch Insights queries) Request tracing (unique jobId per request) Metrics dashboards (token usage, latency percentiles) Without observability, serverless is a black box. π¦
7οΈβ£ Sports Domain Knowledge > Hype Not every LLM output is correct. We had to encode:
Position archetypes (14 profiles) Physical benchmarks (100m sprint times) Tactical concepts (pressing, positioning, decision trees) Lesson: ==AI amplifies expertise. Give it good domain models.==
What's Next for TactiScout Phase 2: Real Deployments π 2.1 Grassroots Partnership Pilot with 5β10 grassroots clubs Collect feedback on report accuracy Validate cost model (prove $0.30β$1.50) 2.2 Web Interface Polish Drag-and-drop video upload Real-time agent status (show which agent is running) Comparative analysis (compare 2 players side-by-side) Export to PDF/Excel Phase 3: Advanced Features π― 3.1 Team-Level Analysis Instead of individual players, analyze entire teams:
Team Strength = (1/n) Γ Ξ£(Overall Score_i) Generate formation recommendations, tactical weaknesses.
3.2 Opponent Analysis Upload opponent match footage β Generate tactical counter-strategy.
3.3 Injury Risk Prediction Multi-agent system predicts injury likelihood based on:
Movement patterns (from video) Load history (minutes played) Physical metrics (speed, acceleration changes) Phase 4: Monetization π° Pricing Model Tier Price/Month Reports/Month π Free $0 5 β½ Grassroots $9.99 100 π Semi-Pro $49.99 500 π Professional $199.99 Unlimited Platform revenue covers AWS + Bedrock costs, funds development.
Phase 5: Global Expansion π 5.1 Multi-Language Support πͺπΈ Spanish (LATAM + Spain) π«π· French (Africa) π΅πΉ Portuguese (Brazil) π¨π³ Mandarin (Asia) 5.2 Regional Archetypes Different leagues have different playstyles (Premier League vs Serie A vs La Liga). Create region-specific archetype databases.
Phase 6: Sports Beyond Football βΎ Generalize to other sports:
π Basketball: 5 dimensions + positional archetypes (PG, SG, SF, PF, C) π American Football: Position-specific evaluation (QB, WR, CB, etc.) π Volleyball: Positional analysis (setter, outside hitter, libero) Conclusion TactiScout demonstrates that ==autonomous multi-agent AI can democratize professional-grade analysis==. By combining:
Strands Agents SDK
- Claude 3.5 Sonnet
- AWS Serverless β Enterprise AI at grassroots prices The system is:
β Autonomous: 7 agents, zero human intervention β Fair: Bounded LLM, position-weighted, explainable β Affordable: $0.30β$1.50 vs $1,000+ competitors β Real-World Tested: Video analysis proven on live matches β Open Source: Deploy in minutes, modify for your use case Imagine thousands of grassroots coaches armed with AI-powered scouting. Imagine ==no talented player going unnoticed== because they didn't play in the right city.
That's the vision. TactiScout is the first step. β½π€
Appendix: Key Metrics Performance β‘ Metric Value β±οΈ End-to-end pipeline time 178.8s π API response time (async) <100ms π Report generation time 32.1s π¬ Video analysis (100 frames) 18.3s Cost Analysis π΅ Component Cost/Report Claude Sonnet inference $0.15β0.40 Claude Vision (if video) $0.10β0.30 Lambda execution <$0.01 DynamoDB $0.01 S3 storage $0.01 TOTAL $0.30β$1.50 Quality Metrics β¨ Metric Value π§ͺ Unit test coverage 94 tests π€ Responsible AI principles 5/5 β½ Positional archetypes 14 π Scoring dimensions 5 Quick Links π π GitHub Repository π Full README π¬ Demo Video π DevPost Submission Built with β€οΈ for grassroots football. Powered by AWS + Anthropic. β½π€
Football for Good. AI for All.
Built With
- amazon
- amazon-cloudwatch
- amazon-dynamodb
- amazon-web-services
- aws-gateway
- aws-hackathon
- bedrock
- cloude-computing
- football
- kiro
- lambda
- llm
- rest-api
- s3
- sdk
- sonnet
- sports-data
- typescript

Log in or sign up for Devpost to join the conversation.