← All reports
Crew Link join page
funlet-crew-join_v2.html
Pre-submit · default
crew-join-presubmit→/c/[token] · form
Bare crew name in the hero — no "Crew" suffix (2026-07-22 ruling). No member count, no member
names, no organizer attribution line. The crew name is server-injected, so it is present on first paint with no
loading card. First name is autofocused on both sides. The header deliberately differs from the canonical
— see the note under the ledger.
Built
Mockup
Validation · both fields empty
crew-join-errors→validate-on-tap
The button is gated on the consent checkbox alone, so tapping Join with empty fields surfaces both
locked strings — First name required and Phone number required — and moves focus to the
first bad field. The previous build disabled the button until the fields were valid, which meant these strings
could never appear.
Built
Mockup
Validation · phone under 10 digits
crew-join-badphone→format error
A non-empty phone that is not 10 digits reports Enter a 10-digit phone number, not the
required-field string. The first-name error has already cleared because that field was fixed — errors clear per
field, and focus lands on the phone.
Built
Mockup
Success
crew-join-success→joined
Hero and form are both replaced by the success card; the header and its crew name stay. Bare name
again — You joined Pickleball! — with Organizer will be in touch and no trailing period.
Left-aligned, no check icon: the canonical has neither. Captured with a stubbed POST so no contact row was
written to the staging crew.
Built
Mockup
What the computed-style pass caught
not visible in a screenshot diff
Header — deliberate departure from the canonical. The canonical
specifies a tile holding a three-bar glyph, with the crew name as the page title. That glyph is a placeholder, not
the funlet mark, and following it leaves the page with no brand anywhere — a stranger arriving from an SMS link
sees an unfamiliar shape and a crew name. The header therefore matches the sibling public page
/event/[code]: the real logo, 52px, hairline rule. Nothing is lost — the hero states the crew name,
which is where the canonical puts it too. The same placeholder currently ships on /i; correcting the
mockups upstream would stop it propagating into every page rebuilt from them.
Accepted divergences: secondary text stays #5a6e72 rather than
the canonical's #6b8184 — Lock 13 darkened it for WCAG AA and the token is marked do-not-override, and
it is the only colour delta in the ledger. Title and OG stay static and neutral per the /i and
/event lock that keeps per-token data away from link-preview fetchers. The revoked / not-found / error
cards are kept, since the canonical puts invalid-token handling out of its own scope and revoke shipped after it
was frozen.