The Idea
I wanted to track my cricket performance over time: batting average, strike rate, scores by venue, performance against different bowling types. Nothing fancy, just a personal dashboard.
The Stack
S3: Store match data as JSON files (one file per match)
Lambda: Process new match data, calculate stats
DynamoDB: Store aggregated statistics
QuickSight: Visualize trends and patterns
EventBridge: Trigger weekly summary emails
The Data Model
Each match file looks like this:
{
"date": "2024-11-10",
"venue": "Local Ground",
"opposition": "Team X",
"innings": {
"runs": 45,
"balls": 38,
"fours": 6,
"sixes": 1,
"dismissal": "caught",
"bowling_type": "pace"
}
}
Simple, easy to update from my phone after a match.
The Processing
Lambda function triggered on S3 upload:
1. Read the new match data 2. Calculate match-level stats (strike rate, boundary %) 3. Update career aggregates in DynamoDB 4. Trigger QuickSight refresh
The Dashboard
QuickSight shows: - Career batting average over time - Strike rate by venue - Performance vs pace vs spin - Recent form (last 10 innings) - Best partnerships
What I Learned
Keep it simple: I started with complex schemas and multiple tables. Simplified to one S3 file per match and it's much easier to maintain.
Manual input is fine: I considered OCR from scorecards or API integrations. Typing 5 fields after a match is actually faster.
Visualizations matter: Seeing my average trend upward is more motivating than I expected. Data-driven practice works.
Cost
Basically free: - S3: ~$0.01/month - Lambda: Free tier covers it - DynamoDB: Free tier covers it - QuickSight: $9/month (only cost)
Next Steps
I'm thinking about: - Adding bowling stats - Comparing my stats to professional benchmarks - Predicting optimal batting position based on conditions
If you're interested in the code, let me know. Happy to share the Lambda functions and QuickSight templates.