Our work · Case study

Turnout Shuffle

Raffle draws a fire department can stand behind. We designed, built and run a platform that turns a department's ticket sales into a provably fair draw, with printable results, in under a minute.

  • < 60 sfrom ticket sales to printable results
  • Every drawseeded by the NIST Randomness Beacon
  • Squareconnected, from ticket sales to the draw
  • Per departmentpublic pages on their own subdomain or domain
Turnout Shuffle's home page: Raffle draws your department can stand behind
Turnout Shuffle on a phone

The problem

Volunteer fire departments fund equipment and training through raffles: gun raffles, 50/50s, gift baskets, even vehicles. A single drawing can have thousands of tickets sold across a season, at events and online.

Assigning numbers to all those buyers was slow, manual spreadsheet work, and when the stakes are a truck or a rifle, “we shuffled it ourselves” invites doubt. Departments needed a draw that was fast, fair, and that anyone (a donor, a board member, a skeptic) could check.

What we built

A web app that takes a department from ticket list to results in four steps, and a public page for each department where buyers can look up their numbers.

  1. Bring in ticket salesUpload a CSV or Excel export, or pull orders straight from Square. Columns are detected automatically, or mapped by hand for unusual layouts.
  2. Pick a drawingEvery drawing in the file is found and listed. Choose one and it locks for the run.
  3. Run the shuffleEach buyer gets one entry per ticket, then the entries are shuffled from a public random seed. One token per draw.
  4. Print, export, notifyA numbered draw list for calling results, an alphabetical lookup so buyers find their numbers fast, CSV and PDF export, and winner emails.

Making a draw provable

The randomness doesn't come from us. Every shuffle is seeded by the NIST Randomness Beacon, a public service from the U.S. National Institute of Standards and Technology that publishes a new, cryptographically signed random value every 60 seconds.

  • 1The server fetches the latest beacon pulse, so the browser can't influence it.
  • 2The pulse and a fingerprint of the entries become the seed.
  • 3A ticket-weighted Fisher–Yates shuffle runs from that seed.
  • 4The results show the pulse number, and the draw is written to an audit log.

Anyone can look up that pulse on NIST's site and confirm it was real. And if the beacon can't be reached, the draw stops with an error. It never quietly falls back to a weaker source, because that would break the guarantee.

Under the hood

One account per department

Multi-tenant from day one. A department's staff share one token balance and one audit log, and sign in with a magic link instead of a password.

Square, end to end

Departments connect Square with OAuth. Creating a raffle sets up the Square catalog item and payment link, enforces ticket limits and imports orders for the draw. Tokens and subscriptions are billed through Square too.

A public page for every department

Each department gets a subdomain with its own logo and colors, or points its own domain at it, so buyers check results somewhere they recognize.

Simple, honest pricing

Pay per draw with tokens that never expire, or subscribe for the busy season: Department Monthly at $119 for 10 draws, or Unlimited at $199.

  • Vue 3
  • Vuetify
  • Node.js
  • Express
  • PostgreSQL
  • Drizzle ORM
  • Square
  • NIST Beacon
  • DigitalOcean
  • Terraform
  • Cloudflare

Have a product like this in mind?

We take ideas from first sketch to a live, paying product, then keep it running.