Enter your phone number
PhoneNumberField = country calling-code select + national number, normalised client-side to E.164 (^\+[1-9]\d{7,14}$ plus per-country length rules via libphonenumber-js). The UI always shows the exact E.164 string it will send. Send code stays disabled until the number is valid. The server re-validates (Δ PHONE_INVALID). The country defaults to the browser locale.
- Account (completed)
- Phone (current step)
- Email (not started)
Add your phone number
We'll text you a 6-digit code to confirm this number is yours. It's saved to your account as a verified contact number.
- Account (completed)
- Phone (current step)
- Email (not started)
Add your phone number
We'll text you a 6-digit code to confirm this number is yours. It's saved to your account as a verified contact number.
enter-phone · invalid (client E.164 check)
Shown on blur or submit, not on every keystroke. Field gets aria-invalid, the message is role=alert, and Send stays disabled.
- Account (completed)
- Phone (current step)
- Email (not started)
Add your phone number
We'll text you a 6-digit code to confirm this number is yours. It's saved to your account as a verified contact number.
enter-phone · rail with no email pending
The rail is built from data, not hard-coded. The Email step appears only when verification.email === true and emailVerified === false. Here email verification is off (or was already confirmed), so the rail shows Account → Phone only (data-email-step="omitted").
- Account (completed)
- Phone (current step)
Add your phone number
We'll text you a 6-digit code to confirm this number is yours. It's saved to your account as a verified contact number.
enter-phone · valid
The E.164 preview shows the exact value sent to POST /verify/phone/start { phone }.
- Account (completed)
- Phone (current step)
- Email (not started)
Add your phone number
We'll text you a 6-digit code to confirm this number is yours. It's saved to your account as a verified contact number.
sending · start in flight
Fields and button are disabled with a spinner, so a slow network can't double-submit (each extra send costs an SMS and counts against the rate limit).
- Account (completed)
- Phone (current step)
- Email (not started)
Add your phone number
We'll text you a 6-digit code to confirm this number is yours. It's saved to your account as a verified contact number.