glasspick
Open-source, provably fair giveaway winner picker. Commit-reveal draws seeded by the drand public randomness beacon — verifiable by anyone.
Readme
Loading readme…
Open-source, provably fair giveaway winner picker. Commit-reveal draws seeded by the drand public randomness beacon — verifiable by anyone.
Loading readme…
An open-source, provably fair giveaway winner picker. Nothing behind the glass: every draw can be independently verified by the creator, the winners, and everyone who didn't win.
Winner-picker tools ask you to trust them: a winner pops out and you have no way to check the pick wasn't rigged. Open-sourcing the code isn't enough — you'd still have to trust that the host actually ran that code.
GlassPick removes the trust requirement:
winner[i] = SHA-256(seed | i) mod remaining over the sorted participant list. Same inputs, same winners, on any machine.Every draw produces a JSON record containing all inputs and outputs. The Verify tab recomputes the entire draw locally in your browser and cross-checks the randomness against the public drand beacon. You can also verify with a few lines of any language — no GlassPick required.
participants = dedupe(strip '@', case-insensitive) then sort (case-insensitive)
participantsHash = SHA-256(join(lowercase(participants), "\n"))
commitmentHash = SHA-256("glasspick-v1|" + participantsHash + "|" + count + "|" + winnerCount + "|" + nonce + "|" + drandRound)
seed = SHA-256("glasspick-seed-v1|" + commitmentHash + "|" + drandRandomness)
winner[i] = pool[ SHA-256(seed + "|" + i) mod pool.length ] (winner removed from pool each round)
All hashes are lowercase hex. The full implementation lives in src/engine/draw.ts (~150 lines, no dependencies).
pnpm install
pnpm dev # start the app
pnpm test # engine tests
pnpm typecheck
pnpm lint
pnpm build # static output in dist/
The app is a fully static SPA — no backend, no accounts, no tracking. All draw logic runs in your browser. Host dist/ anywhere (GitHub Pages, Cloudflare Pages, Vercel) for free.
Paste participant handles from any source (one per line or comma-separated). An X/Twitter API fetcher (pull likers/retweeters of a post automatically) is a planned optional adapter — the core draw stays source-agnostic so it works for any platform.
MIT