Project
Deranged Draw
A no-self random draw for prompts, challenges, and group exchanges. Everyone gets someone else's submission through a private link, with assignments fixed once and preserved across reloads.
Overview
In Deranged Draw, everyone in a group gets someone else's slip. It works for writing prompts, game ideas, art challenges, recipes, or any exchange where nobody should draw their own submission.
The organizer can enter every slip, or open a draw where participants submit through a shared join link. In an open draw, the organizer sees who's joined but can't read their submissions, and once at least two people are in, they can fix the draw and hand out private reveal links.
A draw that stays drawn
The server validates the input and generates a permutation with no self-assignments, using Fisher-Yates shuffling with rejection and a cryptographic random source, then writes all assignments in one database transaction.
Opening a reveal link reads the stored result. The assignment stays the same through reloads and later visits, regardless of who opens their link first. Chat previews show the draw title and recipient information while keeping the assigned slip out of the preview.
Small, deliberate scope
No account is required.
Private management, join, and reveal links carry access to their respective actions. Invalid links get a generic not-found response.
The app uses Next.js, React, TypeScript, Drizzle, and PostgreSQL, with unit, database integration, and browser tests covering the draw rules and the flows around them. Light and dark themes are rendered from a saved cookie so the initial page matches the selected theme.