trythings guide

Getting in

Onboarding

A brand-new account is asked for one thing before it can go anywhere: a display name. This is the whole of it — where the form appears, what it will and will not accept, what submitting writes, and what happens to someone who walks away half way through.

At a glance

  • One screen, two fields. A display name, and an optional profile photo. There is no second step and no progress bar, because there is nothing to progress through.
  • It is not offered, it is imposed. Every page that needs an account redirects a new member here until it is done.
  • Only the name is required. The photo can be skipped, and skipping it costs nothing that cannot be added later.
  • Nothing is saved until Continue. Abandon the form and the account is exactly as it was — which means the next page you open puts you straight back on it.
  • It happens once. Once finished the form cannot be re-opened; the same two things are edited in Profile from then on.

Where it appears

Nobody navigates to onboarding. It is a redirect. Every page that needs an account — which is all of them bar the landing page, sign-in, the unsubscribe link and this form itself — sits behind one guard, and that guard checks two things in order: are you signed in, and have you onboarded. Fail the first and you go to sign-in. Fail the second and you land here, whatever you were actually trying to open.

The address you were heading for rides along in the URL, which is what lets Continue put you back on it afterwards. It is the same guard in the other direction: a member who has onboarded and opens /onboarding is sent to the dashboard instead, so there is no way back into the form.

What you are asked for

The onboarding form on a phone: heading Welcome — let's set up your profile, an empty Display name field, an optional Profile photo tile, and a faded Continue button.
A magic-link signup arrives with no name at all, so the field is empty and Continue is off. This is the first thing a new account sees.
Display name
Required. Trimmed, and between 1 and 80 characters. It is shown on your proofs and beside you in every group.
Pre-filled with
Whatever name the account already carries. Signing in with Google supplies one; a magic-link signup does not, so that field starts empty.
Profile photo
Optional, and one image. It uploads as soon as you pick it, before you submit.
Your timezone
Never asked for. The browser’s own timezone is read and sent with the form; an account whose browser did not say is stored as UTC.
Anything else
No. Email is already known, and there is no password to choose.

Continue turns on when the name does

The button is refused, not the submission — there is no error to read, because there is nothing to press. Four things hold it off, and any one of them is enough:

  • The name is empty, or is only spaces, or is longer than 80 characters once trimmed.
  • A photo is still uploading.
  • A photo upload failed and its tile is still on the form. Remove it and Continue comes back — a failed photo blocks the form rather than being silently dropped from it.
  • The form is already saving, so a second press cannot double-submit.
The same form with Alex Rivera typed into the Display name field and the Continue button now at full strength.
A name is all it takes. The photo tile is still empty here, and Continue does not care.

What Continue writes

One transaction, so it either all lands or none of it does:

Your display name
Trimmed, exactly as the field shows it.
Your photo
Attached to your account. Skipping leaves it unset.
The provider avatar
Cleared. See below — this is the one surprise in the whole flow.
Your timezone
The browser’s, or UTC if it arrived without one. Every “today” the app draws for you is measured against it from here on.
The moment you finished
This is the stamp the guard reads. Writing it is what stops the bouncing.

Where you land

The dashboard greeting Alex with no groups: an empty-state card reading No groups yet and a Create your first group button.
The default destination, as a member with nothing in it sees it. Onboarding hands you straight to the first thing to actually do.
By default
The dashboard.
If you were bounced here
Back to the page you were originally opening — a group, a proof, an invite link. The address travelled with you.
If that address is not an internal one
The dashboard. Anything that is not a plain same-site path is refused rather than followed, so an onboarding link cannot be used to bounce someone off the site.
If you were heading for an admin page
The dashboard. The admin guard sends you to onboarding without carrying the address, so that one destination is not restored.

Walking away half way

Nothing on this form is written until Continue is pressed. Closing the tab, going back, killing the app on a phone — the account stays exactly as it was, un-onboarded.

There is no draft and nowhere to resume, and that is not a gap: the form is one screen, so "where you left off" and "the start" are the same place. What the next visit looks like:

  • You are put back on it by the first page you open that needs an account — and the address remembered is that new page, not the one you were on the first time.
  • The fields are empty again. The name is re-read from the account, so a magic-link signup gets a blank field a second time. Anything typed and not submitted is gone.
  • A photo that had finished uploading is not attached to you, because attaching is part of the submission. It is left as an upload that never became anything, and a daily sweep reclaims those once they are a day old.

It runs once

Two separate refusals make that true, rather than one:

  • The page cannot be re-opened. An onboarded member who types /onboarding is redirected to the dashboard.
  • The endpoint refuses a second submission with "Onboarding already complete". A tab left open on the form overnight cannot re-run it and overwrite the name and photo set since.

Both of those are answered by the same stored moment. Changing the display name or the photo afterwards is Profile's job, and it does not go back through this form — which is also why the two do not agree on length: onboarding stops a name at 80 characters, and the edit in Profile allows 100.