Methodology
By Shangyi Duan · Last verified 2026-11-02 · Sources: the source table on this page · Report an error
What this site checks, how each page is produced, and what it cannot promise. Every row below is a URL this site already cites.
Sources
Nothing here is based on an interview, a survey or a scraped price feed. The table lists the external pages the site cites, what each one supports, and the date it was last opened.
| Source | URL | Used for | Last checked |
|---|---|---|---|
| DrawNames | drawnames.com | The DrawNames column on compare (exclusions, no-account draw, link invitations) | 2026-11-02 |
| Elfster | elfster.com/secret-santa-generator | The Elfster column on compare (draw restrictions, accounts) | 2026-11-02 |
| Wikipedia — Christmas truce | en.wikipedia.org/wiki/Christmas_truce | Background for the 1914 story | 2026-11-02 |
| The Spokesman-Review (19 Nov 2006) | spokesman.com — Secret Santa no longer secret | The 2006 Secret Santa story | 2026-11-02 |
| Cloudflare privacy policy | cloudflare.com/privacypolicy | The processor paragraph in privacy | 2026-11-02 |
| USPS holiday shipping dates | usps.com — holiday shipping dates | Posting-deadline advice on virtual Secret Santa | 2026-11-02 |
Pages with no external source name the site's own files in their verified line. Those files are src/content.js and src/eeat.js (English copy), src/logic.js (the draw) and src/worker.js (storage). That is deliberate: a page about how this generator behaves has no outside authority to appeal to, so it points at the code instead.
How a page is produced
- Copy lives as data. Every English URL is one object in
src/content.jsorsrc/eeat.jswith title, description, H1, lead, body, FAQ and update date. The two language modules (src/nl.js,src/de.js) follow the same shape. Routing, canonical tags, hreflang and the sitemap are generated from those keys insrc/worker.js— a page cannot exist in the navigation without existing in the sitemap. - A draw request.
POST /api/groupsrunscleanNames()(trim, collapse spaces, cut to 40 characters, reject case-insensitive duplicates), maps exclusion pairs into a blocklist in both directions, then callsdraw()insrc/logic.js. - The draw. People with more exclusions are placed first; receivers are tried in shuffled order with Fisher–Yates; the search backtracks on a dead end and stops at 200,000 steps. A complete assignment is required — there is no partial save.
- Storage. The result is written as one Durable Object per group with
exp = Date.now() + TTL_MS(TTL_MS = 120 days) and an alarm at that time. Every read also compares the clock withexp, so a late alarm cannot resurrect an expired group. - Private links. Each participant gets
token(8)— 8 random bytes — and the URL shape/r/<group>-<token>. The reveal response contains only that one person's match, their wishlist and an optional profile. - Verified lines are manual. The date in "Last verified" is the date the copy and the code it describes were last read end to end and the tests were run. No crawler and no automated price check is involved.
- Tests.
node --import ./test/cf-loader.mjs --test test/*.test.mjsruns the draw 500 times per case, repeats 300 full server draws to prove exclusions hold, and checks every sitemap URL for one H1, a canonical tag, valid JSON-LD and a unique title. - Gift pages show budget bands. No retailer price feed is connected and no affiliate account is confirmed, so an item is listed with the band it belongs to instead of a price that would be stale on arrival.
Known limitations
- Gift ideas are suggestions, not prices. Each list is tied to one budget band; the shop, the size and the shipping decide the real cost.
- The draw is random and constrained, not uniform. With exclusions, the search returns the first complete assignment it reaches rather than sampling every valid matching with equal probability, so pairings are legal and unpredictable but not equally likely.
- The comparison is present/absent, not a test. Compare records what each provider's public pages showed on 2026-11-02; features can change, and "not shown publicly" is not proof that a competitor lacks a feature.
Report a wrong page through corrections, or mail hello@secretsantaname.com.
Updated November 2, 2026