Files
zooqueenandHanzo Dev 6ab1a6e06d A new account answers one question and buys on pay's plans; a returning one is asked nothing
/onboarding reads the account from IAM and decides once:

- an account made more than an hour ago, one that answered here before,
  one its organization pays for, a SuperAdmin and a support session go
  straight on to where the sign-in was headed;
- a new account with no terms on record agrees to them first;
- a checkout chosen before signing in opens as it was asked for, a team
  plan included, billed to the organization worked in;
- an offer link (?coupon=) opens pay's plans with its code and campaign;
- Free chosen on /pricing goes into the app;
- otherwise one question, Personal or Business, each opening
  hanzo.ai/pay/cart for the organization worked in and coming back to
  the app, and Continue with Free into the app. The answer is kept on
  the IAM user (onboarding in /v1/iam/preferences).

The landing's plan cards, the team-naming and seats steps, and the
coupon quote on the picker are gone: the plans are pay's.

/login and /signup are drawn as pay's checkout for every visitor: no
eyebrow, no line of marketing, no demo and no ruled field behind them,
a 32px title (26px on a phone), 56px controls, pay's field, and a sample
placeholder at 40% ink against the value's full ink. The terms page is
one component on /onboarding and in the sign-in panel. Every sign-in
passes /onboarding, so Free chosen on /pricing no longer skips the terms
a new account owes, and an offer link's utm tags ride the sign-up.

Co-authored-by: Hanzo Dev <[email protected]>
2026-10-16 01:23:26 -07:00

15 lines
505 B
TypeScript

import type { Metadata } from 'next'
import { pageMeta } from '@/lib/page-meta'
// A 'use client' page exports no metadata; this names the tab. Whether the page
// is indexed is decided by lib/publish, which lists /onboarding as private.
export const metadata: Metadata = pageMeta({
title: 'Welcome to Hanzo',
description: 'Set up your Hanzo account and start using Hanzo.',
path: '/onboarding',
})
export default function Layout({ children }: { children: React.ReactNode }) {
return children
}