Inspiration
Random wheels are often used in situations where people care about the result: choosing a student, drawing a prize, assigning a task, or running a livestream giveaway. Many existing pickers look fun, but they do not explain how randomness works and can be awkward when a group needs weighted odds, multiple unique winners, or stronger privacy. GoSpinWheel was built to make these decisions visible, flexible, and easier to trust.
What it does
GoSpinWheel is a free browser-based random wheel and name picker for classrooms, raffles, teams, giveaways, livestreams, and everyday decisions. Users can:
- add names, choices, prizes, or tasks
- assign weighted odds when options need different probabilities
- enable elimination mode so a winner is not selected again
- run up to six wheels together for combinations such as people and prizes
- import lists from CSV or TSV files
- customize colors, themes, sounds, and wheel behavior
- share a wheel with a link
- use a green-screen layout for OBS and livestream overlays
- review recent results after a spin
No account is required to start, and wheel data is saved locally in the browser by default.
How I built it
The application is built with HTML, CSS, and JavaScript. Standard equal-chance spins use the browser's Web Crypto API instead of predictable Math.random(). Random integers are mapped to the available choices with rejection sampling, avoiding the modulo bias that can appear when a random-number range does not divide evenly by the number of wheel slices.
The visual spin is kept separate from the selection logic: the result is chosen first by the random picker, then the wheel animation lands on that result. This makes the animation presentation rather than the source of truth. Weighted wheels use the configured weights, while elimination mode updates the candidate list after each result.
Challenges I ran into
The hardest part was balancing statistical correctness with a playful interface. A wheel should feel exciting, but the animation must not quietly change a result or make the selection method difficult to explain. Large lists, weighted entries, repeated spins, and multiple simultaneous wheels also create state-management and performance challenges.
Privacy was another design constraint. We wanted teachers and organizers to begin without creating an account or uploading routine participant lists, so the default workflow remains local-first.
Accomplishments that I'm proud of
- A clear random-selection path based on Web Crypto
- Weighted odds and no-repeat drawings in the same tool
- Multi-wheel layouts supporting up to six wheels
- Useful import, sharing, theming, history, and OBS features without requiring an account
- A responsive interface that works for quick personal decisions and group presentations
What I learned
Fairness is more than displaying a wheel and calling a random function. The random source, integer mapping, weighting rules, elimination behavior, and visual animation all need explicit boundaries. We also learned that privacy and convenience can reinforce each other: local-first storage makes the first-use experience faster while reducing unnecessary data collection.
What's next for GoSpinWheel
We plan to keep improving accessibility, templates, localization, performance for large lists, and the clarity of fairness explanations. The goal is to remain a practical decision tool that a classroom, team, event organizer, or livestream audience can understand and trust.
Built With
- crypto
- css
- html
- javascript
- web
Log in or sign up for Devpost to join the conversation.