我厌倦了为秘密圣诞老人收集电子邮件,所以我做了这个。
我每年都会使用Elfster或DrawNames来为团队和朋友组织秘密圣诞老人活动,但我对它们强制用户注册和收集电子邮件的做法越来越感到沮丧。对于小型、非正式的团体来说,这完全是多此一举,并且造成了不必要的隐私摩擦。
因此,我决定反转设计:如果整个活动状态都存储在一个可分享的链接中会怎样?
我构建了秘密圣诞老人生成器。它的工作原理如下:
组织者输入名字,设置排除项(可选),然后点击生成。
系统在服务器上创建一个唯一的活动ID,并生成一个哈希链接(例如,/event/abc123def456)。所有参与者数据、匹配和愿望清单都与这个ID相关联。
你将这个链接分享给小组。
每位参与者访问该链接,输入他们的名字,并立即看到他们的分配(匹配逻辑在首次访问时在服务器端运行)。他们可以添加愿望清单。
无需账户,无需电子邮件,无需个人资料。关闭浏览器标签页,活动就“消失”了,但链接在被清除之前仍然有效。
技术栈与决策:
前端:纯HTML/JS(Vue.js),注重速度。
后端:Node.js/Express。核心是确保随机、公平的抽签,同时尊重排除项。
数据:活动存储在内存中(例如,Redis),具有TTL(例如,14天)以自动过期。这一点至关重要——我们不想永久存储任何东西。
隐私:没有分析工具(例如,Google Analytics)。可能仅有最小的匿名服务器日志。
挑战:确保所有参与者的有效匹配,同时尊重“A不能得到B”的约束(这是一个图论问题,通过回溯法解决)。
这不是一个创业项目。这是一个周末项目,解决一个特定的需求。我认为网络需要更多这样简单、自给自足的工具。
如果你需要在今年组织一个快速、无摩擦的秘密圣诞老人活动,可以试试这个。欢迎提供技术反馈。
链接:https://secretsantagenerator.online
查看原文
I’ve used Elfster or DrawNames every year to organize Secret Santa for teams and friends, but I’ve grown increasingly frustrated with their mandatory user registration and email collection. For small, informal groups, it’s complete overkill and creates unnecessary privacy friction.<p>So, I decided to invert the design: What if the entire event state lived inside a shareable link?<p>I built Secret Santa Generator. Here’s how it works:<p>The organizer enters names, sets exclusions (optional), and clicks generate.<p>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.<p>You share this link with the group.<p>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.<p>No accounts, no emails, no profiles. Close the browser tab, and the event is “gone,” but the link remains active until it’s purged.<p>Stack & Decisions:<p>Frontend: Plain HTML/JS (Vue.js), focused on speed.<p>Backend: Node.js/Express. The core is ensuring random, fair draws while respecting exclusions.<p>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.<p>Privacy: No analytics (e.g., Google Analytics). Possibly only minimal, anonymized server logs.<p>Challenge: Ensuring valid matches for all participants while respecting “A cannot get B” constraints (a graph problem, solved with backtracking).<p>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.<p>If you need to organize a quick, frictionless Secret Santa this year, give it a try. Technical feedback is welcome.<p>Link: https://secretsantagenerator.online