Auth CTA

Free Google login trigger, standalone and composed into the lead-capture CTA card used by the Results login gate (Bunch D). Never mentions payment — this is a lead-gen unlock, not a paywall.

GoogleSignInButton

Wraps the signInWithGoogle server action. Default variant is "outline", matching DESIGN.md's secondary button recipe. Renders the official 4-color Google mark plus label text.

PropTypeDefaultDescription
nextstring'/results'Where /auth/callback redirects after a successful login.
variantButtonProps["variant"]'outline'Any Button variant — outline matches DESIGN.md secondary button.
classNamestring—Extra classes merged onto the underlying Button.
childrenReactNode'Sign in with Google'Button label — override per context (e.g. AuthCTA passes a localized label).

Service unavailable state

Shown under the button when Supabase cannot be reached at the moment of sign-in (signInWithGoogle probes /auth/v1/health first and returns { error: "unavailable" }). Existing inline-error recipe (role="alert", text-xs text-destructive) with a LinkedIn contact link; text from serviceUnavailableCopy, follows the lang prop. Static replica here — the failure cannot be forced from a doc page.

PropTypeDefaultDescription
lang'ua' | 'en''ua'Language of the unavailable-service message. AuthCTA forwards it; ResultsView passes the interview language.

AuthCTA card

Opaque, bordered card (bg-card, border-border, shadow-md) — deliberately not a translucent/backdrop-blur panel. Meant to sit on top of a LockedOverlay fade.

Unlock your full feedback

Sign in with Google (free) to save your result and see detailed recommendations plus matched Product Designer job openings.

PropTypeDefaultDescription
titlestring—Headline — what unlocking gives the user.
descriptionstring—One or two sentences, never mentions price/payment (lead-gen, not paywall).
buttonLabelstring—Passed through to GoogleSignInButton as children.
nextstring'/results'OAuth return path — usually the current Results URL (with ?id= if present).
classNamestring—Extra classes on the card wrapper.
Sergiy Klymkovych

VoiceMock was built by one designer

I'm Sergiy, a product designer. I built this trainer myself — research, design system, code. On LinkedIn I show how products like this come together, and what it changes in a designer's work.

Product Designer · AI Design Engineer · Designer for Startups

See it on LinkedIn