Being Human — Internal Docs
API

Wishlist

The landing-page signup flow

The pre-launch mailing list. The landing page posts an email; we count signups and (optionally) announce them in Discord.

Sign up

curl -X POST http://localhost:3001/api/wishlist \
  -H 'Content-Type: application/json' \
  -d '{"email": "player@example.com", "source": "landing"}'
# → 201 {"ok": true, "alreadySignedUp": false}

Semantics worth knowing:

  • Idempotent per email (emails are lowercased first). Re-signups return 201 with alreadySignedUp: true — no new row.
  • No membership leak: the response never reveals whether an email was already on the list to a third party; the same shape comes back either way.
  • source is free-form ("landing", "steam", "discord", …) so we can see which channel converts; referrer optionally captures the page/UTM.
  • Rate-limited to 10 req/min/IP.

Count

curl http://localhost:3001/api/wishlist/count
# → {"count": 1337}

Public on purpose — for a "N people wishlisted" badge on the landing page.

Side effects

A new signup fires a Discord notification (🎉 New wishlist signup via **landing**) if DISCORD_WEBHOOK_URL is set. Fire-and-forget: Discord being down never fails a signup.

On this page