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
201withalreadySignedUp: 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.
sourceis free-form ("landing", "steam", "discord", …) so we can see which channel converts;referreroptionally 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.