WhatShouldIPlay is an open source game-picker platform with:
- A GitHub Pages web app for spinning a wheel from live top-game sources and user-entered games
- A Rust + Dioxus desktop app with local game scanning and the same spin experience
- Automated data refresh and deployment workflows
Live site:
- Multi-source pool support:
- SteamCharts
- SteamDB (with Steam charts API fallback)
- TwitchMetrics
- itch.io top rated
- Manual game entry
- Desktop-only local scan (Steam manifests + Epic manifests + common Epic/GOG/Ubisoft/Xbox install folders)
- Mode presets (
Balanced Mix,Quick Pick,No Repeats,Owned Focus) - Weighted wheel odds with per-source weighting controls
- Spin history + configurable cooldown to reduce immediate repeats
- Advanced filters (platform, tags, estimated length, release window, price)
- Steam account import using Steam Web API key + SteamID64
- Source-mix random wheel spin with animated result
- Winner popup celebration overlay with odds + source details in both web and desktop apps
- Optional cloud sync across devices via user-provided private GitHub Gist
- Progressive Web App support (installable web app + offline shell cache)
- Optional web notifications for trend updates and spin reminders
- Multi-language web UI support (English and Spanish)
- Scheduled data refresh and deterministic static hosting
- Web UI: React 19, TypeScript 5, Vite 7, TanStack Query, Zod
- Data ingestion: Node.js + Cheerio
- Desktop: Rust + Dioxus 0.7 + Reqwest + Scraper
- CI/CD: GitHub Actions + GitHub Pages
.
├─ src/ # Web app source
├─ public/data/ # Generated source dataset consumed by web app
├─ scripts/ # Data ingestion/updater scripts
├─ apps/desktop/ # Rust + Dioxus desktop app
├─ .github/workflows/ # CI/CD automation
└─ docs/ # Contributor and architecture documentation
- Node.js 20+
- npm 10+
- Rust toolchain (for desktop app only)
npm install
npm run fetch:data
npm run devBuild for production:
npm run build:allcd apps/desktop
cargo runEnable optional shortcut crawling scan:
cd apps/desktop
cargo run --features deep-shortcut-scanConfigure Windows code-signing secrets for CI (requires a .pfx code-signing cert):
.\scripts\set-windows-signing-secrets.ps1 -CertPath "C:\path\codesign.pfx" -CertPassword "your-password"Release build:
cd apps/desktop
cargo build --releasenpm run dev: Start local web development servernpm run typecheck: TypeScript type checkingnpm run build: Build web appnpm run fetch:data: Refresh source data JSONnpm run build:all: Refresh data and build web appnpm run ci:web: Run web CI checks locally
refresh-data.yml: Scheduled source data refresh every 6 hoursdeploy-pages.yml: Web build and Pages deploy onmasterbuild-desktop.yml: Windows/macOS/Linux desktop artifact builds on push/PR tomasterpackage-desktop.yml: Native desktop package build on version tags (v*) and manual runs, with packaged artifacts published to GitHub Releases on tagsrelease-desktop-signed.yml: Enforced Windows signed release pipeline on version tags (v*)web-ci.yml: Web quality checks on push/PR
- SteamDB can block non-browser traffic via Cloudflare.
- The updater attempts direct SteamDB parsing first, then falls back to Steam charts API to maintain continuity.
- Browser environments cannot scan installed local games; local scan is desktop-only.
- License: MIT
- Contributor Covenant code of conduct
- Standard issue and pull request templates
- Security disclosure policy
- Governance and support docs
See: