mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-30 14:58:08 +00:00
/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]>
15 lines
505 B
TypeScript
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
|
|
}
|