racecontrol-core is the application layer of the project.
It provides the user interface, interactive controls, visualizations, and
end-to-end experience built on top of the backend client package
racecontrol-client.
This separation ensures the core app stays lean, modular, and easy for contributors to extend.
- 🎨 Clean Streamlit UI with reusable components
- 📊 Dynamic visualizations powered by Plotly
- 🔌 Fully decoupled from data layer via
racecontrol-client - 🧠 Supports rich analytics, scoring models, and custom logic
- 🌐 Ready for deployment, dashboards, or embedding
racecontrol-core/
├─ app.py → Main application entrypoint
├─ project_core/
│ ├─ ui/ → UI components, layouts, charts
│ ├─ services/ → App-specific helpers
│ ├─ utils/ → Formatting, small helpers
│ └─ init.py
└─ README.md
This structure enforces a clear separation of UI, client logic, and application behavior.
pip install -r requirements.txtpip install ../racecontrol-clientstreamlit run app.pyInside the core app, you import backend functionality like this:
from racecontrolClient import (
get_schedule,
get_driver_standings,
get_fantasy_scores,
)This ensures the core app does zero business logic — all computation lives in the client library.
The app supports interactive inputs such as:
- Selecting seasons
- Adjusting scoring weights
- Toggling display modes
- Refreshing data
These controls dynamically update visualizations using Streamlit state.
All UI elements are modularized in ui/, such as:
- render_header()
- render_kpis()
- render_tabs()
- Charts + layout components
Contributors can add new components without touching core logic.
- Keep UI simple and clean
- Keep logic in the client library
- Allow contributors to build new tabs, charts, or features easily
- Make the app framework-agnostic so the backend works everywhere
We welcome contributions! Please see:
Before opening a pull request.
Good contributions include:
- New UI components
- Improved visualizations
- New tabs or analytics
- Better documentation
- Bug fixes or refactors
This project is licensed under the MIT License. See the LICENSE file for details.