← All projects
Out now Tool Python + Web

Wheelhouse

Six people in a Discord call and forty minutes of “I don’t know, what do you want to play?” We’ve all been there, right? Wheelhouse reads your actual Steam library, works out which games your whole party can genuinely launch, and just spins for you.

The Wheelhouse category picker, five categories selected out of twenty-one
Status
Out now
Backend
Python
Frontend
Vanilla JS
Runs
Locally, in browser
Install
Double-click START.bat

The actual problem

Every random game picker out there has the same problem: it’ll happily land on a game only one person owns. So you spin again. Then again. Now the randomiser is just one more thing to argue about!

The fix is actually knowing who owns what. Wheelhouse reads your Steam Family ownership, so it knows there are three copies of this game and only one of that one, and it only puts things on the wheel that your whole party can genuinely launch. Every tile also tells you how many copies exist and how many hours the family has already sunk into it.

How a night runs

Pick your categories. Co-op, strategy, RPG, horror, whatever the mood is. Each category shows you how many games it holds and, way more usefully, how many of those fit a party of this size.

Spin! The wheel gets built from exactly the games that survived your filters. Anything that gets picked comes off the wheel so a re-spin never repeats itself, and there’s a running history down the side.

Or run a bracket. If one game isn’t enough, it’ll build you a full tournament — seeded, byes and all, right down to a final. This one started as a total joke and somehow became the feature everybody actually uses.

Things I learned building it

If you can’t fix it, at least be honest about it

The Steam Family data needs a web token that expires about every 24 hours. There’s no refresh flow and there is genuinely nothing I can do about that from outside Steam. Believe me, I tried.

So rather than pretend it isn’t happening, the app just tells you: a status bar across the top shows how long the token has left and says plainly when it’s dead. Re-pasting takes about ten seconds and your wheel setup doesn’t get touched. Turns out a limitation you explain properly stops feeling like a bug and starts feeling like a step.

Degrade, do not block

Every layer works without the one above it. No token at all? It reads the games installed on your PC and you can spin right away. Got a token but no Web API key? Family members just show up as SteamID numbers instead of names. Nothing in here ever refuses to start because one optional thing is missing — that drives me crazy in other people’s software.

Local means local

It runs a tiny Python server on your own machine and opens in your browser. Your credentials sit in a config.json right next to the app and only ever get sent to Steam. There’s no account on my end at all, because I really don’t want to be responsible for anybody’s Steam token. AND NO PAYWALL.

Screens

The wheel loaded with twelve games, party size set to three, spin history down the right
The wheel — built from only the games the whole party can launch, with every spin logged down the side.
Close view of the wheel, each slice a game with its cover art
Twelve on the wheel — one slice per game. A pick is taken off, so a re-spin never lands on it twice.
The result panel announcing Stick Fight: The Game, with copies owned and hours played by each family member
The wheel has spoken — five copies, hours per person, and the one member who keeps playtime private shown as hidden rather than breaking the panel.
A full tournament bracket of games
The bracket — twelve players, seeded, byes and all, down to a final.

← All projects