affectUI › Screens › App screens

Onboarding / Ready

Last step of setting up an AI assistant: a quiet summary of what it learned from, its name, voice and handover, each with Edit; the dashboard glides back to its top and comes alive – numbers land, Draft turns Live.

Part of affectUI Pro. Install: npx shadcn@latest add https://www.affectui.com/r/onboarding-ready.json · Import from @/components/ui/onboarding-ready

When to use

  • The end of a setup flow – a calm look back at the answers before people start
  • When the product comes alive with what they just set up and that moment is worth showing

When not to use

  • Long summaries with many settings – link to Settings instead
  • Flows with one step – go straight to the product

Usage

import { OnboardingReadyScreen } from "@/components/ui/onboarding-ready";

export default function Page() {
  return (
    <OnboardingReadyScreen
      domains={draft.domains}
      brand={draft.names[0]}
      name={draft.assistant.name}
      tone={draft.assistant.tone}
      length={draft.assistant.length}
      handoverTo={draft.assistant.handover ? draft.assistant.email : undefined}
      onEdit={(step) => router.push(["/onboarding/website", "/onboarding/brand", "/onboarding/tone"][step - 1])}
      onFinish={() => api.publishAssistant().then(() => router.push("/"))}
    />
  );
}

Props

NameTypeDefaultDescription
domainsstring[]["northwind.com"]From the first step – the summary and the Knowledge count
brand / aliasesstring / string[]From the second step; brand is derived from the first domain when left out
namestringThe assistant's name from the third step – "<brand> Assistant" when left out
tone"friendly" | "neutral" | "formal""neutral"From the third step
length"short" | "balanced" | "detailed""balanced"From the third step
handoverTostring"support@northwind.com"Who it hands over to; an empty string reads "Nobody – it answers itself"
onFinish() => voidOpen dashboard – the end of the flow
onEdit(step: 1 | 2 | 3) => voidShows Edit on every row; called with the step that row came from
onBack() => voidShows Back in the top bar
autoFocusbooleanfalseFocus the first field when the step opens (Ready: Open dashboard) – turn it on in a real flow so the keyboard carries on from step to step
step / stepsnumber4 / 4Where this step sits in the flow
email, product, logo, layout, onLogout, classNameAs in Onboarding / Website

Accessibility

  • The summary is a description list – each answer read with its label
  • Every Edit button names what it edits ("Edit voice")
  • The dashboard on the right is decoration and hidden from assistive tech
  • With prefers-reduced-motion the dashboard is live at once, without the glide

Responsive

  • Fills its container – give it the full viewport height
  • The title sits at the same height as in the other steps, so moving between them nothing jumps
  • Long answers end in an ellipsis instead of wrapping
  • Dark mode built in: switches when an ancestor (usually <html>) has the class dark or data-theme="dark"

Requirements

  • React 19
  • @hugeicons/react
  • @hugeicons/core-free-icons
  • Onboarding / Website (installed with it – frame, dashboard and agent mark come from there)