Home

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.

SourceURLUsed forLast checked
DrawNamesdrawnames.comThe DrawNames column on compare (exclusions, no-account draw, link invitations)2026-11-02
Elfsterelfster.com/secret-santa-generatorThe Elfster column on compare (draw restrictions, accounts)2026-11-02
Wikipedia — Christmas truceen.wikipedia.org/wiki/Christmas_truceBackground for the 1914 story2026-11-02
The Spokesman-Review (19 Nov 2006)spokesman.com — Secret Santa no longer secretThe 2006 Secret Santa story2026-11-02
Cloudflare privacy policycloudflare.com/privacypolicyThe processor paragraph in privacy2026-11-02
USPS holiday shipping datesusps.com — holiday shipping datesPosting-deadline advice on virtual Secret Santa2026-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

  1. Copy lives as data. Every English URL is one object in src/content.js or src/eeat.js with 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 in src/worker.js — a page cannot exist in the navigation without existing in the sitemap.
  2. A draw request. POST /api/groups runs cleanNames() (trim, collapse spaces, cut to 40 characters, reject case-insensitive duplicates), maps exclusion pairs into a blocklist in both directions, then calls draw() in src/logic.js.
  3. 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.
  4. 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 with exp, so a late alarm cannot resurrect an expired group.
  5. 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.
  6. 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.
  7. Tests. node --import ./test/cf-loader.mjs --test test/*.test.mjs runs 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.
  8. 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

Report a wrong page through corrections, or mail hello@secretsantaname.com.

Questions

Are the sources checked automatically?

No. Each row is opened by hand on the date shown; the tests check the site, not the outside pages.

Why do some pages cite code instead of a publication?

Because the claim is about this generator. Pointing at src/logic.js is honest; inventing an authority would not be.

Is the draw audited?

No. There is no public audit log. The guarantee is in the code and in the tests, and a participant can only check consistency: the same link always shows the same one name.

Ready to draw names?
Draw names now

Updated November 2, 2026