Files
zooqueenandHanzo Dev df50d16787
Hanzo CI/CD / cicd (push) Failing after 1h10m29s
CI/CD / cicd (push) Failing after 2h37m43s
Render every console page with the brand of the host serving it
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]>
2026-09-15 12:01:27 -07:00

43 lines
1.7 KiB
TypeScript

import type { Metadata } from "next"
import { ThemeProvider } from "@/components/theme-provider"
import { AuthProvider } from "@/lib/auth"
import { Providers } from "@/app/providers"
import { Toaster } from "@/components/ui/sonner"
import { BrandProvider } from "@/components/brand-provider"
import "@hanzo/font/css"
import "@/app/globals.css"
// `output: "export"` prerenders this at build time, where there is no request
// and therefore no host to name a brand from. The static <head> carries no title
// and an empty icon, so it names no brand and the browser asks for no
// /favicon.ico; BrandProvider writes the host's title and favicon in the browser,
// and with no title element of the layout's own there is nothing to overwrite it.
export const metadata: Metadata = {
icons: { icon: "data:," },
description:
"Multi-chain RPC, token and NFT APIs, smart wallets, webhooks and account abstraction.",
keywords: ["blockchain", "RPC", "API", "Web3", "NFT", "DeFi", "smart contracts", "developer tools"],
}
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en" suppressHydrationWarning>
<body className="min-h-screen bg-background font-sans antialiased">
<Providers>
{/* BrandProvider wraps ThemeProvider: the brand owns the default
colour scheme, so the theme cannot be resolved before the brand
is. */}
<BrandProvider>
<AuthProvider>
<ThemeProvider>
{children}
<Toaster />
</ThemeProvider>
</AuthProvider>
</BrandProvider>
</Providers>
</body>
</html>
)
}