Rocket League Stats Display: Track MMR & Rank!
Welcome! This document details the initial Pull Request (PR) for rl-stats-display, a Python application designed to display your Rocket League stats in real-time. Tailored for Raspberry Pi, this MVP scrapes data from Rocket League Tracker to provide a live, local dashboard.
The core idea is simple: run this app on a Raspberry Pi near your gaming setup. It will automatically fetch your latest stats β including MMR, ranks, win rates, and recent match performance β and display them in a visually appealing dashboard, complete with rank icons. A caching mechanism is included to optimize performance and reduce the frequency of scraping.
π§© Architecture Overview
Hereβs a high-level view of how the app works:
ββββββββββββββββββββββ
β RL Tracker Pages β (overview / matches / mmr / performance)
ββββββββββ¬ββββββββββββ
β
[Playwright Scraper]
β (every 10 min)
βΌ
stats_cache.json
β
[PySide6 GUI Renderer]
β (reads + displays)
βΌ
Beautiful Dashboard w/ Rank Icons
The application scrapes your Rocket League stats from the Rocket League Tracker website using Playwright. This data is then cached locally to minimize network requests. The PySide6 GUI renderer reads from this cache and presents your stats in a user-friendly dashboard, complete with rank icons. This architecture ensures a balance between real-time updates and performance efficiency.
βοΈ Technical Details
Let's dive into the technical aspects of this application.
Language & Frameworks
- Python 3 β The backbone of the application, handling core logic and runtime operations.
- Playwright β Powers the headless Chromium scraping, essential for extracting data from dynamic Rocket League Tracker pages. Playwright enables automated browser interactions, allowing the application to navigate and extract data from the Rocket League Tracker website.
- PySide6 (Qt for Python) β Drives the GUI rendering with a Reactβstyle component logic using signals & slots. PySide6 provides a robust framework for creating the visual elements of the dashboard and managing user interactions.
- YAML / JSON β Used for configuration and caching, ensuring flexibility and efficient data storage. YAML simplifies configuration management, while JSON facilitates data caching.
Key Modules
scraper.pyβ Employs Playwright to gather current ranks, MMR, win rates, and match data from user profile pages. The scraper module automates the process of extracting relevant information from the Rocket League Tracker website, ensuring that the dashboard displays the most up-to-date stats.app.pyβ Constructs a responsive PySide6 GUI that displays stats and rank badges from the cache. This module is responsible for creating the visual interface of the application, presenting the scraped data in an organized and appealing manner.assets/β Contains rank icon images, ranging from Bronze to Supersonic Legend. The assets directory ensures that the dashboard accurately represents the user's rank with corresponding icons.config.yamlβ Sets refresh intervals and URLs, offering easy customization. The configuration file allows users to tailor the application to their specific needs, such as adjusting the frequency of data updates.
π§± Project Structure
Here's how the project is organized:
rl-stats-display/
βββ app.py # PySide6 GUI renderer
βββ scraper.py # Playwright scraper logic
βββ assets/
β βββ ranks/*.png # Rank badges
βββ config.yaml # Refresh intervals and URLs
βββ requirements.txt # Dependencies
βββ README.md # Documentation
βββ .github/
βββ workflows/deploy.yaml # Optional CI/CD for Cloud Code
This structure ensures that the project is organized, making it easier to maintain and extend. Each component has a specific role, contributing to the overall functionality of the application. The app.py file handles the GUI rendering, scraper.py manages data scraping, and config.yaml stores configuration settings.
π¦ Requirements
To run this application, you'll need the following dependencies:
playwright==1.48.0
PySide6==6.7.1
requests==2.32.3
pyyaml==6.0.2
These dependencies can be installed using pip, as shown in the usage section. Ensure that you have the correct versions to avoid compatibility issues.
π§ Features in This PR
This initial PR includes the following features:
- π§ Automated scraping of profile pages:
- π Configurable refresh interval (default: 10 minutes)
- πΎ Local caching (
~/.cache/rl_stats.json) to minimize network calls. This is a key feature to ensure the application doesn't constantly ping the Rocket League Tracker website, which could lead to rate limiting or performance issues. The cache stores the scraped data locally, reducing the need for frequent network requests. - πͺ Polished PySide6 dashboard with rank icons and labels. The dashboard is designed to be visually appealing and easy to read, providing a clear overview of your Rocket League stats. The use of rank icons adds a nice touch, making it easy to quickly identify your current rank in each playlist.
- βοΈ Config-driven design using
config.yaml. This allows for easy customization of the application without having to modify the code. You can adjust settings such as the refresh interval and the URLs of the Rocket League Tracker pages. - βοΈ Cloud Code compatible structure (ready for CI/CD). The project is structured in a way that makes it easy to deploy to a cloud environment, enabling continuous integration and continuous deployment.
π§° Usage
Here's how to get started:
pip install -r requirements.txt
playwright install chromium
python scraper.py # first run: fetches stats + creates cache
python app.py # launch the PySide6 GUI
First, install the required dependencies using pip. Then, install Chromium, which is used by Playwright for scraping. Next, run scraper.py to fetch your stats and create the cache file. Finally, launch the GUI by running app.py.
π§Ύ Example Output JSON
Here's an example of the JSON output:
{
"timestamp": "2025-11-11T02:00:00Z",
"stats": {
"2v2": {"rank": "Champion III Div I", "mmr": 1310},
"3v3": {"rank": "Champion II Div IV", "mmr": 1248},
"winrate": 0.52
}
}
This JSON contains the timestamp of the last update, as well as your stats for 2v2 and 3v3, including your rank and MMR. It also includes your overall win rate.
π§© Next Steps
Here are some planned improvements:
- [ ] Add Chart.js or Qt Charts for MMR trend visualization. Implementing MMR trend visualization will provide a historical perspective on the player's performance, allowing them to track their progress over time. This feature will enhance the analytical capabilities of the dashboard.
- [ ] Integrate voice assistant feedback (e.g., βYou gained 10 MMR today!β). Integrating voice assistant feedback will provide real-time updates and encouragement to the player, enhancing their gaming experience. This feature will add a personal touch to the application.
- [ ] Add systemd service for Pi auto-launch. Adding a systemd service will ensure that the application automatically starts when the Raspberry Pi boots up, providing a seamless and hands-free experience. This feature will simplify the setup process for Raspberry Pi users.
- [ ] Add persistent settings (theme, refresh interval). Adding persistent settings will allow users to customize the application to their preferences, such as choosing a theme or adjusting the refresh interval. This feature will enhance the user experience and make the application more personalized.
π‘ Deployment Notes (Raspberry Pi)
Here's how to deploy on a Raspberry Pi:
sudo apt install python3-pip libqt6gui6 -y
pip install -r requirements.txt
playwright install chromium
python app.py
Autostart at boot:
crontab -e
@reboot /usr/bin/python3 /home/pi/rl-stats-display/app.py &
First, install Python 3, pip, and the required Qt libraries. Then, install the Python dependencies using pip. Next, install Chromium, which is used by Playwright. Finally, run app.py to launch the GUI. To automatically start the application at boot, add a line to your crontab file.
Screenshots (to add later)
- RL stats dashboard with rank badges and MMR values
- Match history feed with W/L icons
Author: Julius Shade Date: November 2025 Purpose: Foundational PR for the Rocket League Stats Display App to enable Cloud Code integration and Raspberry Pi deployment.
For more information on Rocket League, visit the official Rocket League Website. Good luck and have fun!