mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-30 14:58:08 +00:00
1297 lines
54 KiB
TypeScript
1297 lines
54 KiB
TypeScript
'use client'
|
||
|
||
/**
|
||
* /founder — Hanzo Founding Contributor & Open Source Builder Program.
|
||
*
|
||
* Game loop:
|
||
* 1. Pick an issue or fork any of Hanzo's open source repos.
|
||
* 2. Merge a PR (bug fix, feature, kernel, MCP server, benchmark, or doc).
|
||
* 3. Every merge earns points on the Hanzo leaderboard (hanzo.ai/bounty); Level 2 adds swag.
|
||
* 4. Instant access to private Founders Slack (#founders with Zach Kelling & Antje Worring).
|
||
* 5. Verified Founder Badge on public hanzo.id profile with 1-click social sharing.
|
||
*
|
||
* Designed to 100% match the look and feel, spacing, typography, and controls
|
||
* of the core hanzo.ai pages:
|
||
* - Atmospheric dot cloud canvases (Opening, Dither)
|
||
* - Classic macOS-style draggable terminal windows (Win, Reading)
|
||
* - Canonical marketing typography (Display, Title, Lede)
|
||
* - Canonical pill badges (Label, Chip, Mark)
|
||
* - Canonical controls (Action fill, Action, More)
|
||
* - Consistent section rhythms (py={56} $md={{ py: 80 }}, maxW={1240}, gap={40})
|
||
* - Semantic design tokens ($panel, var(--border), var(--foreground), var(--muted-foreground))
|
||
*/
|
||
|
||
import React, { useEffect, useState } from 'react'
|
||
import {
|
||
Check,
|
||
Copy as CopyIcon,
|
||
ShieldCheck,
|
||
Share2,
|
||
CheckCircle2,
|
||
Code,
|
||
ArrowRight,
|
||
LifeBuoy,
|
||
Users,
|
||
Percent,
|
||
GitPullRequest,
|
||
GitMerge,
|
||
} from 'lucide-react'
|
||
import { Input, Text, View, XStack, YStack } from '@hanzo/ui'
|
||
import { HanzoMark } from '@hanzogui/shell'
|
||
import { Github } from '@/components/brand'
|
||
import { useIam } from '@hanzo/iam/react'
|
||
import { paid, useTier } from '@hanzo/app/lib/tier'
|
||
import { Action, Display, Faq, Lede, More } from '@hanzo/ui/marketing'
|
||
import { Opening, Reading, Section, Win } from '@/components/home/chrome'
|
||
import { Label } from '@/components/home/label'
|
||
import { Mark } from '@/components/pricing/kit'
|
||
import { REPO_FLOOR } from '@/lib/counts'
|
||
import listed from '@/lib/data/bounties.json'
|
||
import { SNAPSHOT, disclosed } from '@/lib/hanzo/rewards'
|
||
|
||
const CRM_API = 'https://api.hanzo.ai/v1/marketing/leads'
|
||
const GITHUB_HANZO_URL = 'https://github.com/hanzoai'
|
||
const FOUNDER_COUPON = '50OFFfounder'
|
||
const FOUNDER_OFFER_URL = `/pricing?coupon=${FOUNDER_COUPON}`
|
||
|
||
const TIERS = [
|
||
{
|
||
level: 'Level 1',
|
||
name: 'Founding Contributor',
|
||
badge: 'Level 1',
|
||
requirement: '1 Merged Pull Request',
|
||
requirementDetail: 'Approved & merged by Hanzo maintainers into main',
|
||
rewardTitle: 'Points + Slack',
|
||
rewardSub: 'Leaderboard points for every merge',
|
||
details: 'What each merge earns is on hanzo.ai/bounty',
|
||
perks: [
|
||
'Points on the Hanzo leaderboard for every merged pull request',
|
||
'Invite to private #founders Slack channel (direct line to Zach & Antje)',
|
||
'Verified "Founding Contributor" badge on your public hanzo.id profile',
|
||
'Name immortalized on the Hanzo Open Source Contributor Wall',
|
||
'Early alpha access to new model weights & SDKs before public drops',
|
||
],
|
||
popular: false,
|
||
cta: 'Claim Level 1 Reward',
|
||
},
|
||
{
|
||
level: 'Level 2',
|
||
name: 'Founding Builder',
|
||
badge: 'Level 2',
|
||
requirement: '3+ Merged PRs or 1,000+ LoC',
|
||
requirementDetail: '3 approved merged PRs or 1,000+ lines merged into production',
|
||
rewardTitle: 'Points + Swag',
|
||
rewardSub: 'Leaderboard points + Founder Swag',
|
||
details: 'Includes limited-edition heavyweight hoodie shipped worldwide',
|
||
perks: [
|
||
'Limited Edition Hanzo Founder Heavyweight Hoodie & holographic stickers',
|
||
'Feature spotlight in the Hanzo Developer Dispatch newsletter (4.0M+ audience)',
|
||
'All Level 1 perks included',
|
||
],
|
||
popular: true,
|
||
cta: 'Level Up to Builder',
|
||
},
|
||
] as const
|
||
|
||
const FAQS = [
|
||
{
|
||
q: 'What is the Hanzo Founder Program?',
|
||
a: `The Hanzo Founder Program is an open-source builder initiative. By contributing bug fixes, features, or integrations into Hanzo’s ${REPO_FLOOR}+ open repositories, developers earn points on the Hanzo leaderboard, entry into our private #founders Slack channel with CEO Antje Worring and CTO Zach Kelling, and verified profile credentials.`,
|
||
},
|
||
{
|
||
q: 'What are the reward tiers?',
|
||
a: 'We have strictly two levels: Level 1 (Founding Contributor) is your first merged PR. Level 2 (Founding Builder) adds our custom heavyweight founder hoodie and holographic stickers for merging 3+ PRs or contributing 1,000+ lines of code. There is no Level 3. Every merge also earns points on the Hanzo leaderboard; hanzo.ai/bounty lists what each earns.',
|
||
},
|
||
{
|
||
q: 'How do I access the private #founders Slack?',
|
||
a: 'Once your PR merges, submit your PR URL and email in the Claim form on this page. Our team verifies the merge and emails you an instant invite link to the private #founders channel within 24 hours.',
|
||
},
|
||
{
|
||
q: 'Which repositories qualify?',
|
||
a: 'Any public repository in the Hanzo ecosystem qualifies, including hanzoai/engine, hanzoai/flow, hanzoai/cli, hanzoai/base, hanzoai/cloud, and hanzo-apps/*. PRs must be meaningful contributions (bug fixes, feature additions, benchmark suites, MCP tooling, or substantial docs).',
|
||
},
|
||
{
|
||
q: 'How do I claim the Hanzo Founder Hoodie?',
|
||
a: 'Builders who reach Level 2 (3+ merged PRs or 1,000+ lines of code) receive a swag voucher code via email to claim our custom heavyweight hoodie and sticker pack, shipped anywhere in the world free of charge.',
|
||
},
|
||
{
|
||
q: 'How does the 50% founder discount work?',
|
||
a: 'Founders receive 50% off their first 3 monthly billing cycles across all Pro and Max plans using code 50OFFfounder. Clicking "Sign In & Claim 50% Off" signs you in and opens the founder plan picker with the discount automatically applied.',
|
||
},
|
||
{
|
||
q: 'Where can I find Hanzo repos to contribute to?',
|
||
a: `All ${REPO_FLOOR}+ public repositories are hosted under https://github.com/hanzoai. Key repos include hanzoai/engine (inference runtime), hanzoai/flow (agent graphs), hanzoai/cli (MCP tooling & terminal dev), hanzo-apps/console (CRM & cloud apps), and hanzoai/base (data primitives).`,
|
||
},
|
||
{
|
||
q: 'Who do I contact with questions about the Founder Program?',
|
||
a: 'You can email CEO Antje Worring and CTO Zach Kelling directly at [email protected]. For general engineering support, email [email protected]. You can also explore our complete company contact directory at hanzo.ai/contact.',
|
||
},
|
||
] as const
|
||
|
||
/** Single command copy block matching Start.tsx */
|
||
function QuickCommand({ label, command }: { label: string; command: string }) {
|
||
const [copied, setCopied] = useState(false)
|
||
return (
|
||
<YStack gap={8} width="100%">
|
||
<XStack items="center" justify="space-between" gap={12}>
|
||
<Text fontSize="$2" lineHeight="$2" fontWeight="500" color="var(--foreground)">
|
||
{label}
|
||
</Text>
|
||
<XStack
|
||
render={
|
||
<button
|
||
type="button"
|
||
aria-label={copied ? 'Copied' : `Copy: ${label}`}
|
||
onClick={async () => {
|
||
try {
|
||
await navigator.clipboard.writeText(command)
|
||
setCopied(true)
|
||
setTimeout(() => setCopied(false), 2000)
|
||
} catch {
|
||
setCopied(false)
|
||
}
|
||
}}
|
||
/>
|
||
}
|
||
items="center"
|
||
gap={6}
|
||
px={10}
|
||
py={4}
|
||
rounded={9999}
|
||
bg="transparent"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
cursor="pointer"
|
||
hoverStyle={{ bg: 'var(--secondary)', borderColor: 'var(--border-strong)' }}
|
||
$platform-web={{ borderRadius: '9999px', borderStyle: 'solid' }}
|
||
>
|
||
{copied ? <Check size={14} strokeWidth={2} color="var(--state-success)" /> : <CopyIcon size={14} strokeWidth={1.5} color="var(--muted-foreground)" />}
|
||
<Text fontSize="$1" fontWeight="500" color={copied ? 'var(--state-success)' : 'var(--muted-foreground)'}>
|
||
{copied ? 'Copied' : 'Copy'}
|
||
</Text>
|
||
</XStack>
|
||
</XStack>
|
||
<View
|
||
render="pre"
|
||
m={0}
|
||
px={14}
|
||
py={12}
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
rounded={14}
|
||
bg="var(--surface-card-quiet, var(--card))"
|
||
$platform-web={{ overflowX: 'auto', whiteSpace: 'pre' }}
|
||
>
|
||
<Text render="code" display="block" fontFamily="$mono" fontSize="$2" lineHeight="1.4rem" color="var(--foreground)">
|
||
<Text render="span" aria-hidden color="var(--muted-foreground)" $platform-web={{ userSelect: 'none' }}>
|
||
${' '}
|
||
</Text>
|
||
{command}
|
||
</Text>
|
||
</View>
|
||
</YStack>
|
||
)
|
||
}
|
||
|
||
export default function FounderPage() {
|
||
const { user, isAuthenticated } = useIam()
|
||
const held = useTier(isAuthenticated).tier
|
||
const isPaid = paid(held)
|
||
|
||
// If someone is already paying, don't bring them to the plan page.
|
||
// Instead, direct them to claim their Slack invite and founder swag (#claim).
|
||
const founderFlowUrl = isPaid
|
||
? '#claim'
|
||
: isAuthenticated
|
||
? FOUNDER_OFFER_URL
|
||
: `/signup?next=${encodeURIComponent(FOUNDER_OFFER_URL)}`
|
||
|
||
// Form State
|
||
const [name, setName] = useState('')
|
||
const [email, setEmail] = useState('')
|
||
const [github, setGithub] = useState('')
|
||
const [prUrl, setPrUrl] = useState('')
|
||
const [summary, setSummary] = useState('')
|
||
const [consent, setConsent] = useState(true)
|
||
const [status, setStatus] = useState<'idle' | 'submitting' | 'success' | 'error'>('idle')
|
||
const [badgeCopied, setBadgeCopied] = useState(false)
|
||
|
||
// Auto pre-fill authenticated user's email and display name if available
|
||
useEffect(() => {
|
||
if (user?.email && !email) setEmail(user.email)
|
||
const displayName = user?.displayName || user?.name
|
||
if (displayName && !name) setName(displayName)
|
||
}, [user])
|
||
|
||
const shareText = `I just joined the @hanzoai Founder Program. Merging open-source code into their AI stack earns points on the Hanzo leaderboard and private Slack access with core founders. Check out the bounties: https://hanzo.ai/founder ${disclosed(SNAPSHOT)}`
|
||
const badgeMarkdown = `[](https://hanzo.ai/founder)`
|
||
|
||
const handleSubmit = async (e: React.FormEvent) => {
|
||
e.preventDefault()
|
||
if (!email || !github || !consent) return
|
||
setStatus('submitting')
|
||
try {
|
||
const res = await fetch(CRM_API, {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({
|
||
email,
|
||
name: name || github,
|
||
consent: true,
|
||
program: 'founder',
|
||
stage: prUrl ? 'claimed' : 'applicant',
|
||
source: 'hanzo.ai/founder',
|
||
need: `GitHub: @${github.replace(/^@/, '')} | PR: ${prUrl || 'Applicant'} | Summary: ${summary || 'Joined Founder Program'}`,
|
||
}),
|
||
})
|
||
if (res.ok) {
|
||
setStatus('success')
|
||
} else {
|
||
setStatus('error')
|
||
}
|
||
} catch {
|
||
setStatus('error')
|
||
}
|
||
}
|
||
|
||
return (
|
||
<View width="100%" $platform-web={{ color: 'var(--foreground)', overflowX: 'clip' }}>
|
||
{/* ── 1. HERO SECTION ─────────────────────────────────────────────────── */}
|
||
<View
|
||
render="section"
|
||
data-slot="hero"
|
||
aria-labelledby="founder-hero-title"
|
||
position="relative"
|
||
width="100%"
|
||
overflow="hidden"
|
||
$platform-web={{ overflowX: 'clip' }}
|
||
>
|
||
<Opening />
|
||
|
||
<XStack
|
||
position="relative"
|
||
width="100%"
|
||
maxW={1320}
|
||
mx="auto"
|
||
px="var(--page-gutter)"
|
||
pt="max(48px, min(8vh, 88px))"
|
||
pb="max(48px, min(8vh, 80px))"
|
||
gap="max(32px, min(5vw, 64px))"
|
||
items="center"
|
||
$max-lg={{ flexDirection: 'column', items: 'stretch' }}
|
||
>
|
||
{/* Left Column: Headline, Lede, Quick Command, Action Buttons */}
|
||
<YStack flex={6} minW={0} gap="$4" items="center" $max-lg={{ flexBasis: 'auto' }}>
|
||
<Label center href={GITHUB_HANZO_URL}>
|
||
HANZO.FOUNDER
|
||
</Label>
|
||
|
||
<Display id="founder-hero-title" data-fit="" width="100%" text="center" mt={4}>
|
||
<span>Build in the open.</span>{' '}
|
||
<Text render="span" color="var(--muted-foreground)">
|
||
Earn points and swag.
|
||
</Text>
|
||
</Display>
|
||
|
||
<Lede text="center" mb={6} $platform-web={{ textWrap: 'balance', lineHeight: '1.45' }}>
|
||
Merge pull requests into Hanzo’s {REPO_FLOOR}+ open-source repositories. Every merge earns{' '}
|
||
<strong>points on the Hanzo leaderboard</strong>, Level 2 adds <strong>Founder Swag</strong>, plus instant access to <strong>50% off your first 3 months</strong> on Pro and Max plans with code <Text render="code" fontFamily="$mono">{FOUNDER_COUPON}</Text> and entry to our private <strong>#founders Slack</strong>.
|
||
</Lede>
|
||
|
||
{/* Quick Command Block */}
|
||
<View width="100%" maxW={540} mx="auto" my={4}>
|
||
<QuickCommand
|
||
label="Clone & explore core engine"
|
||
command="git clone https://github.com/hanzoai/engine && cd engine"
|
||
/>
|
||
</View>
|
||
|
||
{/* Actions matching canonical Action components */}
|
||
<XStack gap={12} items="center" justify="center" flexWrap="wrap" mt={6}>
|
||
<Action
|
||
fill
|
||
render="a"
|
||
href={founderFlowUrl}
|
||
$platform-web={{ textDecoration: 'none', minWidth: 160, textAlign: 'center', justifyContent: 'center' }}
|
||
>
|
||
<XStack items="center" justify="center" gap={8}>
|
||
<span>{isPaid ? 'Claim Slack & Swag' : 'Sign In & Claim 50% Off'}</span>
|
||
<ArrowRight size={16} />
|
||
</XStack>
|
||
</Action>
|
||
|
||
<Action
|
||
render="a"
|
||
href="#bounties"
|
||
$platform-web={{ textDecoration: 'none', minWidth: 160, textAlign: 'center', justifyContent: 'center' }}
|
||
>
|
||
Explore Bounties ↓
|
||
</Action>
|
||
|
||
<Action
|
||
render="a"
|
||
href="#claim"
|
||
$platform-web={{ textDecoration: 'none', minWidth: 140, textAlign: 'center', justifyContent: 'center' }}
|
||
>
|
||
Claim Merged PR
|
||
</Action>
|
||
</XStack>
|
||
|
||
<XStack items="center" gap={8} mt={2}>
|
||
<Github size={15} color="var(--muted-foreground)" />
|
||
<More href={GITHUB_HANZO_URL} target="_blank" rel="noopener noreferrer">
|
||
Explore Hanzo on GitHub ({REPO_FLOOR}+ Repos) ↗
|
||
</More>
|
||
</XStack>
|
||
</YStack>
|
||
|
||
{/* Right Column: macOS Draggable Window */}
|
||
<YStack flex={5} minW={0} position="relative" $max-lg={{ flexBasis: 'auto' }}>
|
||
<Win title="Hanzo.Founder" icon={<HanzoMark size={14} />} slot="founder" open>
|
||
<YStack p={16} gap={16}>
|
||
<XStack
|
||
items="center"
|
||
justify="space-between"
|
||
p={10}
|
||
rounded={10}
|
||
bg="var(--secondary)"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
>
|
||
<XStack items="center" gap={8}>
|
||
<View width={8} height={8} rounded={9999} bg="var(--state-success)" $platform-web={{ borderRadius: '9999px' }} />
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--foreground)" textTransform="uppercase">
|
||
Ecosystem live
|
||
</Text>
|
||
</XStack>
|
||
<XStack
|
||
render={<a href={GITHUB_HANZO_URL} target="_blank" rel="noopener noreferrer" />}
|
||
items="center"
|
||
gap={4}
|
||
$platform-web={{ textDecoration: 'none' }}
|
||
>
|
||
<Github size={13} color="var(--muted-foreground)" />
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)">
|
||
{REPO_FLOOR}+ Repositories ↗
|
||
</Text>
|
||
</XStack>
|
||
</XStack>
|
||
|
||
<YStack gap={2} px={4}>
|
||
<Reading label="Leadership" strong>
|
||
Antje Worring · Zach Kelling
|
||
</Reading>
|
||
<Reading label="Private Slack" strong>
|
||
#founders (Direct line)
|
||
</Reading>
|
||
<Reading label="Founder Offer" strong>
|
||
50% Off First 3 Months
|
||
</Reading>
|
||
<Reading label="Coupon Code" strong>
|
||
{FOUNDER_COUPON}
|
||
</Reading>
|
||
<Reading label="Account Status" strong>
|
||
{isPaid ? 'Active Subscriber' : isAuthenticated ? 'Signed In' : 'Guest'}
|
||
</Reading>
|
||
{isPaid ? null : (
|
||
<Reading label="Plan Picker">
|
||
{`/pricing?coupon=${FOUNDER_COUPON}`}
|
||
</Reading>
|
||
)}
|
||
<Reading label="Direct Email" strong>
|
||
founders@hanzo.ai
|
||
</Reading>
|
||
<Reading label="Directory">
|
||
hanzo.ai/contact
|
||
</Reading>
|
||
<Reading label="Level 1 Reward">
|
||
Leaderboard points · Slack
|
||
</Reading>
|
||
<Reading label="Level 2 Reward">
|
||
Leaderboard points · Swag
|
||
</Reading>
|
||
<Reading label="Level 3">
|
||
None (Strictly 2 Tiers)
|
||
</Reading>
|
||
<Reading label="GitHub Org">
|
||
github.com/hanzoai
|
||
</Reading>
|
||
</YStack>
|
||
|
||
<View p={12} rounded={12} borderWidth={1} borderColor="var(--border)" bg="var(--surface-card-quiet, var(--card))">
|
||
<XStack items="center" justify="space-between" mb={8}>
|
||
<XStack items="center" gap={6}>
|
||
<ShieldCheck size={16} color="var(--state-success)" />
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--foreground)">
|
||
Verified Profile Badge
|
||
</Text>
|
||
</XStack>
|
||
<XStack
|
||
render={
|
||
<button
|
||
type="button"
|
||
onClick={async () => {
|
||
try {
|
||
await navigator.clipboard.writeText(badgeMarkdown)
|
||
setBadgeCopied(true)
|
||
setTimeout(() => setBadgeCopied(false), 2000)
|
||
} catch {
|
||
setBadgeCopied(false)
|
||
}
|
||
}}
|
||
/>
|
||
}
|
||
items="center"
|
||
gap={4}
|
||
px={8}
|
||
py={3}
|
||
rounded={9999}
|
||
bg="transparent"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
cursor="pointer"
|
||
hoverStyle={{ bg: 'var(--secondary)' }}
|
||
$platform-web={{ borderRadius: '9999px', borderStyle: 'solid' }}
|
||
>
|
||
{badgeCopied ? <Check size={12} color="var(--state-success)" /> : <CopyIcon size={12} color="var(--muted-foreground)" />}
|
||
<Text fontSize="$1" color={badgeCopied ? 'var(--state-success)' : 'var(--muted-foreground)'}>
|
||
{badgeCopied ? 'Copied' : 'Copy'}
|
||
</Text>
|
||
</XStack>
|
||
</XStack>
|
||
|
||
<View
|
||
p={8}
|
||
rounded={8}
|
||
bg="var(--secondary)"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
$platform-web={{ overflowX: 'auto' }}
|
||
>
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)">
|
||
{badgeMarkdown}
|
||
</Text>
|
||
</View>
|
||
</View>
|
||
</YStack>
|
||
</Win>
|
||
</YStack>
|
||
</XStack>
|
||
</View>
|
||
|
||
{/* ── 2. METRICS STRIP ────────────────────────────────────────────────── */}
|
||
<View
|
||
width="100%"
|
||
borderTopWidth={1}
|
||
borderBottomWidth={1}
|
||
borderColor="var(--border)"
|
||
bg="$panel"
|
||
py={28}
|
||
>
|
||
<XStack
|
||
width="100%"
|
||
maxW={1240}
|
||
mx="auto"
|
||
px="var(--page-gutter)"
|
||
justify="space-between"
|
||
flexWrap="wrap"
|
||
gap={24}
|
||
>
|
||
<YStack minW={160} gap={4}>
|
||
<Text fontSize="$6" fontWeight="700" color="var(--foreground)">
|
||
{REPO_FLOOR}+
|
||
</Text>
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)">
|
||
Open Repositories
|
||
</Text>
|
||
</YStack>
|
||
|
||
<YStack minW={160} gap={4}>
|
||
<Text fontSize="$6" fontWeight="700" color="var(--foreground)">
|
||
Points
|
||
</Text>
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)">
|
||
For every merge
|
||
</Text>
|
||
</YStack>
|
||
|
||
<YStack minW={160} gap={4}>
|
||
<Text fontSize="$6" fontWeight="700" color="var(--foreground)">
|
||
#founders
|
||
</Text>
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)">
|
||
Private Founder Slack
|
||
</Text>
|
||
</YStack>
|
||
|
||
</XStack>
|
||
</View>
|
||
|
||
{/* ── 2.5 EXCLUSIVE FOUNDER 50% OFF OFFER ─────────────────────────────── */}
|
||
<View width="100%" maxW={1240} mx="auto" px="var(--page-gutter)" py={28}>
|
||
<YStack
|
||
p="$6"
|
||
rounded={24}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border-strong)"
|
||
boxShadow="0 24px 60px -28px color-mix(in srgb, var(--pure-black) 45%, transparent)"
|
||
gap={16}
|
||
$platform-web={{ borderRadius: '24px' }}
|
||
>
|
||
<XStack items="center" justify="space-between" flexWrap="wrap" gap={12}>
|
||
<XStack items="center" gap={8}>
|
||
<Percent size={20} color="var(--state-success)" />
|
||
<Text fontFamily="$mono" fontSize="$2" fontWeight="600" color="var(--state-success)">
|
||
{isPaid ? 'ACTIVE SUBSCRIBER' : 'EXCLUSIVE FOUNDER OFFER · 50% OFF 3 MONTHS'}
|
||
</Text>
|
||
</XStack>
|
||
{isPaid ? null : <Mark>{`Code: ${FOUNDER_COUPON}`}</Mark>}
|
||
</XStack>
|
||
|
||
<Text fontSize="$5" fontWeight="700" color="var(--foreground)">
|
||
{isPaid
|
||
? 'Already a Hanzo Subscriber? Claim Your Slack Invite'
|
||
: '50% Off Your First 3 Months on Pro & Max Plans'}
|
||
</Text>
|
||
|
||
<Text fontSize="$3" lineHeight={26} color="var(--muted-foreground)" maxW={920}>
|
||
{isPaid
|
||
? 'As an active subscriber, you never need to purchase another plan. Any merged pull request earns points on the Hanzo leaderboard and access to the private #founders Slack channel.'
|
||
: 'As an open-source founder building the Hanzo ecosystem, claim 50% off your first three monthly billing cycles on Pro and Max plans. Sign in to enter the verified founder plan picker with the discount pre-applied.'}
|
||
</Text>
|
||
|
||
<XStack items="center" gap={16} flexWrap="wrap" mt={4}>
|
||
<Action
|
||
fill
|
||
render="a"
|
||
href={founderFlowUrl}
|
||
$platform-web={{ textDecoration: 'none' }}
|
||
>
|
||
{isPaid ? 'Claim Slack & Swag →' : 'Sign In to Plan Picker →'}
|
||
</Action>
|
||
|
||
<More href={GITHUB_HANZO_URL} target="_blank" rel="noopener noreferrer">
|
||
View Hanzo Repositories on GitHub ↗
|
||
</More>
|
||
</XStack>
|
||
</YStack>
|
||
</View>
|
||
|
||
{/* ── 3. TWO REWARD TIERS (LEVEL 1 & LEVEL 2 ONLY) ────────────────────── */}
|
||
<Section
|
||
id="tiers"
|
||
label="Founder.Tiers"
|
||
title="Two Levels. Real Code."
|
||
lede="Merge code into our production stack. Rewards come only when a maintainer merges your pull request, and every merge into a public Hanzo repository earns points on the leaderboard."
|
||
dither
|
||
>
|
||
{/* High-visibility Callout: Pull Request Merge Required */}
|
||
<View
|
||
p={18}
|
||
rounded={18}
|
||
bg="var(--surface-card-quiet, var(--card))"
|
||
borderWidth={1}
|
||
borderColor="var(--border-strong)"
|
||
maxW={960}
|
||
mx="auto"
|
||
mb={24}
|
||
width="100%"
|
||
boxShadow="0 14px 36px -16px color-mix(in srgb, var(--pure-black) 35%, transparent)"
|
||
$platform-web={{ borderRadius: '18px' }}
|
||
>
|
||
<XStack items="center" justify="space-between" flexWrap="wrap" gap={12}>
|
||
<XStack items="center" gap={12} flex={1} minW={280}>
|
||
<View p={10} rounded={12} bg="var(--secondary)" shrink={0}>
|
||
<GitPullRequest size={22} color="var(--art-ember)" />
|
||
</View>
|
||
<YStack gap={3}>
|
||
<XStack items="center" gap={8} flexWrap="wrap">
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="700" color="var(--art-ember)" textTransform="uppercase">
|
||
Pull request merge required
|
||
</Text>
|
||
<Mark>Code Contribution Only</Mark>
|
||
</XStack>
|
||
<Text fontSize="$2" lineHeight={20} color="var(--foreground)">
|
||
Founder levels are <strong>earned strictly by merging real code</strong> into Hanzo’s {REPO_FLOOR}+ open repositories. Points, swag and Slack access come only <strong>after your pull request is approved and merged</strong>.
|
||
</Text>
|
||
</YStack>
|
||
</XStack>
|
||
<XStack gap={12} flexWrap="wrap">
|
||
<Action
|
||
render="a"
|
||
href="#bounties"
|
||
$platform-web={{ textDecoration: 'none', whiteSpace: 'nowrap' }}
|
||
>
|
||
Browse Open Bounties ↓
|
||
</Action>
|
||
<More href="/bounty">Points for every merge</More>
|
||
</XStack>
|
||
</XStack>
|
||
</View>
|
||
|
||
<View
|
||
display="grid"
|
||
width="100%"
|
||
maxW={960}
|
||
mx="auto"
|
||
gap={24}
|
||
gridTemplateColumns="minmax(0, 1fr)"
|
||
$md={{ gridTemplateColumns: 'repeat(2, minmax(0, 1fr))' }}
|
||
>
|
||
{TIERS.map((t) => (
|
||
<YStack
|
||
key={t.level}
|
||
rounded={24}
|
||
p="$6"
|
||
borderWidth={1}
|
||
borderColor={t.popular ? 'var(--border-strong)' : 'var(--border)'}
|
||
bg="$panel"
|
||
boxShadow="0 24px 60px -28px color-mix(in srgb, var(--pure-black) 45%, transparent)"
|
||
hoverStyle={{ borderColor: 'var(--border-strong)' }}
|
||
justify="space-between"
|
||
gap={24}
|
||
$platform-web={{ borderRadius: '24px', transition: 'border-color 0.15s ease' }}
|
||
>
|
||
<YStack gap={16}>
|
||
<XStack items="center" justify="space-between">
|
||
<Text fontFamily="$mono" fontSize="$2" fontWeight="600" color="var(--muted-foreground)">
|
||
{t.badge}
|
||
</Text>
|
||
{t.popular ? <Mark>Founding Elite</Mark> : null}
|
||
</XStack>
|
||
|
||
<YStack gap={8}>
|
||
<Text fontSize="$5" fontWeight="700" color="var(--foreground)">
|
||
{t.name}
|
||
</Text>
|
||
|
||
{/* High-visibility PR requirement callout */}
|
||
<XStack
|
||
items="center"
|
||
gap={10}
|
||
p={10}
|
||
rounded={12}
|
||
bg="var(--secondary)"
|
||
borderWidth={1}
|
||
borderColor="var(--border-strong)"
|
||
>
|
||
<GitMerge size={18} color="var(--state-success)" />
|
||
<YStack gap={2}>
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="700" color="var(--state-success)">
|
||
PR REQUIREMENT: {t.requirement.toUpperCase()}
|
||
</Text>
|
||
<Text fontSize="$1" color="var(--muted-foreground)" lineHeight={15}>
|
||
{t.requirementDetail}
|
||
</Text>
|
||
</YStack>
|
||
</XStack>
|
||
</YStack>
|
||
|
||
{/* Big Reward Display */}
|
||
<View p={16} rounded={16} bg="var(--secondary)" borderWidth={1} borderColor="var(--border)">
|
||
<XStack items="center" justify="space-between" mb={6}>
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="700" color="var(--art-ember)">
|
||
★ EARNED ONLY ON MERGE
|
||
</Text>
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)">
|
||
{t.level === 'Level 1' ? '1st Merged PR' : '3+ Merged PRs'}
|
||
</Text>
|
||
</XStack>
|
||
<Text fontSize="$6" fontWeight="800" color="var(--foreground)">
|
||
{t.rewardTitle}
|
||
</Text>
|
||
<Text fontSize="$2" fontWeight="600" color="var(--foreground)" mt={2}>
|
||
{t.rewardSub}
|
||
</Text>
|
||
<Text fontSize="$1" color="var(--muted-foreground)" mt={4}>
|
||
{t.details}
|
||
</Text>
|
||
</View>
|
||
|
||
{/* Perks List */}
|
||
<YStack gap={10} mt={8}>
|
||
{t.perks.map((p, i) => (
|
||
<XStack key={i} items="flex-start" gap={10}>
|
||
<View mt={2} shrink={0}>
|
||
<Check size={16} color="var(--state-success)" strokeWidth={2.2} />
|
||
</View>
|
||
<Text fontSize="$2" lineHeight={20} color="var(--foreground)">
|
||
{p}
|
||
</Text>
|
||
</XStack>
|
||
))}
|
||
</YStack>
|
||
</YStack>
|
||
|
||
<YStack gap={10} width="100%">
|
||
<XStack items="center" justify="center" gap={6}>
|
||
<ShieldCheck size={14} color="var(--state-success)" />
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--muted-foreground)" text="center">
|
||
Requires verified merged PR URL to claim
|
||
</Text>
|
||
</XStack>
|
||
|
||
<Action
|
||
fill={t.popular}
|
||
render="a"
|
||
href="#claim"
|
||
$platform-web={{ textDecoration: 'none', width: '100%', textAlign: 'center', justifyContent: 'center' }}
|
||
>
|
||
<XStack items="center" justify="center" gap={8}>
|
||
<GitMerge size={15} />
|
||
<span>
|
||
{`Claim ${t.level} (Merged PR Required)`}
|
||
</span>
|
||
</XStack>
|
||
</Action>
|
||
|
||
<More href="#bounties" self="center">
|
||
Haven't merged yet? Find an issue to work on ↓
|
||
</More>
|
||
</YStack>
|
||
</YStack>
|
||
))}
|
||
</View>
|
||
</Section>
|
||
|
||
{/* ── 4. THE 4-STEP LOOP ──────────────────────────────────────────────── */}
|
||
<Section
|
||
id="how-it-works"
|
||
label="How.It.Works"
|
||
title="From Clone to Merged in Four Steps."
|
||
lede="The fastest way to join our core engineering working group."
|
||
dither
|
||
>
|
||
<View
|
||
display="grid"
|
||
width="100%"
|
||
gap={16}
|
||
gridTemplateColumns="minmax(0, 1fr)"
|
||
$sm={{ gridTemplateColumns: 'repeat(2, minmax(0, 1fr))' }}
|
||
$lg={{ gridTemplateColumns: 'repeat(4, minmax(0, 1fr))' }}
|
||
>
|
||
{[
|
||
{
|
||
step: '01 / PICK',
|
||
title: 'Find an Issue or Propose',
|
||
desc: 'Select a GitHub issue on our bounty board, or open an RFC with an architectural improvement for any Hanzo repo.',
|
||
},
|
||
{
|
||
step: '02 / BUILD',
|
||
title: 'Fork, Code & Verify',
|
||
desc: 'Implement your solution with clean tests. Run hanzo dev or project harnesses locally to verify everything passes.',
|
||
},
|
||
{
|
||
step: '03 / MERGE',
|
||
title: 'Review & Pull Merge',
|
||
desc: 'Submit your PR. CEO Antje, CTO Zach, or repository maintainers review within 24-48 hours and merge to main.',
|
||
},
|
||
{
|
||
step: '04 / REWARD',
|
||
title: 'Earn Points & Slack',
|
||
desc: 'The merge earns points on the Hanzo leaderboard; claim your Slack invite and verified profile badge.',
|
||
},
|
||
].map((s) => (
|
||
<YStack
|
||
key={s.step}
|
||
p={20}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
boxShadow="0 20px 48px -24px color-mix(in srgb, var(--pure-black) 40%, transparent)"
|
||
hoverStyle={{ borderColor: 'var(--border-strong)' }}
|
||
gap={10}
|
||
$platform-web={{ borderRadius: '20px', transition: 'border-color 0.15s ease' }}
|
||
>
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--muted-foreground)">
|
||
{s.step}
|
||
</Text>
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)">
|
||
{s.title}
|
||
</Text>
|
||
<Text fontSize="$2" lineHeight={22} color="var(--muted-foreground)">
|
||
{s.desc}
|
||
</Text>
|
||
</YStack>
|
||
))}
|
||
</View>
|
||
</Section>
|
||
|
||
{/* ── 5. ACTIVE GITHUB BOUNTIES ───────────────────────────────────────── */}
|
||
<Section
|
||
id="bounties"
|
||
label="Open.Issues"
|
||
title="Pick an Issue. Ship Code."
|
||
lede="Open issues labelled bounty across Hanzo’s repositories. Fix a bug or implement a requested feature; the merge earns points on the leaderboard."
|
||
dither
|
||
>
|
||
{/* The open bounties GitHub lists (lib/data/bounties.json, written at build), never a list typed here. */}
|
||
{listed.issues.length ? (
|
||
<View
|
||
display="grid"
|
||
width="100%"
|
||
gap={16}
|
||
gridTemplateColumns="minmax(0, 1fr)"
|
||
$sm={{ gridTemplateColumns: 'repeat(2, minmax(0, 1fr))' }}
|
||
$lg={{ gridTemplateColumns: 'repeat(3, minmax(0, 1fr))' }}
|
||
>
|
||
{listed.issues.slice(0, 6).map((b) => (
|
||
<YStack
|
||
key={b.url}
|
||
p={20}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
hoverStyle={{ borderColor: 'var(--border-strong)' }}
|
||
justify="space-between"
|
||
gap={16}
|
||
$platform-web={{ borderRadius: '20px', transition: 'border-color 0.15s ease' }}
|
||
>
|
||
<YStack gap={10}>
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--foreground)">
|
||
{`${b.repo}#${b.number}`}
|
||
</Text>
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)" lineHeight={24}>
|
||
{b.title}
|
||
</Text>
|
||
<Text fontSize="$2" lineHeight={20} color="var(--muted-foreground)">
|
||
{b.labels.join(' · ')}
|
||
</Text>
|
||
</YStack>
|
||
<More href={b.url} target="_blank" rel="noopener noreferrer">
|
||
Open Issue ↗
|
||
</More>
|
||
</YStack>
|
||
))}
|
||
</View>
|
||
) : (
|
||
<Text fontSize="$3" lineHeight={24} color="var(--muted-foreground)" maxW={760}>
|
||
No open issue in Hanzo’s repositories is labelled bounty right now. Every open issue is fair game: a merged fix earns the same points.
|
||
</Text>
|
||
)}
|
||
|
||
<XStack items="center" gap={20} flexWrap="wrap">
|
||
<More href="/bounty">See every bounty and what each merge earns</More>
|
||
<XStack items="center" gap={6}>
|
||
<Github size={15} color="var(--muted-foreground)" />
|
||
<More href={GITHUB_HANZO_URL} target="_blank" rel="noopener noreferrer">
|
||
View all {REPO_FLOOR}+ repos on GitHub ↗
|
||
</More>
|
||
</XStack>
|
||
</XStack>
|
||
</Section>
|
||
|
||
{/* ── 7. CLAIM & APPLICATION WINDOW ───────────────────────────────────── */}
|
||
<Section
|
||
id="claim"
|
||
label="Founder.Claim"
|
||
title="Claim Your Slack Access & Swag"
|
||
lede="Submit your merged PR URL or apply to join our core open source working group. Maintainers review daily."
|
||
dither
|
||
>
|
||
<View width="100%" maxW={760} mx="auto">
|
||
<Win title="Founder.Application" icon={<HanzoMark size={14} />} slot="claim" open>
|
||
<YStack p={24} gap={20}>
|
||
{status === 'success' ? (
|
||
<YStack items="center" justify="center" p={32} gap={16}>
|
||
<CheckCircle2 size={48} color="var(--state-success)" />
|
||
<Text fontSize="$5" fontWeight="700" color="var(--foreground)" text="center">
|
||
Application & Claim Received!
|
||
</Text>
|
||
<Text fontSize="$2" color="var(--muted-foreground)" maxW={460} lineHeight={22} text="center">
|
||
Thank you for building Hanzo with us! Our maintainers are verifying your contribution and will send your private Slack invite to <strong>{email}</strong> within 24 hours.
|
||
</Text>
|
||
<Action
|
||
render="button"
|
||
type="button"
|
||
mt={12}
|
||
onClick={() => {
|
||
setStatus('idle')
|
||
setPrUrl('')
|
||
setSummary('')
|
||
}}
|
||
>
|
||
Submit Another PR
|
||
</Action>
|
||
</YStack>
|
||
) : (
|
||
<View
|
||
render={<form onSubmit={handleSubmit} />}
|
||
display="flex"
|
||
flexDirection="column"
|
||
gap={16}
|
||
>
|
||
<XStack gap={16} flexWrap="wrap">
|
||
<YStack flex={1} minW={240} gap={6}>
|
||
<Text fontSize="$2" fontWeight="500" color="var(--foreground)">
|
||
Full Name
|
||
</Text>
|
||
<Input
|
||
value={name}
|
||
onChangeText={setName}
|
||
placeholder="Ada Lovelace"
|
||
rounded={8}
|
||
bg="var(--secondary)"
|
||
borderColor="var(--border)"
|
||
$platform-web={{ borderRadius: '8px' }}
|
||
/>
|
||
</YStack>
|
||
|
||
<YStack flex={1} minW={240} gap={6}>
|
||
<Text fontSize="$2" fontWeight="500" color="var(--foreground)">
|
||
Email Address *
|
||
</Text>
|
||
<Input
|
||
value={email}
|
||
onChangeText={setEmail}
|
||
placeholder="[email protected]"
|
||
keyboardType="email-address"
|
||
required
|
||
rounded={8}
|
||
bg="var(--secondary)"
|
||
borderColor="var(--border)"
|
||
$platform-web={{ borderRadius: '8px' }}
|
||
/>
|
||
</YStack>
|
||
</XStack>
|
||
|
||
<XStack gap={16} flexWrap="wrap">
|
||
<YStack flex={1} minW={240} gap={6}>
|
||
<Text fontSize="$2" fontWeight="500" color="var(--foreground)">
|
||
GitHub Username *
|
||
</Text>
|
||
<Input
|
||
value={github}
|
||
onChangeText={setGithub}
|
||
placeholder="octocat"
|
||
required
|
||
rounded={8}
|
||
bg="var(--secondary)"
|
||
borderColor="var(--border)"
|
||
$platform-web={{ borderRadius: '8px' }}
|
||
/>
|
||
</YStack>
|
||
|
||
<YStack flex={1} minW={240} gap={6}>
|
||
<Text fontSize="$2" fontWeight="500" color="var(--foreground)">
|
||
Merged PR URL (or repository target)
|
||
</Text>
|
||
<Input
|
||
value={prUrl}
|
||
onChangeText={setPrUrl}
|
||
placeholder="https://github.com/hanzoai/engine/pull/123"
|
||
rounded={8}
|
||
bg="var(--secondary)"
|
||
borderColor="var(--border)"
|
||
$platform-web={{ borderRadius: '8px' }}
|
||
/>
|
||
</YStack>
|
||
</XStack>
|
||
|
||
<YStack gap={6}>
|
||
<Text fontSize="$2" fontWeight="500" color="var(--foreground)">
|
||
What did you build or what would you like to build?
|
||
</Text>
|
||
<Input
|
||
value={summary}
|
||
onChangeText={setSummary}
|
||
placeholder="Briefly describe your pull request, bug fix, or proposed feature..."
|
||
rounded={8}
|
||
bg="var(--secondary)"
|
||
borderColor="var(--border)"
|
||
$platform-web={{ borderRadius: '8px' }}
|
||
/>
|
||
</YStack>
|
||
|
||
{/* Affirmative Consent Checkbox */}
|
||
<XStack items="flex-start" gap={10} mt={6}>
|
||
<View
|
||
render={<input type="checkbox" id="founder-consent" checked={consent} onChange={(e) => setConsent(e.target.checked)} required />}
|
||
mt={3}
|
||
$platform-web={{ accentColor: "var(--foreground)", display: "inline-block" }}
|
||
/>
|
||
<Text
|
||
render={<label htmlFor="founder-consent" />}
|
||
fontSize="$2"
|
||
color="var(--muted-foreground)"
|
||
$platform-web={{ lineHeight: "18px" }}
|
||
>
|
||
I agree to receive communications regarding the Hanzo Founder Program, developer releases, and product updates. I can unsubscribe at any time.
|
||
</Text>
|
||
</XStack>
|
||
|
||
{status === 'error' ? (
|
||
<Text fontSize="$2" color="var(--state-error)">
|
||
Something went wrong submitting your claim. Please check your connection or email [email protected].
|
||
</Text>
|
||
) : null}
|
||
|
||
<Action
|
||
fill
|
||
render="button"
|
||
type="submit"
|
||
mt={10}
|
||
disabled={status === 'submitting' || !email || !github || !consent}
|
||
$platform-web={{ width: '100%', textAlign: 'center', justifyContent: 'center' }}
|
||
>
|
||
{status === 'submitting' ? 'Submitting...' : 'Submit Claim & Join Slack'}
|
||
</Action>
|
||
</View>
|
||
)}
|
||
</YStack>
|
||
</Win>
|
||
</View>
|
||
</Section>
|
||
|
||
{/* ── 8. BADGE & 1-CLICK SOCIAL SHARING ───────────────────────────────── */}
|
||
<Section
|
||
id="share"
|
||
label="Founder.Badge"
|
||
title="Showcase Your Contributor Badge."
|
||
lede="Add verified badges to your GitHub profile and share your contributions with the global developer network."
|
||
dither
|
||
>
|
||
<View
|
||
display="grid"
|
||
width="100%"
|
||
maxW={960}
|
||
mx="auto"
|
||
gap={24}
|
||
gridTemplateColumns="minmax(0, 1fr)"
|
||
$md={{ gridTemplateColumns: 'repeat(2, minmax(0, 1fr))' }}
|
||
>
|
||
{/* GitHub Markdown Card */}
|
||
<YStack
|
||
p={24}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
boxShadow="0 24px 60px -28px color-mix(in srgb, var(--pure-black) 45%, transparent)"
|
||
gap={16}
|
||
$platform-web={{ borderRadius: '20px' }}
|
||
>
|
||
<XStack items="center" gap={8}>
|
||
<Code size={18} color="var(--foreground)" />
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)">
|
||
GitHub Profile README Badge
|
||
</Text>
|
||
</XStack>
|
||
|
||
<Text fontSize="$2" color="var(--muted-foreground)" lineHeight={20}>
|
||
Embed this verified markdown shield on your GitHub profile to showcase your Founding Contributor status:
|
||
</Text>
|
||
|
||
<View p={12} rounded={10} bg="var(--secondary)" borderWidth={1} borderColor="var(--border)">
|
||
<Text fontFamily="$mono" fontSize="$1" color="var(--foreground)">
|
||
{badgeMarkdown}
|
||
</Text>
|
||
</View>
|
||
|
||
<Action
|
||
render="button"
|
||
type="button"
|
||
onClick={async () => {
|
||
try {
|
||
await navigator.clipboard.writeText(badgeMarkdown)
|
||
setBadgeCopied(true)
|
||
setTimeout(() => setBadgeCopied(false), 2000)
|
||
} catch {
|
||
setBadgeCopied(false)
|
||
}
|
||
}}
|
||
$platform-web={{ alignSelf: 'flex-start' }}
|
||
>
|
||
<XStack items="center" gap={6}>
|
||
{badgeCopied ? <Check size={14} color="var(--state-success)" /> : <CopyIcon size={14} />}
|
||
<span>{badgeCopied ? 'Badge Markdown Copied!' : 'Copy Markdown'}</span>
|
||
</XStack>
|
||
</Action>
|
||
</YStack>
|
||
|
||
{/* Social Share Card */}
|
||
<YStack
|
||
p={24}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
boxShadow="0 24px 60px -28px color-mix(in srgb, var(--pure-black) 45%, transparent)"
|
||
gap={16}
|
||
$platform-web={{ borderRadius: '20px' }}
|
||
>
|
||
<XStack items="center" gap={8}>
|
||
<Share2 size={18} color="var(--foreground)" />
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)">
|
||
Share on Twitter / X
|
||
</Text>
|
||
</XStack>
|
||
|
||
<Text fontSize="$2" color="var(--muted-foreground)" lineHeight={20}>
|
||
Tell the community you’re building open source with Hanzo and invite other developers to join the program:
|
||
</Text>
|
||
|
||
<View p={12} rounded={10} bg="var(--secondary)" borderWidth={1} borderColor="var(--border)">
|
||
<Text fontSize="$2" color="var(--muted-foreground)" lineHeight={20} fontStyle="italic">
|
||
"{shareText}"
|
||
</Text>
|
||
</View>
|
||
|
||
<Action
|
||
fill
|
||
render="a"
|
||
href={`https://twitter.com/intent/tweet?text=${encodeURIComponent(shareText)}`}
|
||
target="_blank"
|
||
rel="noopener noreferrer"
|
||
$platform-web={{ textDecoration: 'none', alignSelf: 'flex-start' }}
|
||
>
|
||
<XStack items="center" gap={6}>
|
||
<Share2 size={14} />
|
||
<span>Share Announcement on X</span>
|
||
</XStack>
|
||
</Action>
|
||
<Text fontSize="$2" color="var(--muted-foreground)" data-slot="rewards-disclosure">
|
||
{SNAPSHOT.disclosure}
|
||
</Text>
|
||
</YStack>
|
||
</View>
|
||
</Section>
|
||
|
||
{/* ── 9. DIRECT CONTACT & LEADERSHIP ───────────────────────────────── */}
|
||
<Section
|
||
id="contact"
|
||
label="Direct.Contact"
|
||
title="Direct Line to Founders & Maintainers."
|
||
lede="Have questions about open-source architecture or enterprise PR sponsorship? Reach our leadership team directly."
|
||
dither
|
||
>
|
||
<View
|
||
display="grid"
|
||
width="100%"
|
||
gap={16}
|
||
gridTemplateColumns="minmax(0, 1fr)"
|
||
$sm={{ gridTemplateColumns: 'repeat(2, minmax(0, 1fr))' }}
|
||
$lg={{ gridTemplateColumns: 'repeat(4, minmax(0, 1fr))' }}
|
||
>
|
||
{/* Card 1: Leadership / Founders */}
|
||
<YStack
|
||
p={20}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
boxShadow="0 20px 48px -24px color-mix(in srgb, var(--pure-black) 40%, transparent)"
|
||
hoverStyle={{ borderColor: 'var(--border-strong)' }}
|
||
gap={12}
|
||
justify="space-between"
|
||
$platform-web={{ borderRadius: '20px', transition: 'border-color 0.15s ease' }}
|
||
>
|
||
<YStack gap={8}>
|
||
<XStack items="center" gap={8}>
|
||
<Users size={18} color="var(--foreground)" />
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--muted-foreground)" textTransform="uppercase">
|
||
Executive leadership
|
||
</Text>
|
||
</XStack>
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)">
|
||
Antje Worring & Zach Kelling
|
||
</Text>
|
||
<Text fontSize="$2" lineHeight={20} color="var(--muted-foreground)">
|
||
CEO and CTO of Hanzo AI. Direct review of architecture RFCs, core model kernels, and strategic contributors.
|
||
</Text>
|
||
</YStack>
|
||
<More href="mailto:[email protected]">
|
||
[email protected] ↗
|
||
</More>
|
||
</YStack>
|
||
|
||
{/* Card 2: Developer & OSS Support */}
|
||
<YStack
|
||
p={20}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
boxShadow="0 20px 48px -24px color-mix(in srgb, var(--pure-black) 40%, transparent)"
|
||
hoverStyle={{ borderColor: 'var(--border-strong)' }}
|
||
gap={12}
|
||
justify="space-between"
|
||
$platform-web={{ borderRadius: '20px', transition: 'border-color 0.15s ease' }}
|
||
>
|
||
<YStack gap={8}>
|
||
<XStack items="center" gap={8}>
|
||
<LifeBuoy size={18} color="var(--foreground)" />
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--muted-foreground)" textTransform="uppercase">
|
||
Developer support
|
||
</Text>
|
||
</XStack>
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)">
|
||
Engineering Support
|
||
</Text>
|
||
<Text fontSize="$2" lineHeight={20} color="var(--muted-foreground)">
|
||
Assistance with claim verification, Pro API keys, rate limits, and continuous model inference quotas.
|
||
</Text>
|
||
</YStack>
|
||
<More href="mailto:[email protected]">
|
||
[email protected] ↗
|
||
</More>
|
||
</YStack>
|
||
|
||
{/* Card 4: GitHub Organization & Community */}
|
||
<YStack
|
||
p={20}
|
||
rounded={20}
|
||
bg="$panel"
|
||
borderWidth={1}
|
||
borderColor="var(--border)"
|
||
boxShadow="0 20px 48px -24px color-mix(in srgb, var(--pure-black) 40%, transparent)"
|
||
hoverStyle={{ borderColor: 'var(--border-strong)' }}
|
||
gap={12}
|
||
justify="space-between"
|
||
$platform-web={{ borderRadius: '20px', transition: 'border-color 0.15s ease' }}
|
||
>
|
||
<YStack gap={8}>
|
||
<XStack items="center" gap={8}>
|
||
<Github size={18} color="var(--foreground)" />
|
||
<Text fontFamily="$mono" fontSize="$1" fontWeight="600" color="var(--muted-foreground)" textTransform="uppercase">
|
||
Open source ecosystem
|
||
</Text>
|
||
</XStack>
|
||
<Text fontSize="$4" fontWeight="600" color="var(--foreground)">
|
||
github.com/hanzoai
|
||
</Text>
|
||
<Text fontSize="$2" lineHeight={20} color="var(--muted-foreground)">
|
||
{REPO_FLOOR}+ repositories spanning Rust, Go, TypeScript, and Python. Fork repos, star projects, and join our active community.
|
||
</Text>
|
||
</YStack>
|
||
<XStack items="center" gap={12} flexWrap="wrap">
|
||
<More href={GITHUB_HANZO_URL} target="_blank" rel="noopener noreferrer">
|
||
github.com/hanzoai ↗
|
||
</More>
|
||
<More href="https://discord.gg/XthHQQj" target="_blank" rel="noopener noreferrer">
|
||
Discord ↗
|
||
</More>
|
||
</XStack>
|
||
</YStack>
|
||
</View>
|
||
</Section>
|
||
|
||
{/* ── 10. FREQUENTLY ASKED QUESTIONS ─────────────────────────────────── */}
|
||
<Section
|
||
id="faq"
|
||
label="Questions"
|
||
title="Frequently Asked Questions."
|
||
lede="Everything you need to know about levels, points, swag and private Slack access."
|
||
dither
|
||
>
|
||
<View width="100%" maxW={860} mx="auto">
|
||
<Faq items={FAQS} />
|
||
</View>
|
||
</Section>
|
||
</View>
|
||
)
|
||
}
|