So, I decided to invert the design: What if the entire event state lived inside a shareable link?
I built Secret Santa Generator. Here’s how it works:
The organizer enters names, sets exclusions (optional), and clicks generate.
The system creates a unique event ID on the server and produces a hashed link (e.g., /event/abc123def456). All participant data, matches, and wishlists are tied to this ID.
You share this link with the group.
Each participant visits the link, enters their name, and instantly sees their assignment (matching logic runs server-side on first access). They can add a wishlist.
No accounts, no emails, no profiles. Close the browser tab, and the event is “gone,” but the link remains active until it’s purged.
Stack & Decisions:
Frontend: Plain HTML/JS (Vue.js), focused on speed.
Backend: Node.js/Express. The core is ensuring random, fair draws while respecting exclusions.
Data: Events are stored in memory (e.g., Redis) with a TTL (e.g., 14 days) for auto-expiry. This is key—we don’t want to store anything permanently.
Privacy: No analytics (e.g., Google Analytics). Possibly only minimal, anonymized server logs.
Challenge: Ensuring valid matches for all participants while respecting “A cannot get B” constraints (a graph problem, solved with backtracking).
This isn’t a startup. It’s a weekend project solving a specific itch. I think the web needs more of these simple, self-contained tools.
If you need to organize a quick, frictionless Secret Santa this year, give it a try. Technical feedback is welcome.
Link: https://secretsantagenerator.online