Inspiration

Every League of Legends player ends a season asking the same question: “Did I actually improve — or just play more?” While existing stat trackers flood players with data, they rarely help you reflect. We wanted to create something more meaningful — a personalized AI reflection companion that turns numbers into stories, trends, and encouragement. That’s how Rift Rewind was born — an AI-powered year-in-review dashboard that helps players see their growth, celebrate achievements, and get smarter for next season.

What it does

Rift Rewind transforms a player’s match history into interactive insights, AI summaries, and coaching feedback.

Key Features: 📈 Performance Timeline: Visualizes monthly win rates and KDA trends using Recharts + Framer Motion. 🧠 Feature Impact Chart: Highlights which stats (CS, vision score, gold) most affect win rate. 🤖 AI Coach Tips: Generated dynamically from data trends, powered by AWS Bedrock prompt templates. 🧩 Top Champions Table: Sortable by games, win rate, or CS — visualizing where players shine. 🪄 Generate Recap Button: Calls /api/generate_recap to summarize the season using LLM reasoning. It’s like your own post-season analyst — built for reflection, growth, and motivation.

How we built it

Frontend React + Vite for fast, modular UI development. TailwindCSS for clean, responsive styling. Recharts + Framer Motion for interactive charts and smooth animations. Axios for API integration. Backend FastAPI (Python 3.11) as the API core. AWS Bedrock for natural language insights (prompt templates stored under infra/bedrock_prompt_templates.md). CORS-enabled JSON endpoints: /api/matches/upload – ingest player match data (JSON or CSV). /api/insights/{playerId} – retrieve computed summaries. /api/generate_recap – invoke AI recap generation. Dockerized for simple deployment and AWS hosting. Data Flow Player Match Data → FastAPI (Processing) → AWS Bedrock (AI Summary) → JSON Response → React Dashboard (Visualization)

Challenges we ran into

🔄 Data Consistency: Cleaning inconsistent match formats (different APIs and JSON schemas). 🤖 Prompt Tuning: Getting Bedrock LLM responses to stay concise and relevant to gameplay stats. 🎨 Frontend Polish: Balancing dark-mode styling with readability for data-heavy charts. ⚙️ Integration Hurdles: Aligning CORS across Vite dev server (5173) and FastAPI (8000) during local testing. Each issue pushed us to optimize — especially learning to pipe structured data into generative models effectively.

Accomplishments that we're proud of

🏆 Accomplishments that we're proud of ✨ Delivered a fully functional AI + data visualization web app end-to-end (FastAPI ↔ React ↔ AWS). 🤝 Achieved seamless integration between analytics, LLM reasoning, and frontend rendering. 💬 Designed AI Coach Tips that feel human — not generic, but context-aware. 🎨 Built a clean, modern, responsive dashboard that looks competition-ready. ⚡ Packaged everything open-source (MIT licensed) for transparency and reusability.

What we learned

How to leverage AWS Bedrock for domain-specific text generation (coaching insights). The power of data storytelling — turning match logs into emotional narratives. Efficient React + FastAPI collaboration using Vite’s proxy setup for APIs. UI/UX importance: even powerful AI is ignored if the visualization isn’t delightful. Most of all, we learned that reflection is as important as competition — and AI can make that reflection smarter and more inspiring.

What's next for RiftRewind Project

🚀 What's next for Rift Rewind Project We’re excited to continue expanding Rift Rewind beyond the hackathon: Phase ** Goal** 1️⃣ Riot API Integration Fetch live player stats via Riot Developer API. 2️⃣ Bedrock Fine-Tuning Train Bedrock prompt templates on real League coaching data. 3️⃣ Player Accounts Save recaps + progress over time via DynamoDB. 4️⃣ Cloud Deployment Host on AWS Lambda + S3 with CI/CD. 5️⃣ Shareable Recaps Export insights as image cards or short videos for social sharing.

Our mission: Turn post-game stats into smart, shareable stories that celebrate growth.

❤️ Closing Note Rift Rewind isn’t just another stat app — it’s a mirror for your season. Built with passion, powered by AWS, and crafted to make League players reflect, rewind, and rise higher.

“Built with ❤️ using AWS Bedrock + FastAPI + React” Architecture Overview Diagram: League Match Data (JSON) ↓ FastAPI Backend (Python) ↓ AWS Bedrock Prompt Template ↓ AI Summary JSON (Insights + Tips) ↓ React Frontend Dashboard

• Labels: “/api/matches”, “/api/insights”, “/api/generate_recap” • Optional cloud icons (S3, Lambda ready).

===========================================================

Rift Rewind – Nginx + FastAPI + SSL Health Check Script

===========================================================

DOMAIN="riftrewind.admnwizard.com" BACKEND_PORT=4084 FRONTEND_ROOT="/home/sureshwizard/projects/liveprojects/riftrewind/frontend/dist"

echo "🧩 Rift Rewind Health Check — $(date)" echo "--------------------------------------------------"

1️⃣ Check Nginx configuration syntax

echo "🔍 Checking Nginx config..." sudo nginx -t || { echo "❌ Nginx config error"; exit 1; } echo "✅ Nginx config OK" echo

2️⃣ Verify index.html exists in frontend build

echo "📦 Verifying frontend build..." if [ -f "$FRONTEND_ROOT/index.html" ]; then echo "✅ index.html found at $FRONTEND_ROOT" else echo "❌ index.html missing — run: npm run build" exit 1 fi echo

3️⃣ Check HTTP redirect to HTTPS

echo "🌐 Checking HTTP → HTTPS redirect..." curl -s -I "http://127.0.0.1/" -H "Host: $DOMAIN" | grep "301" && echo "✅ Redirect works" || echo "⚠️ Redirect missing" echo

4️⃣ Check HTTPS root (static frontend)

echo "🧱 Checking HTTPS root static page..." curl -s -I "https://$DOMAIN/" | egrep "HTTP|content-type|length" || echo "⚠️ No response from frontend" echo

5️⃣ Check backend health directly

echo "🩺 Checking backend direct (port $BACKEND_PORT)..." curl -s "http://127.0.0.1:$BACKEND_PORT/health" || echo "⚠️ Backend not responding" echo

6️⃣ Check backend health via Nginx proxy

echo "🧠 Checking backend /api/health via Nginx..." curl -s "https://$DOMAIN/api/health" || echo "⚠️ Nginx proxy to backend failed" echo

7️⃣ Check insights endpoint

echo "🎮 Checking /api/insights/demo-player..." curl -s "https://$DOMAIN/api/insights/demo-player" | jq . || curl -s "https://$DOMAIN/api/insights/demo-player" echo

8️⃣ Check generate_recap (mock AI endpoint)

echo "🤖 Checking /api/generate_recap..." curl -s -X POST "https://$DOMAIN/api/generate_recap?player=demo-player" | jq . || curl -s -X POST "https://$DOMAIN/api/generate_recap?player=demo-player" echo

9️⃣ Check backend systemd service

echo "⚙️ Checking backend systemd service..." sudo systemctl is-active --quiet riftrewind_backend.service && echo "✅ Backend service running" || echo "❌ Backend service stopped" echo

🔟 Show Nginx and backend status summaries

echo "📋 Service summary:" sudo systemctl status nginx --no-pager | head -n 8 sudo systemctl status riftrewind_backend.service --no-pager | head -n 8 echo echo "✅ Rift Rewind Health Check complete." echo "--------------------------------------------------" 🏃‍♂️ Make it executable bash Copy code sudo chmod +x /home/sureshwizard/projects/liveprojects/riftrewind/test_riftrewind.sh 🚀 Run it anytime bash Copy code bash /home/sureshwizard/projects/liveprojects/riftrewind/test_riftrewind.sh 🧾 Output Example (expected) lua Copy code

🧩 Rift Rewind Health Check — Mon Nov 10 20:12:03 UTC 2025

✅ Nginx config OK ✅ index.html found at /home/.../frontend/dist ✅ Redirect works HTTP/2 200 content-type: text/html ✅ Backend service running {"status":"ok"} { "player": "demo-player", "matches_played": 10, ... }

✅ Rift Rewind Health Check complete.

Built With

Share this project:

Updates