A single-file web tool for FRC alliance selection, built for Team 1912 Combustion. Combines scouting CSV data, Statbotics EPA, TBA rankings/OPR, robot photos, and manual notes into a unified live pick list — usable live at events on both desktop and mobile.
Enter an FRC event code (e.g. 2026mslr) and hit Fetch Statbotics. Pulls every team at the event in one request from the Statbotics API, then fetches full per-team data in parallel. After fetching, a column picker lets you choose exactly which fields to import and whether each one counts toward the weighted total.
Fields available:
- EPA (total expected points added)
- Auto EPA, Teleop EPA, Endgame EPA
- Qual rank, W, L, RPs, Win%
Enter an event code and hit Fetch TBA. Pulls team list, qual rankings, and OPRs from The Blue Alliance API v3 in parallel. Same column picker flow as Statbotics.
Fields available:
- Rank, OPR, DPR, CCWM
- W, L, Ties, RPs
Upload your match scouting export via Import → Match CSV. The importer:
- Auto-detects the team column (handles
frc538or plain538format) - Skips metadata columns (
org_key,event_key,scouter, flag columns, etc.) - Detects numeric vs text columns automatically
- Shows a column picker — choose what to import and whether it counts toward the total
- Multiple match entries per team are averaged across all matches
Same flow as match CSV. Single row per team so no averaging needed. Import via Import → Pit CSV.
Text columns (e.g. drive base type, auto description) are detected automatically and imported as display-only fields. They show up in the table and team detail modal but never affect rankings.
Every numeric criteria has a weight multiplier. The weighted total is calculated as:
Total = Σ(value × weight) / Σ(weights)
Missing values are excluded from both numerator and denominator so blank cells don't drag scores down. Weight 0 means the column shows in the table but is excluded from the total entirely.
Click Criteria to open the criteria manager. For each criterion you can:
- Rename it
- Adjust its weight (0 = display only)
- See its source (statbotics, tba, match, pit, manual)
- Delete it
- Add fully manual criteria you score yourself
The sidebar shows a live ranking panel. You can create multiple named ranking views, each using a different subset of criteria. Switch between views instantly with the tabs.
- Overall (default) — uses all criteria with weight > 0
- Custom views — click + View, name it, and select exactly which criteria to include
This lets you quickly answer "who has the best auto?" or "who's the best climber?" without changing your main scoring.
Click any team number in the table or any team in the live rankings to open a full detail view showing:
- Robot photos (carousel with prev/next, dot indicators)
- All criteria values in a stat grid with weight indicators
- Weighted total highlighted
- All notes
- DNP toggle
Upload a zip file of robot photos via Import → Photos. File naming format:
frc{teamnumber}_{photonumber}.jpg
Examples: frc1912_1.jpg, frc538_2.png
Photos are shown in the team detail modal as a carousel. Teams with photos get a 📷 indicator in the table and live rankings.
Each team has inline note fields in the table. Default tags are Strategy, Autos, and Concerns. You can add or remove tags from the sidebar. Notes are free-text and show up in the team detail modal.
Check the DNP box on any team to flag them. DNP teams are:
- Grayed out and struck through in the live rankings
- Pushed to the bottom of all ranking views
- Still included in exports with a
Yin the DNP column - Can also be toggled from the team detail modal
Single Import button with a dropdown:
- Match CSV — upload match scouting data
- Pit CSV — upload pit scouting data
- Photos (.zip) — upload robot photo zip
- Open Project — restore a previously saved project zip (restores everything: teams, scores, notes, criteria, ranking views, photos, settings)
Single Export button that opens an export modal with:
- Full project (.zip) — saves everything into a zip file including
project.json(all state), aphotos/folder, individual CSVs for every ranking view, and anall_data.csvwith every column. Load this back with Open Project on any device. - Rankings CSV per view — one CSV per ranking view you've created, sorted by score
- All team data CSV — every team with every criteria value, notes, weighted total, and DNP status
Toggle between dark (default) and light mode with the button in the top bar.
Click any column header to sort ascending or descending.
On screens ≤ 700px wide the layout switches to a collapsible accordion. Sections:
- Controls — event code input, all fetch/import/export buttons
- Live Rankings — ranking tabs and live list (open by default)
- Team Table — full scrollable data table
- Notes & Tags — manage note tags
- Summary — team/criteria counts
This is a single index.html file with no build step required. Open it locally in any browser or deploy to GitHub Pages / Vercel.
- Push
index.htmlto your repo - Go to Settings → Pages, set source to your main branch
- Done — your pick list is live
The team column is auto-detected. Any column name containing team, team_key, or team_number works. Team keys in frc538 format are handled automatically.
The following metadata columns are always skipped regardless of your CSV:
org_key, year, event_key, match_key, match_number, time, alliance, scouter, team_key, RedCard, YellowCard, and flag columns (🚩).
Photos must be named frc{num}_{photonum}.ext where ext is jpg, jpeg, png, gif, or webp. Multiple photos per team are supported and displayed in order by photo number.
- PapaParse — CSV parsing
- JSZip — zip file handling
- Statbotics API — EPA data
- The Blue Alliance API v3 — rankings, OPR, team data