fix: update branding to Hanzo for production deployment

- Update layout.tsx with brand-aware metadata (title, OG, icons)
- Change default brand from bootnode to hanzo in brand.ts
- Update homepage, product pages with brand-aware text
- Replace api.bootnode.dev URLs with api.hanzo.ai
- Update llms.txt route to use brand system
- Update security, privacy pages with Hanzo branding
- Update code-demo, unified-navigation with brand logos
- Update footer status link to status.hanzo.ai
This commit is contained in:
2026-02-03 22:34:09 -08:00
parent f586dfab86
commit 42f2dbbe06
12 changed files with 83 additions and 54 deletions
+3 -3
View File
@@ -117,7 +117,7 @@ bun add @bootnode/sdk`}</code>
<code>{`import { Bootnode } from "@bootnode/sdk";
const client = new Bootnode({
apiKey: process.env.BOOTNODE_API_KEY!,
apiKey: process.env.HANZO_API_KEY!,
});
// 1. Get the latest block number via JSON-RPC
@@ -176,8 +176,8 @@ main();`}</code>
endpoint. Here is a plain <code className="bg-muted px-1.5 py-0.5 rounded text-sm">fetch</code> example:
</p>
<pre className="overflow-x-auto rounded-lg bg-zinc-950 p-4 text-sm text-zinc-100">
<code>{`const API_KEY = process.env.BOOTNODE_API_KEY;
const BASE_URL = "https://api.bootnode.dev/v1";
<code>{`const API_KEY = process.env.HANZO_API_KEY;
const BASE_URL = "https://api.hanzo.ai/v1";
// JSON-RPC call
async function ethBlockNumber(): Promise<number> {
+31 -13
View File
@@ -7,13 +7,30 @@ import { Providers } from "@/app/providers"
import { Toaster } from "@/components/ui/sonner"
import "@/app/globals.css"
// Brand-aware metadata - uses NEXT_PUBLIC_BRAND env var
const brandName = process.env.NEXT_PUBLIC_BRAND === "hanzo" ? "Hanzo" :
process.env.NEXT_PUBLIC_BRAND === "lux" ? "Lux Network" :
process.env.NEXT_PUBLIC_BRAND === "zoo" ? "Zoo Labs" : "Hanzo"
const brandTagline = process.env.NEXT_PUBLIC_BRAND === "hanzo" ? "Web3 Infrastructure" :
process.env.NEXT_PUBLIC_BRAND === "lux" ? "Next-Gen Blockchain Infrastructure" :
process.env.NEXT_PUBLIC_BRAND === "zoo" ? "Decentralized AI Infrastructure" : "Web3 Infrastructure"
const brandDomain = process.env.NEXT_PUBLIC_BRAND === "hanzo" ? "web3.hanzo.ai" :
process.env.NEXT_PUBLIC_BRAND === "lux" ? "web3.lux.network" :
process.env.NEXT_PUBLIC_BRAND === "zoo" ? "web3.zoo.ngo" : "web3.hanzo.ai"
const brandIcon = process.env.NEXT_PUBLIC_BRAND === "hanzo" ? "/logo/hanzo-icon.svg" :
process.env.NEXT_PUBLIC_BRAND === "lux" ? "/logo/lux-icon.svg" :
process.env.NEXT_PUBLIC_BRAND === "zoo" ? "/logo/zoo-icon.svg" : "/logo/hanzo-icon.svg"
export const metadata: Metadata = {
title: {
default: "Bootnode - Blockchain Infrastructure for Developers",
template: "%s | Bootnode",
default: `${brandName} - ${brandTagline}`,
template: `%s | ${brandName}`,
},
description:
"The complete blockchain development platform. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, Webhooks, and more. Build faster with Bootnode.",
`Enterprise blockchain infrastructure powered by ${brandName}. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, Webhooks, and more.`,
keywords: [
"blockchain",
"RPC",
@@ -25,27 +42,28 @@ export const metadata: Metadata = {
"DeFi",
"smart contracts",
"developer tools",
brandName.toLowerCase(),
],
authors: [{ name: "Bootnode" }],
authors: [{ name: brandName }],
openGraph: {
type: "website",
locale: "en_US",
url: "https://bootnode.dev",
siteName: "Bootnode",
title: "Bootnode - Blockchain Infrastructure for Developers",
url: `https://${brandDomain}`,
siteName: brandName,
title: `${brandName} - ${brandTagline}`,
description:
"The complete blockchain development platform. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, Webhooks, and more.",
`Enterprise blockchain infrastructure powered by ${brandName}. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, and more.`,
},
twitter: {
card: "summary_large_image",
title: "Bootnode - Blockchain Infrastructure for Developers",
title: `${brandName} - ${brandTagline}`,
description:
"The complete blockchain development platform. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, Webhooks, and more.",
`Enterprise blockchain infrastructure powered by ${brandName}. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, and more.`,
},
icons: {
icon: "/logo/bootnode-icon.svg",
apple: "/logo/bootnode-icon.svg",
shortcut: "/logo/bootnode-icon.svg",
icon: brandIcon,
apple: brandIcon,
shortcut: brandIcon,
},
}
+12 -6
View File
@@ -1,8 +1,14 @@
export async function GET() {
const content = `# Bootnode
## Blockchain Infrastructure for Developers
import { getBrand } from "@/lib/brand"
> The complete blockchain development platform. Multi-chain RPC, Token APIs, NFT APIs, Smart Wallets, Webhooks, and more.
export async function GET() {
const brand = getBrand()
const apiDomain = brand.name === "Hanzo" ? "api.hanzo.ai" : `api.${brand.domain}`
const docsDomain = brand.name === "Hanzo" ? "web3.hanzo.ai" : brand.domain
const content = `# ${brand.name}
## ${brand.tagline}
> ${brand.description}
## Products
- Node: Multi-chain RPC with 99.999% uptime across 100+ chains
@@ -14,7 +20,7 @@ export async function GET() {
- Rollups: Launch custom rollups
## API Base URL
https://api.bootnode.dev/v1
https://${apiDomain}/v1
## Authentication
X-API-Key: <your-api-key>
@@ -43,7 +49,7 @@ X-API-Key: <your-api-key>
Ethereum, Solana, Base, Arbitrum, Polygon, Optimism, Avalanche, BNB Smart Chain, Lux Network, and 90+ more.
## Documentation
https://bootnode.dev/docs
https://${docsDomain}/docs
`
return new Response(content, {
headers: { "Content-Type": "text/plain; charset=utf-8" },
+8 -5
View File
@@ -6,6 +6,7 @@ import { Navbar } from "@/components/navbar"
import { Footer } from "@/components/footer"
import { ChainGrid } from "@/components/chain-grid"
import { CodeDemo } from "@/components/code-demo"
import { getBrand } from "@/lib/brand"
import {
ArrowRight,
Blocks,
@@ -19,6 +20,8 @@ import {
Zap,
} from "lucide-react"
const brand = getBrand()
export default function HomePage() {
return (
<div className="flex min-h-screen flex-col">
@@ -42,7 +45,7 @@ export default function HomePage() {
<p className="mt-6 max-w-2xl text-lg text-muted-foreground md:text-xl">
The complete blockchain development platform. Multi-chain RPC, Token
APIs, NFT APIs, Smart Wallets, Account Abstraction, and more. Ship
faster with Bootnode.
faster with {brand.name}.
</p>
<div className="mt-10 flex flex-col gap-4 sm:flex-row">
<Button size="xl" asChild>
@@ -67,7 +70,7 @@ export default function HomePage() {
Everything you need to build Web3
</h2>
<p className="mt-4 text-lg text-muted-foreground">
From RPC endpoints to account abstraction, Bootnode provides the
From RPC endpoints to account abstraction, {brand.name} provides the
complete infrastructure stack for blockchain developers.
</p>
</div>
@@ -175,14 +178,14 @@ export default function HomePage() {
Guides to get started
</h2>
<p className="mt-4 text-lg text-muted-foreground">
Learn how to integrate Bootnode into your project with our
Learn how to integrate {brand.name} into your project with our
comprehensive guides and tutorials.
</p>
</div>
<div className="mt-16 grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
<GuideCard
title="Blockchain Basics"
description="Get started by learning how to connect your app to Ethereum using Bootnode's JSON-RPC API."
description="Get started by learning how to connect your app to Ethereum using our JSON-RPC API."
href="/docs/quickstart"
badge="Quickstart"
/>
@@ -283,7 +286,7 @@ export default function HomePage() {
Ready to build the future?
</h2>
<p className="mt-4 text-lg text-white/80">
Join thousands of developers building on Bootnode. Get started for
Join thousands of developers building on {brand.name}. Get started for
free with 100M compute units per month.
</p>
<div className="mt-10 flex flex-col justify-center gap-4 sm:flex-row">
+6 -6
View File
@@ -42,8 +42,8 @@ export default function PrivacyPage() {
<div>
<h2 className="text-xl font-semibold text-foreground">1. Introduction</h2>
<p className="mt-3">
Hanzo AI, Inc. (&quot;Bootnode,&quot; &quot;we,&quot; &quot;us,&quot; or &quot;our&quot;) operates the
bootnode.dev website and the Bootnode API platform (collectively, the
Hanzo AI, Inc. (&quot;Hanzo,&quot; &quot;we,&quot; &quot;us,&quot; or &quot;our&quot;) operates the
hanzo.ai website and the Hanzo Web3 API platform (collectively, the
&quot;Service&quot;). This Privacy Policy explains how we collect, use, disclose,
and safeguard your information when you use our Service.
</p>
@@ -167,10 +167,10 @@ export default function PrivacyPage() {
<p className="mt-3">
To exercise these rights, contact us at{" "}
<a
href="mailto:privacy@bootnode.dev"
href="mailto:privacy@hanzo.ai"
className="text-primary hover:underline"
>
privacy@bootnode.dev
privacy@hanzo.ai
</a>
. We will respond within 30 days.
</p>
@@ -229,10 +229,10 @@ export default function PrivacyPage() {
<p className="font-medium text-foreground">Hanzo AI, Inc.</p>
<p className="mt-1">Email:{" "}
<a
href="mailto:privacy@bootnode.dev"
href="mailto:privacy@hanzo.ai"
className="text-primary hover:underline"
>
privacy@bootnode.dev
privacy@hanzo.ai
</a>
</p>
<p>San Francisco, California, United States</p>
+5 -5
View File
@@ -67,7 +67,7 @@ export default function DataProductPage() {
Three APIs, complete coverage
</h2>
<p className="mt-4 text-lg text-muted-foreground">
Bootnode Data APIs handle the complex indexing, caching, and
Our Data APIs handle the complex indexing, caching, and
normalization so you never have to decode raw logs or parse
transaction receipts again.
</p>
@@ -105,7 +105,7 @@ export default function DataProductPage() {
</div>
<CodeBlock
title="GET /v1/tokens/balances"
code={`curl "https://api.bootnode.dev/v1/tokens/balances?\\
code={`curl "https://api.hanzo.ai/v1/tokens/balances?\\
address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&\\
chains=ethereum,base,arbitrum" \\
-H "X-API-Key: YOUR_API_KEY"
@@ -147,7 +147,7 @@ export default function DataProductPage() {
<div className="order-2 lg:order-1">
<CodeBlock
title="GET /v1/nfts/owned"
code={`curl "https://api.bootnode.dev/v1/nfts/owned?\\
code={`curl "https://api.hanzo.ai/v1/nfts/owned?\\
address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&\\
chain=ethereum&limit=2" \\
-H "X-API-Key: YOUR_API_KEY"
@@ -162,7 +162,7 @@ export default function DataProductPage() {
"standard": "ERC-721",
"collection": "Bored Ape Yacht Club",
"name": "BAYC #8520",
"image": "https://media.bootnode.dev/ipfs/Qm...",
"image": "https://media.hanzo.ai/ipfs/Qm...",
"attributes": [
{ "trait_type": "Fur", "value": "Dark Brown" },
{ "trait_type": "Eyes", "value": "Bored" }
@@ -239,7 +239,7 @@ export default function DataProductPage() {
</div>
<CodeBlock
title="GET /v1/transfers"
code={`curl "https://api.bootnode.dev/v1/transfers?\\
code={`curl "https://api.hanzo.ai/v1/transfers?\\
address=0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045&\\
chain=ethereum&category=erc20&limit=2" \\
-H "X-API-Key: YOUR_API_KEY"
+1 -1
View File
@@ -79,7 +79,7 @@ export default function WalletsProductPage() {
Everything you need to onboard the next billion
</h2>
<p className="mt-4 text-lg text-muted-foreground">
Bootnode Smart Wallets handle the complexity of account abstraction
Smart Wallets handle the complexity of account abstraction
so your users never have to think about gas, keys, or
transactions.
</p>
+6 -6
View File
@@ -193,14 +193,14 @@ export default function SecurityPage() {
<p>
We value the security research community and welcome responsible
disclosure of vulnerabilities. If you discover a security issue in
Bootnode, please report it to us privately so we can address it before
Hanzo Web3, please report it to us privately so we can address it before
public disclosure.
</p>
<h4 className="font-semibold text-foreground">Scope</h4>
<ul className="ml-4 list-disc space-y-1">
<li>Bootnode API endpoints (api.bootnode.dev)</li>
<li>Bootnode dashboard (bootnode.dev/dashboard)</li>
<li>Bootnode documentation site (bootnode.dev/docs)</li>
<li>Hanzo API endpoints (api.hanzo.ai)</li>
<li>Hanzo dashboard (web3.hanzo.ai/dashboard)</li>
<li>Hanzo documentation site (web3.hanzo.ai/docs)</li>
<li>Authentication and authorization systems</li>
<li>Webhook delivery and signature verification</li>
</ul>
@@ -216,10 +216,10 @@ export default function SecurityPage() {
<p>
Send vulnerability reports to{" "}
<a
href="mailto:security@bootnode.dev"
href="mailto:security@hanzo.ai"
className="text-primary hover:underline"
>
security@bootnode.dev
security@hanzo.ai
</a>
. Include a detailed description, steps to reproduce, and any proof-of-concept
code. We will acknowledge receipt within 24 hours and provide an initial
+5 -2
View File
@@ -5,6 +5,7 @@ import { cn } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Badge } from "@/components/ui/badge"
import { Check, Copy, Play } from "lucide-react"
import { getBrand } from "@/lib/brand"
const CHAINS = ["Ethereum", "Solana", "Base", "Arbitrum", "Polygon"]
const METHODS = [
@@ -21,9 +22,11 @@ export function CodeDemo() {
const [response, setResponse] = React.useState<string | null>(null)
const [loading, setLoading] = React.useState(false)
const code = `curl -X POST https://api.bootnode.dev/v1/rpc/${selectedChain.toLowerCase()}/mainnet \\
const brand = getBrand()
const apiDomain = brand.name === "Hanzo" ? "api.hanzo.ai" : `api.${brand.domain}`
const code = `curl -X POST https://${apiDomain}/v1/rpc/${selectedChain.toLowerCase()}/mainnet \\
-H "Content-Type: application/json" \\
-H "X-API-Key: bn_your_api_key" \\
-H "X-API-Key: your_api_key" \\
-d '{
"jsonrpc": "2.0",
"method": "${selectedMethod}",
+1 -1
View File
@@ -34,7 +34,7 @@ const footerLinks = {
{ name: "Blog", href: "/blog" },
{ name: "Careers", href: "/careers" },
{ name: "Contact", href: "/contact" },
{ name: "Status", href: "https://status.bootnode.dev" },
{ name: "Status", href: "https://status.hanzo.ai" },
{ name: "Security", href: "/security" },
],
}
+3 -4
View File
@@ -18,6 +18,7 @@ import {
DropdownMenuTrigger
} from "@/components/ui/dropdown-menu"
import { useAuth, OrgBadge } from "@/lib/auth"
import { getBrand } from "@/lib/brand"
import {
Activity,
Server,
@@ -167,10 +168,8 @@ export function UnifiedNavigation() {
<div className="flex items-center">
{/* Logo */}
<Link href="/dashboard" className="flex items-center space-x-3">
<div className="w-8 h-8 bg-primary rounded-lg flex items-center justify-center">
<span className="text-white font-bold text-sm">B</span>
</div>
<span className="text-xl font-bold">Bootnode</span>
<img src={getBrand().logoIcon} alt={getBrand().name} className="w-8 h-8" />
<span className="text-xl font-bold">{getBrand().name}</span>
</Link>
{/* Organization Selector */}
+2 -2
View File
@@ -144,8 +144,8 @@ function getBrandKey(): string {
if (hostname.includes("zoo.ngo")) return "zoo"
}
// Default to bootnode
return "bootnode"
// Default to hanzo for production
return "hanzo"
}
// Export the active brand configuration