FRC Scouting Platform
Distributed, online-first match and pit scouting ecosystem with deterministic sync, admin control, and integrated real-time analytics.
- Matches Logged
- —
- Events
- —
- Teams
- —
- Median Sync
- undefined s
System Overview
Built for multi-client real-time synchronization, deterministic database updates, and reliable analytics under network constraints. Architecture emphasizes idempotent operations, typed data flow, and online-first reliability.
Frontend
React + TypeScript progressive web app with Dexie-based local queue. Optimistic updates, atomic phase transitions, and full offline operation.
Backend
FastAPI + asyncpg backend with scikit learn and manually implemented algorithms.
Database
PostgreSQL schema.
Data Analytics
Integrated algorithms compute team performance trends and alliance predictions.
- Bayesian Elo: adaptive rating using probabilistic outcome inference.
- Theil–Sen Estimator + Heuristics Scoring Algorithm: robust regression on historical performance vectors.
- Ranking K-Means Clustering: group and rank teams by offensive, balanced, and support roles.
- Random Forest Regressor: predicts alliance score variance using composite features.
Analytics Example:
[
{team: 1234, cycle_time: 6.4, barge: 1.21, cluster: "Coral cycle"},
{team: 4920, cycle_time: 9.8, barge: 5.49, cluster: "Algae"}
]TODO: add example data page
Admin Dashboard
Admin Control
- Role-based access and passcode hashing.
- Live session tracking through https even in high latency environments.
- Event-wide analytics refresh.
Engineering Highlights
- Asynchronous Python backend with FastAPI + asyncpg.
- Typed React/TypeScript frontend with IndexedDB queueing.
- Deterministic sync and conflict-free replication.
- Offline-tolerant PWA using service workers.
- Dynamic analytics with statistical + ML components.
- Secure admin and role isolation model.
*All analytics and visualizations on this page use anonymized or synthetic data for privacy. No team-specific or strategy data is included.*
Explore Further
Try out the app(sorry, the team didn't let me share sources).