Files
zeekay 4fd349aa06 beta: the portal says less, and opting in and sharing are one press
Prose that carried no decision or fact is gone: the hero, the questions, the
gate and every step are a heading and at most a line. What scores is said once
(the leaderboard step), and every claim the cloud does not keep is out.

Step 1 is one share card (the member's link, Copy, the device's share sheet on
phones, seven channels as icons, Customize behind a text button) and a quiet
invite-by-email card. Step 3 is one searched, grouped list with one control a
row: On when `opens` says so, Get access when it does not, Requested at once
after the press. Stars and follows moved under the leaderboard as Earn more.

The 1,800-line dashboard is a shell over share, rank, betas and alpha; what
they read is one hook (standing.ts); the questions are data (program.ts).
Dead access, card, hint and referral components are deleted. Every press is
44px, every input too, and a gate walks each screen at 390px.

scripts/brands and scripts/prebuild are TypeScript now; the three marks the
share row draws ship in a JSON only /beta loads. /beta's title and card say
what the page says.

Claude-Session: https://claude.ai/code/session_017vrVus6PPBgP5YRzKV1iqW
2026-10-26 03:29:13 -07:00

180 lines
5.3 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { phrase } from '@hanzo/i18n'
/** The beta's tracks: beta tester, research access, design partner. */
export type Program = 'beta' | 'research' | 'partner'
/** A question in the beta questionnaire. */
export interface Ask {
id: string
q: string
kind: 'line' | 'long' | 'one' | 'many'
options?: readonly string[]
to?: 'company' | 'role' | 'size'
}
const SPEND = ['$0–$20', '$21–$100', '$101–$200', '$201–$1,000', '$1,001+'] as const
/** The programs, and what each one asks. */
export const PROGRAMS: Record<Program, { name: string; gets: string; asks: readonly Ask[] }> = {
beta: {
name: phrase('Beta tester'),
gets: phrase('New releases before they ship.'),
asks: [
{
id: 'builds',
q: phrase('What do you build?'),
kind: 'many',
options: [
phrase('Web apps'),
phrase('Backends and infrastructure'),
phrase('AI agents'),
phrase('Data and ML'),
phrase('Mobile apps'),
phrase('Games and creative work'),
phrase('Something else'),
],
},
{
id: 'first',
q: phrase('What do you want to try first?'),
kind: 'many',
options: [
phrase('Dev, our coding agent'),
phrase('Studio, for images, video and sound'),
phrase('Enso, the router'),
phrase('Kai, decisions'),
phrase('Zen models'),
'Hanzo Cloud',
],
},
{
id: 'agents',
q: phrase('Which coding agents do you use today?'),
kind: 'many',
options: ['Claude Code', 'Cursor', 'Codex', 'Hanzo Dev', 'GitHub Copilot', phrase('None yet'), phrase('Another')],
},
{
id: 'cadence',
q: phrase('How often do you use AI?'),
kind: 'one',
options: [phrase('Every day'), phrase('Several times a week'), phrase('Once a week'), phrase('Just getting started')],
},
{
id: 'spend',
q: phrase('What do you spend on AI tools a month?'),
kind: 'one',
options: SPEND,
},
{
id: 'blurb',
q: phrase('Tell us about what you’re working on and why you want to use Hanzo'),
kind: 'long',
},
],
},
research: {
name: phrase('Research access'),
gets: phrase('Research models and checkpoints to evaluate before release.'),
asks: [
{
id: 'want',
q: phrase('Which research do you want to evaluate?'),
kind: 'many',
options: [
phrase('Kai multimodal decisions'),
phrase('The next Zen'),
phrase('Enso routing policies'),
phrase('Creative models: video, image, 3D, sound'),
phrase('Something else'),
],
},
{
id: 'where',
q: phrase('Where would you run it?'),
kind: 'one',
options: [phrase('Hanzo Cloud, by API'), phrase('Your own cloud'), phrase('On premises or air-gapped'), phrase('Not sure yet')],
},
{
id: 'who',
q: phrase('Who are you evaluating for?'),
kind: 'one',
options: [phrase('A company'), phrase('A university or lab'), phrase('Myself')],
},
{
id: 'publish',
q: phrase('Will you publish what you find?'),
kind: 'one',
options: [phrase('Yes, publicly'), phrase('Inside my organization'), phrase('Not sure')],
},
{
id: 'task',
q: phrase('What will you evaluate it on?'),
kind: 'long',
},
{
id: 'blurb',
q: phrase('Tell us about your research goals and why you want model access'),
kind: 'long',
},
{
id: 'links',
q: phrase('Anything we should read?'),
kind: 'line',
},
],
},
partner: {
name: phrase('Design partner'),
gets: phrase('Build it with the team. Chosen from applications.'),
asks: [
{
id: 'building',
q: phrase('What are you building with Hanzo?'),
kind: 'line',
},
{
id: 'size',
q: phrase('How big is your team?'),
kind: 'one',
options: ['1-49', '50-249', '250-999', '1000-4999', '5000+'],
to: 'size',
},
{
id: 'when',
q: phrase('When do you want it in production?'),
kind: 'one',
options: [phrase('This month'), phrase('This quarter'), phrase('This year'), phrase('Still exploring')],
},
{
id: 'budget',
q: phrase('What is your monthly AI and compute budget?'),
kind: 'one',
options: SPEND,
},
{
id: 'need',
q: phrase('What do you need from us?'),
kind: 'many',
options: [
phrase('A say in the roadmap'),
phrase('Custom or fine-tuned models'),
phrase('A private deployment'),
phrase('Dedicated engineering support'),
phrase('Launching together'),
],
},
{
id: 'blurb',
q: phrase('Tell us about what you’re working on and how we can collaborate'),
kind: 'long',
},
],
},
}
/** Professional context questions. */
export const ABOUT: readonly Ask[] = [
{ id: 'company', q: phrase('Where do you work?'), kind: 'line', to: 'company' },
{ id: 'role', q: phrase('What is your role?'), kind: 'line', to: 'role' },
]