mirror of
https://github.com/hanzoai/bootnode.git
synced 2026-09-30 20:46:32 +00:00
Hanzo CI/CD / cicd (push) Failing after 1h10m29s
CI/CD / cicd (push) Failing after 2h37m43s
A static export has no host when it prerenders, so BrandProvider renders the
tree only once the browser has resolved the host, pages that show the brand
are client components, the static head names no brand, and the title and
favicon come from the host. The chain page keeps its static params and
metadata on the server and renders its body on the client, with RPC endpoints
on the brand's API origin at /v1/rpc/{chain}/{network}.
Hanzo's API origin is web3.hanzo.ai itself. The node fleet view, its landing
strip and its nav link belong to the brand that operates a fleet, which is
Lux alone. llms.txt, one file for every host, names no brand and points at
each host's own /docs/api.
Marketing copy states no certification the company does not hold and no
unmeasured uptime, latency, volume or response-time figure. Every internal
link points at a page that exists, every catalog chain is prerendered, and
the routes test holds page bodies to zero dead links.
Co-authored-by: Hanzo Dev <[email protected]>
263 lines
9.1 KiB
TypeScript
263 lines
9.1 KiB
TypeScript
"use client"
|
|
|
|
import Link from "next/link"
|
|
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"
|
|
import { Badge } from "@/components/ui/badge"
|
|
import {
|
|
Book,
|
|
Zap,
|
|
Globe,
|
|
Webhook,
|
|
Wallet,
|
|
Fuel,
|
|
Code,
|
|
Terminal,
|
|
FileCode,
|
|
ArrowRight,
|
|
} from "@luxfi/ui/icons"
|
|
import { docsConfig } from "@/lib/docs-config"
|
|
|
|
const sections = [
|
|
{
|
|
title: "Getting Started",
|
|
description: "Quick start guides and tutorials",
|
|
icon: Zap,
|
|
items: [
|
|
{ name: "Introduction", href: "/docs/quickstart" },
|
|
{ name: "Authentication", href: "/docs/auth/quickstart" },
|
|
{ name: "Making Requests", href: "/docs/api" },
|
|
{ name: "ZAP Protocol", href: "/docs/zap/quickstart" },
|
|
],
|
|
},
|
|
{
|
|
title: "Node API",
|
|
description: "JSON-RPC and REST endpoints for all chains",
|
|
icon: Globe,
|
|
items: [
|
|
{ name: "Overview", href: "/docs/api" },
|
|
{ name: "Ethereum", href: "/docs/api" },
|
|
{ name: "Solana", href: "/docs/api" },
|
|
{ name: "All Chains", href: "/docs/api" },
|
|
],
|
|
},
|
|
{
|
|
title: "Data API",
|
|
description: "Indexed blockchain data for analytics",
|
|
icon: FileCode,
|
|
items: [
|
|
{ name: "Blocks", href: "/docs/api" },
|
|
{ name: "Transactions", href: "/docs/api" },
|
|
{ name: "Tokens", href: "/docs/api" },
|
|
{ name: "NFTs", href: "/docs/api" },
|
|
],
|
|
},
|
|
{
|
|
title: "Webhooks",
|
|
description: "Real-time event notifications",
|
|
icon: Webhook,
|
|
items: [
|
|
{ name: "Setup", href: "/docs/webhooks/quickstart" },
|
|
{ name: "Events", href: "/docs/webhooks/quickstart" },
|
|
{ name: "Signatures", href: "/docs/webhooks/quickstart" },
|
|
{ name: "Retries", href: "/docs/webhooks/quickstart" },
|
|
],
|
|
},
|
|
{
|
|
title: "Smart Wallets",
|
|
description: "ERC-4337 account abstraction",
|
|
icon: Wallet,
|
|
items: [
|
|
{ name: "Overview", href: "/docs/wallets/quickstart" },
|
|
{ name: "Creating Wallets", href: "/docs/wallets/quickstart" },
|
|
{ name: "User Operations", href: "/docs/wallets/quickstart" },
|
|
{ name: "Session Keys", href: "/docs/wallets/quickstart" },
|
|
],
|
|
},
|
|
{
|
|
title: "Gas Manager",
|
|
description: "Gas sponsorship and paymasters",
|
|
icon: Fuel,
|
|
items: [
|
|
{ name: "Policies", href: "/docs/aa/quickstart" },
|
|
{ name: "Paymasters", href: "/docs/aa/quickstart" },
|
|
{ name: "Sponsorship", href: "/docs/aa/quickstart" },
|
|
{ name: "Limits", href: "/docs/aa/quickstart" },
|
|
],
|
|
},
|
|
{
|
|
title: "ZAP Protocol",
|
|
description: "Native binary RPC for AI agents",
|
|
icon: Zap,
|
|
items: [
|
|
{ name: "Quickstart", href: "/docs/zap/quickstart" },
|
|
{ name: "Schema", href: "/docs/zap/quickstart#schema" },
|
|
{ name: "Tools", href: "/docs/zap/quickstart#available-tools" },
|
|
{ name: "Resources", href: "/docs/zap/quickstart#available-resources" },
|
|
],
|
|
},
|
|
]
|
|
|
|
const sdks = [
|
|
{ name: "TypeScript", badge: "v2.0", href: "/docs/sdks" },
|
|
{ name: "Python", badge: "v2.0", href: "/docs/sdks" },
|
|
{ name: "Go", badge: "v1.0", href: "/docs/sdks" },
|
|
{ name: "Rust", badge: "v0.9", href: "/docs/sdks" },
|
|
]
|
|
|
|
export default function DocsPage() {
|
|
return (
|
|
<div className="min-h-screen bg-background">
|
|
{/* Header */}
|
|
<div className="border-b">
|
|
<div className="container py-12">
|
|
<div className="flex items-center gap-3 mb-4">
|
|
<Book className="h-8 w-8 text-primary" />
|
|
<h1 className="text-4xl font-bold">Documentation</h1>
|
|
</div>
|
|
<p className="text-xl text-muted-foreground max-w-2xl">
|
|
Everything you need to build blockchain applications with {docsConfig.brandName}.
|
|
Multi-chain RPC, indexed data, webhooks, smart wallets, and more.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div className="container py-12">
|
|
{/* Quick Links */}
|
|
<div className="grid gap-4 md:grid-cols-4 mb-12">
|
|
<Link
|
|
href="/docs/quickstart"
|
|
className="flex items-center justify-between p-4 border rounded-lg hover:bg-muted transition-colors"
|
|
>
|
|
<div className="flex items-center gap-3">
|
|
<Terminal className="h-5 w-5 text-primary" />
|
|
<span className="font-medium">Quick Start</span>
|
|
</div>
|
|
<ArrowRight className="h-4 w-4" />
|
|
</Link>
|
|
<Link
|
|
href="/docs/api"
|
|
className="flex items-center justify-between p-4 border rounded-lg hover:bg-muted transition-colors"
|
|
>
|
|
<div className="flex items-center gap-3">
|
|
<Code className="h-5 w-5 text-primary" />
|
|
<span className="font-medium">API Reference</span>
|
|
</div>
|
|
<ArrowRight className="h-4 w-4" />
|
|
</Link>
|
|
<Link
|
|
href="/docs/examples"
|
|
className="flex items-center justify-between p-4 border rounded-lg hover:bg-muted transition-colors"
|
|
>
|
|
<div className="flex items-center gap-3">
|
|
<FileCode className="h-5 w-5 text-primary" />
|
|
<span className="font-medium">Examples</span>
|
|
</div>
|
|
<ArrowRight className="h-4 w-4" />
|
|
</Link>
|
|
<Link
|
|
href="/docs/changelog"
|
|
className="flex items-center justify-between p-4 border rounded-lg hover:bg-muted transition-colors"
|
|
>
|
|
<div className="flex items-center gap-3">
|
|
<Zap className="h-5 w-5 text-primary" />
|
|
<span className="font-medium">Changelog</span>
|
|
</div>
|
|
<ArrowRight className="h-4 w-4" />
|
|
</Link>
|
|
</div>
|
|
|
|
{/* SDKs */}
|
|
<Card className="mb-12">
|
|
<CardHeader>
|
|
<CardTitle>SDKs & Libraries</CardTitle>
|
|
<CardDescription>
|
|
Official client libraries for your favorite languages
|
|
</CardDescription>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="grid gap-4 md:grid-cols-4">
|
|
{sdks.map((sdk) => (
|
|
<Link
|
|
key={sdk.name}
|
|
href={sdk.href}
|
|
className="flex items-center justify-between p-4 border rounded-lg hover:bg-muted transition-colors"
|
|
>
|
|
<span className="font-medium">{sdk.name}</span>
|
|
<Badge variant="secondary">{sdk.badge}</Badge>
|
|
</Link>
|
|
))}
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
|
|
{/* Documentation Sections */}
|
|
<div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
|
|
{sections.map((section) => (
|
|
<Card key={section.title}>
|
|
<CardHeader>
|
|
<div className="flex items-center gap-3">
|
|
<section.icon className="h-6 w-6 text-primary" />
|
|
<CardTitle>{section.title}</CardTitle>
|
|
</div>
|
|
<CardDescription>{section.description}</CardDescription>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<ul className="space-y-2">
|
|
{section.items.map((item) => (
|
|
<li key={item.name}>
|
|
<Link
|
|
href={item.href}
|
|
className="text-sm hover:text-primary transition-colors"
|
|
>
|
|
{item.name}
|
|
</Link>
|
|
</li>
|
|
))}
|
|
</ul>
|
|
</CardContent>
|
|
</Card>
|
|
))}
|
|
</div>
|
|
|
|
{/* API Reference Preview */}
|
|
<Card className="mt-12">
|
|
<CardHeader>
|
|
<CardTitle>API Reference</CardTitle>
|
|
<CardDescription>
|
|
Complete reference for all {docsConfig.brandName} APIs
|
|
</CardDescription>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<div className="grid gap-4 md:grid-cols-2 lg:grid-cols-3">
|
|
{[
|
|
{ method: "POST", path: "/v1/rpc/{chain}", desc: "JSON-RPC proxy" },
|
|
{ method: "GET", path: "/v1/tokens/{chain}", desc: "Token balances" },
|
|
{ method: "GET", path: "/v1/nfts/{chain}", desc: "NFT collections" },
|
|
{ method: "GET", path: "/v1/transactions/{chain}", desc: "Transaction history" },
|
|
{ method: "POST", path: "/v1/webhooks", desc: "Create webhook" },
|
|
{ method: "POST", path: "/v1/wallets/deploy", desc: "Deploy smart wallet" },
|
|
].map((endpoint) => (
|
|
<div
|
|
key={endpoint.path}
|
|
className="flex items-center gap-3 p-3 border rounded-lg"
|
|
>
|
|
<Badge
|
|
variant={endpoint.method === "POST" ? "default" : "secondary"}
|
|
className="font-mono"
|
|
>
|
|
{endpoint.method}
|
|
</Badge>
|
|
<div>
|
|
<code className="text-sm">{endpoint.path}</code>
|
|
<p className="text-xs text-muted-foreground">{endpoint.desc}</p>
|
|
</div>
|
|
</div>
|
|
))}
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|