Brand Onboarding

The /onboarding/brand interview, from the website to the brand dashboard

Overview

/onboarding/brand is the onboarding for brands that want to work with talent. It starts with the brand's website, researches it, and then asks who the visitor is, who they are looking for, what they want done and a rough budget. It ends on the brand dashboard.

The account is the brand. The person filling it in is saved as the contact. It runs on the same page, chat, research card, photo card and sign-up as Agent Setup Onboarding.

Flow

What Z asks

The questions are BRAND_LANDING_INTERVIEW_QUESTIONS in packages/z-agent/srv/src/onboarding-questions.ts, asked one at a time in this order.

#AreaWhat Z asksCovered when
1sources"What's your brand's website? Add any social handles too, so I can learn your brand and match the right talent."A website or handle (researched), or the brand name when the site cannot be opened
2contact"And your full name, first and last? Not the brand, you, the person I'll be working with."The person's full name
3idealTalent"Who are you looking for? Describe your ideal talent, like 'US athletes with 100K+ followers.'"Their ideal talent in their own words: type, size, location
4formats"What do you want them to do? Name any that fit."Social posts, ads with their face or voice, appearances, merch, or open to ideas
5budget"Roughly what's your budget per deal?"Under $1K, $1K to $10K, $10K to $100K, $100K+, or not sure yet
  • When the ideal-talent answer already names formats, the agent confirms them ("Looks like you want social posts and an appearance. Anything else?") instead of asking again.
  • The brand interview never asks for a phone number.
  • Formats and budget show canned chips. A tap sends that answer. The person can still type.

What code does, not the model

  • Opening lines. Code posts the intro and the website question when the room is created (onboardingOpeningLines).
  • The account is the brand. Its name comes from the research card. If the site cannot be read and they type the brand name, code saves it to onboarding.ownerDisplayName. The first reply is never saved as a name.
  • The person is the contact. Code saves their full name to onboarding.contactName, never to onboarding.ownerDisplayName. It reads the agent's last question to tell which name the reply gives, and only in the talent, brand and agency interviews.
  • Budget. The band is evidence in onboarding.coverage, not host.scout.pricingAnchor. The exact budget is asked per campaign.
  • Whose links. Only the links from the website step are saved as the brand's (savesChatLinksAsOwn). A handle given later, such as an example of the talent they want, is not saved as theirs and is not researched. See Handles that are not the company.
  • Account type. On claim, the account type is set to brand (setAccountType) before the dashboard opens.

Names and account type, end to end

After sign-up

  1. Photo. "Add your logo so talent see who they'd be working with." Nothing is taken from their site. Skip works too.
  2. Sign up. The auth modal opens on the page, prefilled with the brand name.
  3. Claim. Bouncer and Scout are enabled, the account type becomes brand, and the onboarding is copied to the account memory: the brand as identity.displayName, the person as identity.contactName, plus the confirmed profile and links.
  4. Dashboard. The brand dashboard opens.

Key files

AreaFile
Questionspackages/z-agent/srv/src/onboarding-questions.ts (BRAND_LANDING_INTERVIEW_QUESTIONS)
Goal, persona instructions, Distil note, write rulespackages/z-agent/srv/src/onboarding-instructions.ts (LANDING_FLOWS.brand, restrictOnboardingUpdates)
Opening lines, link rule, account typepackages/z-agent/srv/src/onboarding-copy.ts (BRAND_INTRO, BRAND_SITE_ASK, savesChatLinksAsOwn, accountTypeForOnboardingFlow)
Chat turn and claimpackages/z-agent/srv/src/onboarding.ts (applyOnboardingChatTurn, finalizeOnboardingRoom)
Contact on the account memorypackages/z-agent/srv/src/onboarding-persist-state.ts
Logo wordingpackages/offers/client/src/app/components/onboarding/copy.ts (PHOTO_ASK_BRAND)
Routeapps/zooly-app/app/(pages)/onboarding/brand/page.tsx

Testing

  • Unit tests: onboarding-questions.test.ts, onboarding-instructions.test.ts, onboarding-copy.test.ts and onboarding-persist.test.ts on the server.
  • Manual walkthrough: tests/manual/zly-2026-onboarding-three-flows.md, stage 2.