██╗ ██╗███████╗██╗ ██╗ ██╗ ██╗ ██████╗ ██████╗ ██╗ ██████╗ ███████╗
██║ ██║██╔════╝╚██╗██╔╝ ██║ ██║██╔═══██╗██╔══██╗██║ ██╔══██╗██╔════╝
██║ ██║█████╗ ╚███╔╝ ██║ █╗ ██║██║ ██║██████╔╝██║ ██║ ██║███████╗
╚██╗ ██╔╝██╔══╝ ██╔██╗ ██║███╗██║██║ ██║██╔══██╗██║ ██║ ██║╚════██║
╚████╔╝ ███████╗██╔╝ ██╗ ╚███╔███╔╝╚██████╔╝██║ ██║███████╗██████╔╝███████║
╚═══╝ ╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═════╝ ╚══════╝
Scouting tool for the 2026 VEX Robotics World Championship — Middle School
Built by Kayan Shah, Team Leader · HABS Gliders 34071B
This project is licensed under the Creative Commons Attribution 4.0 International (CC BY 4.0) licence.
You are free to use, modify, and distribute this project — including commercially — provided that you:
- Credit the author — Kayan Shah
- Link to the source — github.com/KayanShah
- Indicate if changes were made
© 2026 Kayan Shah · github.com/KayanShah
A fast, fully client-side scouting web app for the 2026 VEX Robotics World Championship (Middle School). It lets you instantly preview and download beautifully formatted skills standings PDFs for any of the 7 competition divisions — or the entire Worlds field at once.
No backend. No database. No login. Just a single HTML file that runs entirely in the browser.
| Feature | |
|---|---|
| 🌍 | All Worlds ranking — every team across all 7 divisions in one ranked list |
| 📐 | Per-division rankings — Arts, Engineering, Innovate, Math, Science, Spirit, Technology |
| 📄 | PDF export — beautifully formatted with HABS Gliders branding, medal highlights, and clickable hyperlinks |
| 🥇 | Medal rows — gold / silver / bronze highlighting for top 3 in each division |
| ⚡ | Instant preview — live ranked table in-browser before you download |
| 🔗 | Zero dependencies at runtime — no framework, no server, pure HTML/JS |
| 🚀 | Auto-deploys — push to GitHub → Vercel rebuilds in ~30 seconds |
┌─────────────────────────────────────────────────────┐
│ VEX WORLDS 2026 [HABS Logo] │
│ Middle School · Skills Rankings · 34071B │
├───────────────┬─────────────────────────────────────┤
│ All Divisions│ MATH DIVISION · 84 TEAMS · 83 RANKED│
│ ──────────── │ [⬇ Download]│
│ 🌍 All Worlds│ ┌──────────────────────────────────┐│
│ │ │ # │ Team │ Score │ Auto │ Driver ││
│ By Division │ ├──────────────────────────────────┤│
│ 🎨 Arts │ │🥇1│ 88825H│ 182 │ 91 │ 91 ││
│ ⚙️ Engineering│ │🥈2│ 2429A │ 182 │ 85 │ 97 ││
│ 💡 Innovate │ │🥉3│ 8838D │ 178 │ 75 │ 103 ││
│ 📐 Math ◀ │ │ 4│ 16688A│ 167 │ 70 │ 97 ││
│ 🔬 Science │ │ 5│ 1698A │ 166 │ 84 │ 82 ││
│ 🏆 Spirit │ │ …│ … │ … │ … │ … ││
│ 🤖 Technology│ └──────────────────────────────────┘│
│ │ │
│ [GENERATE PDF]│ │
└───────────────┴─────────────────────────────────────┘
Frontend → Vanilla HTML · CSS · JavaScript (no framework)
PDF Engine → jsPDF + jsPDF-AutoTable (CDN, client-side)
Fonts → Google Fonts — Bebas Neue, DM Sans, DM Mono
Hosting → Vercel (static, auto-deploy from GitHub)
Data → Embedded JSON — VEX global skills CSV + division team lists
vex-skills-app/
├── public/
│ └── index.html ← Entire app (HTML + CSS + JS + embedded data)
├── vercel.json ← Vercel config (output dir: public)
└── README.md
Everything lives in one file. The skills data and division team lists are embedded directly as JSON constants inside index.html — no network requests, no API calls, instant load.
| Division | Teams | Ranked |
|---|---|---|
| 🌍 All Worlds | 586 | ~575 |
| 🎨 Arts | 84 | 81 |
| ⚙️ Engineering | 84 | 82 |
| 💡 Innovate | 83 | 80 |
| 📐 Math | 84 | 83 |
| 🔬 Science | 84 | 83 |
| 🏆 Spirit | 83 | 83 |
| 🤖 Technology | 84 | 83 |
Teams without a recorded skills score are listed separately at the bottom of each PDF.
Each PDF includes:
- Dark navy banner with HABS Gliders logos on both sides, event title, division name, and team count
- Full ranked table with Div #, Global #, Score, Auto, Driver, Team #, Team Name, Country
- Medal row highlights — gold / silver / bronze for the top 3
- Per-page footer on every page: page number · division label · Kayan Shah · HABS Gliders Scouting
- End block — centred logo, team name, clickable author credit
- No-score section listing any teams with no skills data
- Timestamp footer — data freshness note + ranking methodology
The All Worlds PDF generates in landscape A4 with an extra Division column.
Skills data is embedded in index.html as a JS constant. To update:
Replace the skills object inside the const RAW = {...} block with fresh data from the VEX skills standings CSV.
Replace the teams arrays inside RAW.divisions with the latest official team lists from RobotEvents.
cd vex-skills-app
git add -A
git commit -m "Update skills data — [date]"
git pushVercel auto-deploys in ~30 seconds. Works from private repos too.
No build step needed — just open the file:
# Option 1: open directly
open public/index.html
# Option 2: serve locally (avoids any browser file:// restrictions)
cd public
python3 -m http.server 8080
# → http://localhost:80801. Filter division teams against global skills standings
2. Sort by Score DESC
3. Tiebreak by Global Rank ASC (better global rank wins)
4. Assign division rank (#1, #2, …)
5. Teams with no score listed separately (unranked)
Built as a scouting tool for HABS Gliders 34071B ahead of the 2026 VEX Robotics World Championship in Missouri.
HABS Gliders qualified for Worlds in their first season, ranking #11 globally in the VEX Virtual Skills programme.
Made with 🤖 by Kayan Shah
Team Leader · HABS Gliders · 34071B · United Kingdom
Skills scores up to date as of 19:45 BST, Friday 10th April 2026