Skip to content

SpinPage

05ToyLive, version 2.0

A theatrical spinning wheel for draft orders, giveaways and any choice that deserves a show.

SpinPage 2.0 in the middle of a draft: a brass wheel of coloured name slices under a scoreboard, with the nameplate ‘2nd pick, winner: Kári’ risen over it, the players list on the left and the draft board filling seat by seat on the right.
Screenshotwww.ruglad.com31 Oct 2026Sample names

The idea

Random pickers are usually joyless form controls. The drama is the point: a decision feels fairer when you watch it land.

What I built

Version 2.0 puts the whole game on one screen that never scrolls, from a 320 px phone to a 4K monitor: the wheel, a live scoreboard and a draft board that fills seat by seat. Around it sit hand-flick spinning, synthesised sound, a gremlin that fakes the stop, and a PANIC slice that throws the table into a horse race or a row of slot machines. A Chaos slider sets how often the twists turn up.

The interesting part

The stunts never touch the odds. Every spin draws its winner before the wheel moves, and flicks, wind-backs and the gremlin only change the route it takes to get there. Flick it by hand and you set the speed, never the result. It is still plain HTML, CSS and JavaScript: no framework, no dependencies and no build step.

Decisions

The draw comes first

Every spin draws its winner, weighted by slice size, before the wheel moves a degree. Power-ups that do change the odds say so on screen, down to the percentage. The one exception, Rigged, has to be switched on by hand and switches itself off on reload.

Source: README, How To Use: Is it fair?

Odds that lean away from repeats

A twist that has just happened gets rarer for a while, and once a draft has taken more spins than it has names, the twists that undo picks ease off. Nothing is forced and nothing switches off. A balance test plays thousands of drafts: at Normal, twenty names now take about 30 spins, where they used to average 58 and could run past 300.

Source: README, Highlights: Chaos; Tests

One screen, checked at fourteen sizes

The wheel, the SPIN button and the live numbers are always on screen together, in four layouts from phone to desktop. A layout test fails if anything scrolls or falls off screen at any of 14 viewports from 320 × 568 to 1920 × 1080.

Source: README, One screen; Tests

The same race at 60 Hz and 120 Hz

The PANIC games run at a fixed 60 steps a second, so a 120 Hz phone plays the same race as a 60 Hz monitor. Skip ignores presses for its first second, so the key that spun the wheel cannot skip the game it started.

Source: README, Highlights: PANIC slice

Classic scripts, on purpose

The single file became a stylesheet and nine plain scripts rather than modules, so the page still opens straight from disk. Every change goes through one commit() that saves once and redraws everything from state, so no panel can show stale numbers.

Source: README, Project Structure