Files
zeekay a9e0257f07 feat: add platform docs with full API reference
Adds the Hanzo Platform documentation app with 47 MDX pages covering:
- Getting Started (overview, quickstart, concepts, CLI)
- Deployments (Kubernetes, Docker Swarm, Compose, Git, Registry, Domains)
- Clusters (fleet, registration, provisioning, node pools)
- Virtual Machines (AWS, DigitalOcean, Hetzner, volumes, terminal)
- Access Control (organizations, roles, permissions, invitations)
- Pricing (plans, compute, storage)
- API Reference (authentication, organizations, clusters, containers, VMs)

Also adds team app and K8s deployment manifest for platform-site.
2026-02-26 22:05:27 -08:00

356 lines
13 KiB
TypeScript

import { cn } from '@/lib/cn';
import { cva } from 'class-variance-authority';
import Image from 'next/image';
import {
ArrowRightIcon,
CheckSquareIcon,
BookOpenIcon,
MessageSquareIcon,
ClockIcon,
ZapIcon,
CodeIcon,
GithubIcon,
KeyboardIcon,
CalendarIcon,
BellIcon,
LayoutGridIcon,
} from 'lucide-react';
const buttonVariants = cva(
'inline-flex items-center justify-center gap-2 rounded-full font-medium tracking-tight transition-all cursor-pointer',
{
variants: {
variant: {
primary:
'bg-white text-black hover:bg-white/90',
secondary:
'border border-white/10 bg-white/5 text-white hover:bg-white/10 hover:border-white/20',
ghost: 'text-text-muted hover:text-white',
},
size: {
lg: 'px-8 py-4 text-lg',
md: 'px-6 py-3 text-base',
sm: 'px-4 py-2 text-sm',
},
},
defaultVariants: {
variant: 'primary',
size: 'md',
},
},
);
const features = [
{
icon: CheckSquareIcon,
title: 'Issue Tracking',
description:
'Kanban boards, sprints, and backlog management. Customizable workflows for every team.',
image: '/images/tasks.png',
},
{
icon: BookOpenIcon,
title: 'Knowledge Base',
description:
'Collaborative documents with rich text editing. Your team\'s single source of truth.',
image: '/images/collab.jpg',
},
{
icon: MessageSquareIcon,
title: 'Real-time Chat',
description:
'Threaded conversations linked to issues and documents. Channels, DMs, and video calls.',
image: '/images/teammates.jpg',
},
{
icon: ClockIcon,
title: 'Time Management',
description:
'Time tracking, estimations, and resource planning. Gantt charts and workload views.',
image: '/images/planner.jpg',
},
{
icon: ZapIcon,
title: 'Automation',
description:
'Custom automations for recurring workflows. Trigger actions on state changes and deadlines.',
image: '/images/pm.jpg',
},
{
icon: CodeIcon,
title: 'Developer Tools',
description:
'GitHub/GitLab integration, CI/CD tracking, and code reviews. Built for engineering teams.',
image: '/images/calendar.png',
},
];
const productivityFeatures = [
{
icon: KeyboardIcon,
title: 'Keyboard shortcuts',
description: 'Work efficiently with instant access to every action.',
},
{
icon: CalendarIcon,
title: 'Team Planner',
description: 'View all tasks in a centralized calendar.',
},
{
icon: BellIcon,
title: 'Notifications',
description: 'Receive instant updates on changes that matter.',
},
{
icon: LayoutGridIcon,
title: 'Time-blocking',
description: 'Transform tasks into structured time blocks.',
},
];
export default function Page() {
return (
<main className="min-h-screen">
{/* Navigation */}
<nav className="sticky top-0 z-50 border-b border-border bg-bg/80 backdrop-blur-xl">
<div className="mx-auto flex h-16 max-w-7xl items-center justify-between px-6">
<div className="flex items-center gap-3">
<span className="text-lg font-bold tracking-tight text-white">
Hanzo Team
</span>
</div>
<div className="flex items-center gap-6">
<a href="#features" className={cn(buttonVariants({ variant: 'ghost', size: 'sm' }))}>
Features
</a>
<a href="https://github.com/hanzoai/team" className={cn(buttonVariants({ variant: 'ghost', size: 'sm' }))}>
GitHub
</a>
<a href="https://app.hanzo.team" className={cn(buttonVariants({ size: 'sm' }))}>
Sign In
<ArrowRightIcon className="size-4" />
</a>
</div>
</div>
</nav>
{/* Hero Section */}
<section className="relative overflow-hidden">
<div className="absolute inset-0">
<div className="absolute left-1/2 top-0 h-[800px] w-[1000px] -translate-x-1/2 -translate-y-1/3 rounded-full bg-white/[0.02] blur-3xl" />
</div>
<div className="relative mx-auto max-w-7xl px-6 pb-8 pt-24 md:pt-32">
<div className="mx-auto max-w-4xl text-center">
<h1 className="mb-6 text-5xl font-bold tracking-tight md:text-7xl lg:text-8xl">
Everything app
<br />
<span className="text-text-muted">for your teams</span>
</h1>
<p className="mx-auto mb-12 max-w-2xl text-lg text-text-muted md:text-xl leading-relaxed">
All-in-one replacement for Linear, Jira, Slack, and Notion.
Open-source project management with real-time collaboration.
</p>
<div className="flex flex-wrap items-center justify-center gap-4">
<a
href="https://app.hanzo.team"
className={cn(buttonVariants({ size: 'lg' }))}
>
Get Started Free
<ArrowRightIcon className="size-5" />
</a>
<a
href="https://github.com/hanzoai/team"
target="_blank"
rel="noreferrer noopener"
className={cn(buttonVariants({ variant: 'secondary', size: 'lg' }))}
>
<GithubIcon className="size-5" />
Star on GitHub
</a>
</div>
</div>
{/* Hero Screenshot */}
<div className="mx-auto mt-20 max-w-5xl">
<div className="relative overflow-hidden rounded-2xl border border-white/[0.08] shadow-2xl shadow-black/50">
<Image
src="/images/hero.jpg"
alt="Hanzo Team — Project management interface"
width={1024}
height={569}
className="w-full"
priority
/>
<div className="absolute inset-0 rounded-2xl ring-1 ring-inset ring-white/[0.08]" />
</div>
</div>
</div>
</section>
{/* Productivity Section */}
<section className="mx-auto max-w-7xl px-6 py-32">
<div className="mb-16">
<h2 className="mb-4 text-4xl font-bold tracking-tight md:text-5xl">
Unmatched
<br />
<span className="text-text-muted">productivity</span>
</h2>
</div>
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-4">
{productivityFeatures.map((f) => (
<div
key={f.title}
className="group rounded-2xl border border-white/[0.06] bg-white/[0.02] p-6 transition-all hover:border-white/[0.12] hover:bg-white/[0.04]"
>
<f.icon className="mb-4 size-6 text-text-muted transition-colors group-hover:text-white" />
<h3 className="mb-2 font-semibold text-white">{f.title}</h3>
<p className="text-sm text-text-dim leading-relaxed">{f.description}</p>
</div>
))}
</div>
</section>
{/* Features Grid */}
<section id="features" className="mx-auto max-w-7xl px-6 py-24">
<div className="mb-20 max-w-xl">
<h2 className="mb-4 text-4xl font-bold tracking-tight md:text-5xl">
Work together.
<br />
<span className="text-text-muted">Ship faster.</span>
</h2>
<p className="text-text-muted text-lg">
From issue tracking to knowledge management — everything your team
needs in one place.
</p>
</div>
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
{features.map((feature) => (
<div
key={feature.title}
className="group overflow-hidden rounded-2xl border border-white/[0.06] bg-white/[0.02] transition-all hover:border-white/[0.12]"
>
<div className="relative aspect-[4/3] overflow-hidden bg-bg-subtle">
<Image
src={feature.image}
alt={feature.title}
fill
className="object-cover opacity-80 transition-all group-hover:opacity-100 group-hover:scale-[1.02]"
/>
<div className="absolute inset-0 bg-gradient-to-t from-bg via-transparent to-transparent" />
</div>
<div className="p-6">
<div className="mb-3 flex items-center gap-3">
<feature.icon className="size-5 text-text-muted" />
<h3 className="font-semibold text-white">{feature.title}</h3>
</div>
<p className="text-sm leading-relaxed text-text-dim">
{feature.description}
</p>
</div>
</div>
))}
</div>
</section>
{/* GitHub Sync Section */}
<section className="border-y border-white/[0.06] bg-white/[0.01]">
<div className="mx-auto max-w-7xl px-6 py-32">
<div className="grid items-center gap-16 lg:grid-cols-2">
<div>
<h2 className="mb-6 text-4xl font-bold tracking-tight md:text-5xl">
Sync with GitHub.
<br />
<span className="text-text-muted">Both ways.</span>
</h2>
<p className="mb-8 text-lg text-text-muted leading-relaxed">
Two-way sync keeps issues, PRs, and commits linked. Your
development workflow stays in flow — no context switching.
</p>
<div className="space-y-4">
{[
'Two-way issue synchronization',
'PR and commit linking',
'Multiple repository support',
'Automated status updates',
].map((item) => (
<div key={item} className="flex items-center gap-3 text-sm text-text-muted">
<div className="flex size-5 shrink-0 items-center justify-center rounded-full border border-white/10">
<CheckSquareIcon className="size-3 text-white" />
</div>
{item}
</div>
))}
</div>
</div>
<div className="relative overflow-hidden rounded-2xl border border-white/[0.08]">
<Image
src="/images/pm.jpg"
alt="GitHub integration"
width={422}
height={250}
className="w-full"
/>
</div>
</div>
</div>
</section>
{/* CTA Section */}
<section className="relative overflow-hidden">
<div className="absolute inset-0">
<div className="absolute left-1/2 bottom-0 h-[600px] w-[800px] -translate-x-1/2 translate-y-1/2 rounded-full bg-white/[0.02] blur-3xl" />
</div>
<div className="relative mx-auto max-w-7xl px-6 py-32">
<div className="mx-auto max-w-2xl text-center">
<h2 className="mb-6 text-4xl font-bold tracking-tight md:text-5xl">
Join the movement
</h2>
<p className="mb-10 text-lg text-text-muted">
Open-source. Self-hostable. Built for teams that ship.
</p>
<div className="flex flex-wrap items-center justify-center gap-4">
<a
href="https://app.hanzo.team"
className={cn(buttonVariants({ size: 'lg' }))}
>
Get Started Free
<ArrowRightIcon className="size-5" />
</a>
<a
href="https://github.com/hanzoai/team"
target="_blank"
rel="noreferrer noopener"
className={cn(buttonVariants({ variant: 'secondary', size: 'lg' }))}
>
<GithubIcon className="size-5" />
View Source
</a>
</div>
</div>
</div>
</section>
{/* Footer */}
<footer className="border-t border-white/[0.06]">
<div className="mx-auto flex max-w-7xl items-center justify-between px-6 py-8">
<span className="text-sm text-text-dim">Hanzo Team</span>
<div className="flex items-center gap-6 text-sm text-text-dim">
<a href="https://hanzo.ai" className="hover:text-white transition-colors">
hanzo.ai
</a>
<a href="https://app.hanzo.team" className="hover:text-white transition-colors">
App
</a>
<a href="https://github.com/hanzoai/team" className="hover:text-white transition-colors">
GitHub
</a>
</div>
</div>
</footer>
</main>
);
}