← Back to projects
Prize Rush
Building

Spreadsheet Killer for In-Game Raffle Operations

Raffle ticket sales, player management, employee attribution, and provably fair draws — built to replace a Google Sheets workflow where a repeat buyer sale needs to happen in under 5 seconds. Stage 0 (full demo UI) is deployed at app.prizerushraffles.com. Supabase backend and Discord bot are next.

ReactViteTypeScriptTanStack QueryTailwind CSS
Dashboard — employee leaderboard, revenue stats, and quick actions
100%
🎫
Staff Seller
At booth or in Discord
Quick Sale
<5s repeat buyer flow
🔍
Live Search
Debounced, ranked autocomplete
🔧
ServiceContainer
Repository pattern (DI)
💾
localStorage
Mock backend (Stage 0)
🎰
Draw Engine
crypto.getRandomValues
Stage 0Demo UITap a node for details
Key component
Infrastructure
Data flow
Demo UI
Stage 0

Complete admin application deployed with all UI routes functional against a localStorage mock backend. Dark/gold theme. Quick Sale workflow with <5-second repeat buyer flow, live search with ranked autocomplete, Discord paste detection, inline player creation, and sticky employee memory. Repository pattern with ServiceContainer interface makes the backend swap a one-file change.

What Ships
Quick Sale — live search (debounced, ranked: exact > prefix > contains) by Discord, phone, bank ID, or name
Discord Paste Detection — exact match auto-selects, no match shows 'Possible matches' panel
Inline Player Creation — mini-form without leaving the sale flow
Sticky Employee — remembers last-used seller for faster repeat entries
Dashboard — active raffle stats, tickets sold, revenue, employee leaderboard
Draw Engine — provably fair via crypto.getRandomValues with rejection sampling
Entry status flow: PENDING → PAID → CANCELED/REFUNDED
Sequential ticket numbers per raffle, void capability
Blacklist by Discord ID, handle, phone, or bank ID — blocks entry creation and payment
Audit log — every mutation logged with actor, action, before/after snapshots
10% commission tracking per employee
Repository pattern (ServiceContainer) — swap localStorage for Supabase in one file
Impact
The entire raffle operation — from ticket sale to draw — is functional and deployed. Staff can demo the full workflow. A repeat buyer sale takes under 5 seconds instead of 30+ with spreadsheets.