Scouting and analytics for VEX Robotics events. Browse every event and team across V5RC, VIQRC, VURC, and VAIRC in one place.
Most of this information is already available on VEX Events. The problem is finding and comparing it.
Looking for nearby events can mean paging through competitions around the world. Scouting another team usually means opening several pages and manually comparing their results. OpenScout organizes that data around the things you actually need before and during a competition.
| Events | Filter events by season, program, grade level, region, and event type. Worlds, Signature Events, and Championship events are labeled automatically. Smart Sort moves relevant events toward the top based on their location and date. |
| Teams | Each team page includes rankings, skills scores, match history, awards, and previous seasons. The radar chart compares win rate, AWP, consistency, world skills, and experience in one view. It gives you a quick idea of how a team performs before you dig into the full numbers. |
| Skills | Browse world skills rankings with driver and programming scores shown separately. |
| Jumper | Choose a match and OpenScout finds the correct livestream, then jumps to roughly when that match begins. No more dragging through a six-hour recording trying to find one match. Currently supports YouTube and BoxCast. |
| My Team | Pin your team to keep its information easy to reach. You can check upcoming events, review recent matches, and save scouting notes before you forget them. |
| Shared teams | Invite other members of your club and work from the same scouting information. Shared picklists update live across everyone's devices, which is much easier than passing a spreadsheet around the pits. |
| Translation | Event names from other regions can be translated automatically. This makes international events, including Chinese Signature Events, much easier to browse. |
OpenScout can be installed as a Progressive Web App on your phone or computer. Pages you've already loaded remain available when the venue Wi-Fi stops cooperating. The interface also follows your system's light or dark mode setting.
You'll need Node.js 20 or newer.
git clone https://github.com/axcdeng/webscout.git
cd webscout
npm install
cp .env.example .env
npm run devOpenScout will run at:
http://localhost:5175
The site and API are served together from one process.
You'll need API keys before event data appears. Without them, the app will still run, but most pages will be empty.
| Setting | What it enables |
|---|---|
ROBOTEVENTS_API_KEY and RSE_API_KEY |
Events, teams, rankings, matches, team statistics, and TrueSkill ratings (still in development) |
VITE_SUPABASE_URL and VITE_SUPABASE_PUBLISHABLE_KEY |
Accounts, notes, shared teams, and picklists |
VITE_DEFAULT_YOUTUBE_API_KEY |
Jumper |
UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN |
Rate limiting |
You can skip Upstash while running locally. Rate limiting will simply be disabled.
RSE_API_KEY is a free RoboSTEM DB API key. Sign in with Google or Discord at:
https://robostem-api.org/dashboard
The RoboSTEM DB provides team statistics and TrueSkill ratings (still in development). Its API documentation is available at:
https://robostem-api.org/redoc
ROBOTEVENTS_API_KEY is a VEX Events API v2 token. You can request one through your account on the VEX Events website.
Supabase powers accounts and anything that saves data, including notes, shared teams, and picklists.
Browsing events and teams still works without Supabase. You'll only lose features that require an account or saved state.
The comments in .env.example explain every available variable, whether it should be kept secret, and what stops working when it's missing.
npm run build # Build for production
npm test # Run the test suite
npm run lint # Check code style
npm run preview # Serve the production buildsrc/ Front end built with React and Vite
jumper/ Stream detection and match timestamp calculations
server/ API and VEX Events integrations
api/ The same API handlers packaged as Vercel functions
supabase/ Database schema for accounts, notes, shared teams, and picklists
Database changes are stored in supabase/migrations/.
Migrations are applied manually and in numerical order through the Supabase SQL editor. Each migration is written to be safe to run more than once, so you can rerun them from the beginning if you aren't sure which ones have already been applied.
Issues and pull requests are welcome.
Before opening a pull request, run:
npm run lint && npx tsc -b && npm testA couple of things to know before working on the project:
src/App.tsxis currently very large. It's being split into smaller files over time.- Don't edit an existing migration after it has been committed. Production databases may have already run it. Add a new numbered migration instead.
Please don't report security vulnerabilities through a public GitHub issue.
Email them privately to:
OpenScout is licensed under the GNU Affero General Public License v3.0.
You can use it, fork it, modify it, and host your own version. If you modify OpenScout and make that version publicly available as a service, you must publish your changes under the same license.
For commercial licensing or another arrangement, contact:
Geist and Geist Mono are created by Vercel and licensed under the SIL Open Font License 1.1.
OpenScout is not affiliated with or endorsed by VEX Robotics. Competition data is provided through VEX Events.

