Skip to content

Waitlist form: USA/LATAM signups show an error and the "position X" message is wrong #140

Closed

Description

@crstian19

Problem

Two bugs on the main waitlist form on nan.builders:

  1. USA and LATAM signups show an error. Picking USA or LATAM as the region and submitting shows an error instead of the "Noted. We are not open in your region yet." confirmation. EU signups go through.
  2. The "position X" message is wrong. After an EU signup the form shows position 019 / 19. That is the member's position over… the same number, so it says nothing about where they are in the queue.

What the code does today

Position. In registerViaBackend (src/lib/waitlist.ts), total is set to the same value as position:

position: data.position,
total: data.position,

waitlistSuccessText (src/lib/waitlistClient.ts) then renders position <position> / <total>, so the two numbers are always equal.

  • When the backend answers 409 (an email that is already on the list), registerViaBackend returns a synthetic success with position: 0, and no position is shown at all.
  • The same happens for a returning former member: the row isn't created until they confirm their email.

USA / LATAM. USA and LATAM are stored as interest signals with position 0, and status: 'interest' is derived from the region (src/lib/waitlist.ts). The reported error still needs reproducing to pin down whether it comes from:

  • the form's region selector (src/scripts/waitlist.ts, the isWaitlistRegion check that shows "Pick a region.");
  • the /api/waitlist route;
  • or the backend answer for non-EU regions.

Expected

  • USA and LATAM signups show the "interest" confirmation, with no error.
  • The EU message either shows a meaningful position (a real total, or no / total at all), or drops the position when there isn't a real one (409, returning member).

To do

  • Reproduce the USA and LATAM error locally (npm run dev) and find the failing step.
  • Fix the position/total message.
  • Add tests for both regions and for the 409 and returning-member answers.

Activity

  1. self-assigned this
    on Oct 2, 2026
  2. crstian19 commented on Oct 2, 2026

    @crstian19
    ContributorAuthor

    Update: root cause found

    It isn't a technical error. USA and LATAM are open now, but the site still behaves as if only Europe were.

    • A USA signup goes through: the member is stored as a normal waitlist signup (tier inference, region USA), the same as EU.
    • The form still shows the text for a region that isn't open yet, "Noted. We are not open in your region yet, but we will write as soon as we are.", because registerViaBackend (src/lib/waitlist.ts) derives status: region === 'EU' ? 'registered' : 'interest'.
    • The position message is wrong for every region:
      • total is set to the same value as position, so EU shows position 019 / 19;
      • USA and LATAM currently get position 0 from the backend, so they never show a position.

    Plan

    • This repo: treat all three regions as open. Success always shows the "You're on the waitlist" message, and the interest status and its copy go away. The position is shown only when the backend sends one (> 0), and without the fake total, e.g. position #019.
    • Backend (separate change): number the USA and LATAM queues per region, as EU already is, so those members also get a position.
  3. crstian19 commented on Oct 2, 2026

    @crstian19
    ContributorAuthor

    Final decision

    Product decided to drop the position from the waitlist message altogether. The number was a cumulative arrival counter, not a place in the queue, so showing it misled people.

  4. added a commit that references this issue on Oct 2, 2026
    4ae0e6d
  5. crstian19 commented on Oct 2, 2026

    @crstian19
    ContributorAuthor

    Fixed in #141, merged and deployed to nan.builders (9ae34f7).

    • USA and LATAM now get the same "You're on the waitlist" message as EU, instead of "not open in your region yet".
    • No position is shown in any region or case (new signup, already registered, returning member), as product decided.
    • /api/waitlist no longer returns a position: the response is { "ok": true, "status": "registered", "region": … }.

    Checked on production after the deploy, without creating any signup:

    • /api/waitlist returns {"ok":true,"status":"registered","region":"USA"} for a USA request.
    • The served page script contains neither the "not open in your region" text nor any position rendering.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions