Spin Picker
A native iOS wheel-of-names app by Slickfive. Type your names, tap the wheel, and watch it spin down to a verdict — who does the dishes, who picks first, who wins the raffle. Two modes, spoken results, and confetti for the winner.
Every group decision,
settled by a spin
No accounts, no setup, no arguments. Build a list as fast as you can type — Reminders-style rapid entry, return for the next name, or paste a whole list and it splits into rows — then hand the wheel its verdict.
- Instant lists. Inline-editable rows, multi-line paste, swipe to delete — and your last list is restored on every launch.
- Fair by construction. Every spin's landing slice is drawn from a SplitMix64 generator seeded with fresh system entropy.
- Results that talk. Each pick is read aloud — "Alice is out. Diego wins!" — in your choice of voice.


Tap · Spin · Verdict

Tap the wheel
Every name gets a glossy Canvas-drawn slice in its own colour. The hub pulses — one tap sets it off.

The spin
Six full turns on a long deceleration curve, with a synthesized tick at every slice boundary — slowing as the wheel does.

The verdict
The pointer lands, the name is announced out loud, and a glass chip drops into the eliminated strip below.
Watch a full round
Recorded straight from the iPhone 17 Pro simulator: list entry, three elimination spins, and the winner reveal with trophy, confetti and the results card.
- What you can't hear: a crisp 1850 Hz tick on every slice boundary, a rising four-note win chime, and the winner announced by voice.
- What you can't feel: a medium haptic on launch, a rigid thump on landing, and a layered celebration haptic under the confetti.
Two ways to let fate decide
Same wheel, two rituals — knock names out one by one, or build a full ranking spin by spin. The app remembers which one your table prefers.
Eliminate
Each spin knocks a name off the wheel. The slices left behind grow bigger, the tension grows with them, and the last name standing wins.
last one left winsPick order
Each spin picks the next name in sequence — 1st, 2nd, 3rd… — until the whole list is ranked. Perfect for draft order and turn order.
full rankingA reveal worth waiting for
When one name remains, the results card rises on a spring: the winner under a gold trophy, everyone else listed in order, and 90 confetti particles colour-matched to the wheel raining down behind it.
- Both stories told — Eliminate shows first-out to last with the survivor pinned at the bottom; Pick order pins the 1st pick on top.
- Spin Again reshuffles the same list with a fresh seed; New List drops you back to the editor.
- Announced aloud — "Diego wins!" — with a C-major arpeggio and a celebration haptic.


Engineered suspense
The landing slice is drawn before the wheel moves from a SplitMix64 generator seeded with system entropy. Then six full turns play out the drama on a single cubic-Bézier curve — a hard launch into a long, agonising crawl:
- Ticks ride the curve — a 600-sample Bézier solver precomputes the exact moment every slice boundary crosses the pointer, so the ticks decelerate in perfect sync with the wheel. No timers, no drift.
- Never dead-centre — a ±32% jitter inside the winning slice means the pointer never stops suspiciously on a boundary or a bullseye.
- Cancellable to the end — one structured task drives ticks, haptics and completion; leaving mid-spin tears it all down cleanly.
An audio engine with zero audio files
Every sound is synthesized at runtime into AVAudioEngine buffers — the app ships no audio assets at all. On top, an AVSpeechSynthesizer voice narrates the round, politely ducking whatever music is playing.
| Sound | Recipe | Moment |
|---|---|---|
| tick | 22ms click · 1850Hz sine, exponential decay | every slice boundary, synced to the spin curve |
| win chime | arpeggio · C5 E5 G5 C6, 130ms notes | the winner is revealed |
| voice | premium system voice · female or male | "Alice is out." · "Diego wins!" |
Plus a full haptic score — selection taps, a medium impact on launch, a rigid thump on landing, and a layered celebration for the winner — with sound, speech and a one-tap master mute all independently switchable.

Lists that stick around
The Friday game-night crew, the office raffle, the chore rota — save any list by name and reload it in two taps. The wheel is always one spin away from your regulars.
- Auto-restore — the last list you used is already loaded next launch; first-timers get a friendly 8-name sample.
- Paste a whole list — newline- or comma-separated text pasted into one row splits into rows automatically.
- Kind to your battery — edits are debounced into a single write instead of persisting every keystroke.
Tuned for every table
- Pacing — spin length from 2 to 8 seconds with Quick / Normal / Long presets, so a quick coffee-run pick and a slow-burn raffle both feel right.
- The voice — female or male announcer, chosen with a live preview; the app prefers the premium system voice for your language.
- Ten slice colours — a vibrant palette assigned automatically as you type.
- Dark / Light / System theme over a drifting mesh-gradient backdrop, with sound and speech each on their own toggle.


Accessible by design,
private by default
- VoiceOver end to end — the wheel announces itself ("Wheel with 8 names") and spins on activation; results rows read name, placement and winner status.
- Reduce Motion respected — the idle pulse and confetti bow out gracefully; Dynamic Type and high-contrast semantic colours throughout.
- Spoken results double as an accessibility feature — you never need to read the wheel to know the verdict.
- Nothing leaves the device — no account, no network calls, no analytics, no tracking. Siri opens it with "Spin the wheel in Spin Picker."
SwiftUI for iOS 26 · Liquid Glass · Swift 6
A Canvas-drawn wheel under native Liquid Glass chrome, driven by @Observable view models and structured-concurrency spins. XcodeGen generates the project from a single YAML; the privacy manifest ships in the box.