mirror of
https://github.com/hanzoai/bootnode.git
synced 2026-09-30 20:46:32 +00:00
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:
@@ -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
@@ -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,
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@@ -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
@@ -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">
|
||||
|
||||
@@ -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. ("Bootnode," "we," "us," or "our") operates the
|
||||
bootnode.dev website and the Bootnode API platform (collectively, the
|
||||
Hanzo AI, Inc. ("Hanzo," "we," "us," or "our") operates the
|
||||
hanzo.ai website and the Hanzo Web3 API platform (collectively, the
|
||||
"Service"). 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>
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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,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}",
|
||||
|
||||
@@ -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" },
|
||||
],
|
||||
}
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user