The /onboarding/brand interview, from the website to the brand dashboard
/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.
The questions are BRAND_LANDING_INTERVIEW_QUESTIONS in
packages/z-agent/srv/src/onboarding-questions.ts, asked one at a time in
this order.
| # | Area | What Z asks | Covered when |
|---|---|---|---|
| 1 | sources | "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 |
| 2 | contact | "And your full name, first and last? Not the brand, you, the person I'll be working with." | The person's full name |
| 3 | idealTalent | "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 |
| 4 | formats | "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 |
| 5 | budget | "Roughly what's your budget per deal?" | Under $1K, $1K to $10K, $10K to $100K, $100K+, or not sure yet |
onboardingOpeningLines).onboarding.ownerDisplayName. The first reply is never saved as a name.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.onboarding.coverage, not
host.scout.pricingAnchor. The exact budget is asked per campaign.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.brand
(setAccountType) before the dashboard opens.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.| Area | File |
|---|---|
| Questions | packages/z-agent/srv/src/onboarding-questions.ts (BRAND_LANDING_INTERVIEW_QUESTIONS) |
| Goal, persona instructions, Distil note, write rules | packages/z-agent/srv/src/onboarding-instructions.ts (LANDING_FLOWS.brand, restrictOnboardingUpdates) |
| Opening lines, link rule, account type | packages/z-agent/srv/src/onboarding-copy.ts (BRAND_INTRO, BRAND_SITE_ASK, savesChatLinksAsOwn, accountTypeForOnboardingFlow) |
| Chat turn and claim | packages/z-agent/srv/src/onboarding.ts (applyOnboardingChatTurn, finalizeOnboardingRoom) |
| Contact on the account memory | packages/z-agent/srv/src/onboarding-persist-state.ts |
| Logo wording | packages/offers/client/src/app/components/onboarding/copy.ts (PHOTO_ASK_BRAND) |
| Route | apps/zooly-app/app/(pages)/onboarding/brand/page.tsx |
onboarding-questions.test.ts, onboarding-instructions.test.ts,
onboarding-copy.test.ts and onboarding-persist.test.ts on the server.tests/manual/zly-2026-onboarding-three-flows.md,
stage 2.