A static site generator for visualizing universal tank keybinds across all 6 World of Warcraft tank classes. This project treats tanking as a role-based system, mapping equivalent abilities to the same keys across all classes. It's based on Quazii's keybind guide video, so special thanks to him! Also a lot of discussion about this in the StratsCo Discord server.
# Install dependencies
bundle install
# Start the development server
bundle exec jekyll serveVisit http://localhost:4000 to view the site.
The site uses Blizzard's official Game Data API to fetch ability icons and tooltips.
-
Get API credentials:
- Visit https://develop.battle.net/
- Log in and create a new application
- Copy your Client ID and Client Secret
-
Add credentials: Create a
.envfile in the project root:BLIZZARD_CLIENT_ID=your_client_id_here BLIZZARD_CLIENT_SECRET=your_client_secret_hereNote: The
.envfile is gitignored - never commit your credentials!
Edit _data/keybinds.yml to modify which abilities are assigned to which keys for each class.
Structure:
classes:
warrior:
abilities:
q:
name: "Shield Slam"
keybind: "Q"
wowhead_id: 23922To change an ability:
- Find the class and key in
_data/keybinds.yml - Update the
nameandwowhead_idfields - If you don't know the spell ID, see "Finding Spell IDs" below
After updating abilities in keybinds.yml, fetch their metadata:
# Fetch icons and tooltips from Blizzard API
ruby _scripts/fetch-abilities-blizzard.rb
# Merge the cached data into keybinds.yml
ruby _scripts/preprocess-abilities.rbThis will:
- Fetch ability icons, names, and tooltips from Blizzard's API
- Cache them in
_data/abilities_cache.yml - Merge the data into
_data/keybinds.ymlfor Jekyll to use
# Build for production
bundle exec jekyll build
# Or serve locally with auto-reload
bundle exec jekyll serveThe built site will be in the _site directory.
If you need to find a spell ID for a new ability:
-
Manual method:
- Go to https://www.wowhead.com
- Search for the ability name
- Click the spell page
- The URL will be like
https://www.wowhead.com/spell=23922 - The number after
spell=is the spell ID
-
Using the script:
ruby _scripts/find-spell-ids.rb "Ability Name" -
Update the ID:
ruby _scripts/update-ids.rb [class] [key] [spell_id] # Example: ruby _scripts/update-ids.rb warrior q 23922
When adding or changing abilities:
- Edit
_data/keybinds.ymlwith ability names and spell IDs - Fetch metadata:
ruby _scripts/fetch-abilities-blizzard.rb - Preprocess:
ruby _scripts/preprocess-abilities.rb - Build:
bundle exec jekyll buildorbundle exec jekyll serve
_data/keybinds.yml- Main data file with keys, classes, and abilities_data/abilities_cache.yml- Cached ability metadata from Blizzard API_scripts/- Helper scripts for fetching and processing dataindex.html- Main spreadsheet viewassets/css/spreadsheet.css- Styling for the spreadsheet layoutassets/js/spreadsheet-tooltips.js- Tooltip functionality
The site is built with Jekyll and can be deployed to:
- GitHub Pages (automatic with Jekyll)
- Any static hosting service (Netlify, Vercel, etc.)
Just push the repository and the static files in _site will be served.