Inspiration

As League of Legends players, we've all asked ourselves: "How did I really perform this season?" Current stat sites like op.gg give you numbers, but they don't tell your story. We wanted to create something that goes beyond cold statistics—something that captures the journey, the struggles, the breakthroughs, and the unforgettable moments that make each season unique.

We envisioned an AI-powered platform that transforms raw match data into personalized, engaging narratives. Using AWS AI services and the Riot Games API, Summoner Chronicle creates comprehensive year-end recaps with multiple features: AI-generated stories in 5 distinct personalities, voice narration, savage but helpful roasts, personalized coaching, performance analytics, and social sharing capabilities.

What It Does

Summoner Chronicle is an AI-powered agent that creates comprehensive, shareable year-end recaps for League of Legends players. Here's what makes it unique:

Core Features:

  1. AI Chronicle with 5 Personality Styles

    • Uses AWS Bedrock (Claude 3.5 Sonnet) to generate epic 3-act narratives
    • 5 distinct personalities : Analyst, Champion, Hype, Sensei, and Bard
    • Each personality provides a completely different storytelling perspective
  2. Voice Narration

    • AWS Polly brings your chronicle to life with neural voices
    • Different voice for each personality (Matthew, Joey, Brian, Joanna)
    • Audio player with professional UI
  3. Roast Master 3000

    • Claude 3.5 Sonnet delivers savage but constructive AI roasts
    • 3 roast modes: Savage, Friendly, and Meme
    • Uses League memes and community humor
  4. AI Coaching Agent

    • Personalized improvement tips based on match data
    • Answers specific player questions
    • Identifies persistent strengths and weaknesses
  5. Performance Timeline Analysis

    • Lambda-powered pattern detection
    • Clutch moment identification
    • Tilt score calculation
    • Interactive visualizations
  6. Live Game Tracker

    • Real-time match tracking using Riot Spectator API v5
    • Shows current game participants and stats
    • Team composition analysis
  7. Social Sharing

    • 1200x675 shareable image cards
    • QR codes for chronicle links
    • Discord webhook integration
    • X (Twitter) sharing with auto-generated text
  8. AI-Narrated Video Chronicles

    • Titan image generation
    • AWS Polly voiceover
    • FFmpeg rendering in Lambda
    • 30-second highlight videos
  9. Real-Time Stats Dashboard

    • KDA, win rates, champion mastery
    • Data from Riot API v5 cached in DynamoDB
    • Performance visualizations with Recharts

How We Built It

Architecture:

Frontend:

  • Next.js 16 (App Router with Turbopack)
  • React 19 with TypeScript
  • TailwindCSS for modern, responsive UI
  • Recharts for data visualizations

Backend (100% Serverless on AWS):

  • AWS Lambda - 7 serverless functions for different agents
  • AWS Step Functions - Orchestrates chronicle generation pipeline
  • Amazon DynamoDB - Stores chronicles, stats, and match data
  • Amazon S3 - Stores match data, generated audio, videos, and images
  • AWS API Gateway - RESTful API endpoints

AI Services:

  • Amazon Bedrock (Claude 3.5 Sonnet) - Narrative generation, coaching, roasting
  • Amazon Polly - Neural voice synthesis (5 different voices)
  • Amazon Titan Image Generator - AI image generation for videos

Riot Games Integration:

  • Riot API v5 - Match history, player stats, live game data
  • Fetches full-year match history (up to 100 matches)
  • Aggregates stats across multiple matches
  • Regional routing support

Infrastructure as Code:

  • AWS CDK (TypeScript) for all infrastructure
  • Automated deployment with cdk deploy
  • Tagged resources: rift-rewind-hackathon: 2025

Data Flow:

  1. User Input → Riot ID (GameName#TAG)
  2. Region Detection → AWS Lambda detects player region
  3. Match Fetching → Step Functions triggers match data retrieval
  4. Data Aggregation → Lambda processes 100 matches, calculates stats
  5. AI Generation → Bedrock generates personalized narrative
  6. Voice Synthesis → Polly creates audio narration
  7. Storage → DynamoDB + S3 store results
  8. Frontend Display → Next.js renders with modern UI

Challenges We Ran Into

  1. Match Data Volume & Performance

    • Problem: Processing 100 matches sequentially took 30+ seconds, causing timeouts
    • Solution: Implemented parallel processing with Promise.allSettled() in Lambda, reduced to 5 seconds
  2. Regional Riot API Routing

    • Problem: Different regions (NA, EUW, KR) require different API endpoints
    • Solution: Built region detection Lambda with automatic routing to correct regional API base
  3. Step Functions State Management

    • Problem: Passing personality parameter through multiple Step Functions states
    • Solution: Properly structured task input with personality.$: "$.personality" notation
  4. DynamoDB Query Optimization

    • Problem: Chronicle lookups by puuid were slow without proper indexing
    • Solution: Designed partition key strategy with GSI for efficient queries
  5. Video Generation Lambda Timeout

    • Problem: Titan image generation + FFmpeg rendering exceeded 15-minute Lambda limit
    • Solution: Optimized by generating 4 images concurrently and pre-compiling FFmpeg binary
  6. Text-to-Speech Quality

    • Problem: Emojis in narratives caused Polly to read descriptions ("microphone", "fire")
    • Solution: Comprehensive Unicode emoji removal (10+ ranges) before synthesis

Accomplishments We're Proud Of

  1. Multi-Modal AI Integration - Successfully combined Bedrock (text), Polly (voice), and Titan (images) in one cohesive experience
  2. Production-Grade Architecture - Fully serverless, auto-scaling AWS infrastructure handling 100+ match processing
  3. 5 Distinct Personalities - Advanced prompt engineering creates genuinely different narrative styles
  4. Complex Video Pipeline - Orchestrated Titan image generation, Polly narration, and FFmpeg rendering in Lambda
  5. Real-Time Features - Live game tracking with Riot Spectator API v5
  6. Zero Dummy Data - All features use real Riot API v5 data
  7. Social Sharing - Complete sharing suite (QR codes, Discord webhooks, X integration)
  8. Roast Quality - Claude generates hilarious but constructive feedback

What We Learned

  1. AWS Bedrock Prompt Engineering

    • How to structure prompts for consistent, high-quality output
    • Using system/task/context/rules framework
    • Personality injection techniques
  2. AWS Polly Best Practices

    • Neural vs standard voices
    • Text preprocessing for clean audio
    • SSML alternatives
  3. Step Functions Orchestration

    • Parallel execution for efficiency
    • Error handling and retries
    • Parameter passing between states
  4. DynamoDB Design

    • Partition key design for fast queries
    • GSI for secondary access patterns
    • Caching strategies
  5. Riot API v5

    • Regional routing differences
    • Rate limiting strategies
    • Match data structure
  6. Cost Optimization

    • Using smaller Bedrock models (Claude Sonnet vs Opus)
    • Caching in DynamoDB to avoid redundant API calls
    • Efficient Lambda memory allocation

What's Next for Summoner Chronicle

  1. Champion-Specific Deep Dives

    • Per-champion performance analysis
    • Matchup win rates
    • Build recommendations
  2. Friend Comparisons

    • Compare stats with friends
    • Joint chronicles
    • Team synergy analysis
  3. Seasonal Tracking

    • Month-over-month progress
    • Rank progression visualization
    • Meta adaptation insights
  4. More Personalities

    • Add 5 more narrative styles
    • Community-voted personalities
    • Custom personality builder
  5. Mobile App

    • iOS/Android native apps
    • Push notifications for new chronicles
    • Offline mode
  6. Advanced Video Generation

    • Longer videos (2-3 minutes)
    • Match highlight integration
    • Custom music selection

Here’s the added “Testing & Validation” section you can include at the end of your Devpost submission 👇


🧪 Testing & Validation

To help judges and testers experience Summoner Chronicle with real data, we’ve provided actual Riot player IDs and match IDs for validation.

✅ Riot ID for Real Player

  • Player: NattyNatt#RANK1
  • Region: Korea (KR) Use this Riot ID to generate a real chronicle, including AI storytelling, voice narration, roast, analytics etc.

✅ Match ID for Performance Pattern Analyzer

  • Match ID: KR_7902692963 This match belongs to the above player and can be used to test the Performance Pattern Analyzer feature. It will demonstrate:
  • Clutch moment detection
  • Tilt score calculation
  • Interactive timeline rendering

✅ Live Game Tracker Testing

For the Live Game Tracker feature:

  • You must use a player currently in an active game.
  • The app automatically detects if the player is live using the Riot Spectator API v5.
  • When a live game is detected, the system displays:

    • Real-time participants
    • Team compositions
    • Live stats and match progress

This ensures real-time validation of the tracking pipeline and AWS-Lambda-based updates.

🧩 Note: You can also test with any real Riot player ID, and Summoner Chronicle will automatically fetch their live or recent match data using the Riot API — no dummy data, only authentic results.


Built With

  • amazon-dynamodb
  • amazon-polly
  • amazon-titan-image-generator
  • amazon-web-services
  • aws-api-gateway
  • aws-bedrock
  • aws-cdk
  • aws-lambda
  • aws-step-functions
  • claude-3.5-sonnet
  • html2canvas
  • next.js-16
  • react-19
  • recharts
  • riot-games-api-v5
  • spectator-api-v5
  • tailwindcss
  • typescript
Share this project:

Updates

Private user

Private user posted an update

⚠️ Video feature unavailable. AWS retired Titan Image Generator v1 after our submission. The feature worked at submission time and is shown working in our demo video. AWS has since deprecated this model. All other features work normally.

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

Private user

Private user posted an update

Testing & Validation To help judges and testers experience Summoner Chronicle with real data, we’ve provided actual Riot player IDs and match IDs for validation.

Riot ID for Real Player Player: NattyNatt#RANK1 Region: Korea (KR) Use this Riot ID to generate a real chronicle, including AI storytelling, voice narration, roast, analytics etc. Match ID for Performance Pattern Analyzer Match ID: KR_7902692963 This match belongs to the above player and can be used to test the Performance Pattern Analyzer feature. It will demonstrate: Clutch moment detection Tilt score calculation Interactive timeline rendering

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

Private user

Private user posted an update

The Live Game Tracker feature wasn’t shown in the demo video, but I captured a real player who was actively playing at that moment, and the screenshot of this feature has been added in the submission.

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