feat(onboarding): panel signup wall variant - #6376
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
capJavert
left a comment
There was a problem hiding this comment.
The panel variant still has an accessibility blocker before merge: the QR card is the only app-install destination, but the SVG is aria-hidden and there is no link a keyboard or screen-reader user can follow. Please add an accessible smart-link fallback (it can be visually hidden if needed) and cover it with a test. The real-device QR scan noted in the PR should also be completed before final approval.
Adds a `panel` background to the signup wall (FunnelStepType.HeroLanding): the form in a left column with the marketing landing page's hero artwork framed in the right one. Stacks below `laptop`, where the artwork takes the top of the screen and dissolves into the page background. Selected by Freyja config via the step's `background` parameter, so the default (`cards`) is unchanged. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
A short desktop window (1440x700 is a common laptop size) matched the max-height query and inherited phone-sized type in the two-column layout. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The QR was the only route to the app stores, and it is decorative markup (aria-hidden) that only helps someone holding a phone. The card is now an anchor to the same smart link, named by its destination, so keyboard and screen-reader users have the same route. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
e35b0d0 to
ceff7d8
Compare
|
@capJavert good catch — fixed in ceff7d8. The card is now an anchor to the same smart link ( Two details worth calling out:
Test coverage in On the real-device scan: still outstanding and I can't do it from here. I've verified the encoding round-trips to an identical matrix and that the smart link resolves correctly per platform (iPhone UA → Also rebased onto latest |
capJavert
left a comment
There was a problem hiding this comment.
Reviewed by AI.
One blocking accessibility finding remains. CI is green, and I independently verified that the baked QR payload decodes to https://r.daily.dev/get.
| // aria-label rather than the visible copy: "Scan to get the app" describes | ||
| // the QR, which is useless to anyone who cannot scan it, so the link states | ||
| // its destination instead. | ||
| aria-label="Get the daily.dev app for iOS or Android" |
There was a problem hiding this comment.
Blocking: the visible label is "Scan to get the app", but this aria-label replaces it with a name that does not contain that text. This fails WCAG 2.5.3 Label in Name and prevents voice-control users from activating the link using the wording they can see. Please include the visible label verbatim, for example aria-label="Scan to get the app — daily.dev for iOS or Android", and update the test that currently asserts /scan/i is absent.
Reviewed by AI.
Adds a
panelbackground to the signup wall (FunnelStepType.HeroLanding): the form sits in a left column with the marketing landing page's hero artwork framed in the right one.Selected by Freyja config via the step's
backgroundparameter — the default (cards) is untouched, so nothing changes until the parameter is set.Layout
Desktop (
laptop+) — two columns. Form left, artwork right in a rounded frame with an "ambilight": a blurred, over-saturated copy of the artwork behind the frame, so the panel casts its own colour onto the page. A glass QR card floats bottom-right of the frame.Stacked (below
laptop) — the artwork takes the top of the screen and dissolves into the page background; the form is bottom-anchored underneath, matching the spacing of the existing cards/desk walls. The footer links and disclaimer only exist in the two-column layout.Compact phones — a second tier keyed on viewport height (
max-height: 759px, bounded to belowlaptop), because height is the axis under pressure: a 375×812 phone gets the roomy treatment, a 375×667 one does not. The artwork drops 50dvh → 32dvh and the type/gaps tighten with it.Notes for review
https://r.daily.dev/get, daily.dev's smart link, so the destination is reachable by pointer and keyboard and not only by scanning. The QR is decorative (aria-hidden) and the link is named by its destination. Covered byLandingAppInstall.spec.tsx.OnboardingRegistrationForm:tertiarySignupButtonClasshardcoded!text-whiteon a button sitting on the page background, making its label invisible in light mode. Now!text-text-primary. This affects every onboarding signup surface, not just this variant.splitSignupStylealready existed and was fully plumbed but nothing switched it on. This variant enables it, which gives "Sign up with GitHub/Google" + "Create account". Its unused full-width "Sign in" button is removed in favour of the standardMemberAlreadylink.onb-*class hooks inheroStyles.tsare set fromOnboardingRegistrationForm(onb-split-cta,onb-split-login). They are inert wherever the hero's CSS is not present; both ends are commented.Known gaps
className.onboardingSignupis dead across the auth stack:OnboardingRegistrationFormdeclares it andAuthOptionsInnerforwards it, but the component never destructuresclassName, so it has never applied for anyone passing it. Left alone here as out of scope.Storybook
Components/Onboarding/Steps/FunnelHeroLanding→Panel, plusComponents/Onboarding/Signup wall comparison, which renders the currentCards/Deskwalls next toPanelin real iframes at Mobile / MobileSmall / Tablet / Desktop sizes. Iframes rather than scaled divs because breakpoints come from the viewport in both CSS anduseViewSize.🤖 Generated with Claude Code
Preview domain
https://claude-signup-wall-panel.preview.app.daily.dev