Files
zeekayandHanzo Dev 0a3ebececd Ship the real Hanzo mark, and stop the chat button sitting on it
The favicon was hand-made. `6c17299` replaced the generated scaffold icon with a
drawn "Hanzo H mark" whose blob is byte-identical to what production still
serves: three layers, fully opaque, polarity inverted, and offset about half a
cell so two of the four corner squares fall off the canvas. At its real 16px
tab size it is a pale smear. Take the mark from `@hanzo/logo` instead — already
a dependency here, already the source of the header logo — and ship the whole
set it publishes: favicon.ico (6 layers, 16→256), favicon.svg, apple-touch-icon.
`<head>` now declares all three; it previously declared one 696px opaque PNG and
nothing else, which also suppressed `app/icon.svg` (deleted — the mark has one
home now).

The header mark was invisible, and the fix on main only moved which theme it was
invisible in. `variant="mono"` does not inherit `currentColor` as Logo.tsx
claimed — it is hardcoded #000000, so main rendered black on the black page.
It is one ink on transparency, exactly like every mark in `partner-logos.ts`, so
it is carried the same way: `hz-ink-black`, none on light and invert(1) on dark.
The inversion lands on #ffffff/#DDDDDD, which is the `white` variant byte for
byte.

The chat launcher was covering the logo. `hz-fixed` sets `position: fixed` and
nothing else, so a fixed element with no offsets stays where it was: top-left,
48px square, directly over the mark, on every page and both themes. Nothing
could catch it — every class on the button had a rule, the missing one was never
written. Added `hz-dock` as that one rule, and sized the panel against the
viewport so it cannot grow past the screen it is docked to. The panel also took
`hz-bg` from `hz-bg-surface`, whose dark value is rgba(38,38,38,.5): right for a
card on the page, wrong for one floating over it.

A fabricated trademark is gone. `lux-network.svg` was hand-coded rects and
polygons spelling "LUX", nothing like the real mark, duplicated under three
filenames. Lux and Zoo Labs are sibling orgs in this estate, not our clients —
their marks and their entries in `clients` are both removed. A Hanzo surface
carries Hanzo branding.

Every share card 404'd: og:image pointed at `/opengraph-image`, a file-convention
route this app does not have, while the real `/og-image.png` sat declared and
unused. og:site_name was carrying the tagline and twitter:title disagreed with
og:title; both now say what they are.

The repo count contradicted itself in one viewport — "727+" in the hero, "2,500+"
in a tile 200px below it, 3.4x apart, and both in `<head>`. Neither survives
measurement: 535 non-archived public repos across the six orgs the site names.
Stated once now, as a floor, with the query that produced it.

"All systems operational" was a hardcoded string on every page with no health
check behind it — it would have said that straight through an outage. It links
to /status as "System status" instead.

Verified in a real browser at 390 and 1280, light and dark: the mark matches an
isolated render of the same SVG (mean abs diff 0.05/255) and dark is its exact
inverse; `elementFromPoint` at the mark's centre returns its own path; the
served .ico is 2b734c3b, six layers. Routes 60/60, no overflow, no console
errors.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-05 16:27:35 -07:00

83 lines
3.3 KiB
TypeScript

// site.config.ts — Single source of truth for brand data.
// Fork this file (and public assets) to rebrand the entire site.
// The open-source repo count, stated ONCE. The hero used to say "727+" two
// hundred pixels above a stat tile saying "2,500+" — two sources of truth, 3.4x
// apart, in one viewport. This is the floor of a live count: 535 non-archived
// public repos across the six orgs the site claims (hanzoai 271, luxfi 130,
// zenlm 71, hanzo-apps 56, zooai 4, zoo-labs 3), read from the GitHub API.
// Re-measure before raising it:
// for o in hanzoai zooai luxfi zenlm hanzo-apps zoo-labs; do \
// gh api --paginate "orgs/$o/repos?per_page=100&type=public" \
// --jq '.[] | select(.archived==false) | .name'; done | wc -l
const ossRepos = '500+'
const siteConfig = {
brand: {
name: 'Hanzo',
legalName: 'Hanzo AI Inc & Hanzo Industries Inc',
tagline: 'Frontier AI Research Lab',
description: `Frontier AI research lab advancing machine learning, cryptography, consensus protocols, and distributed systems. 130+ papers, ${ossRepos} OSS projects, 41+ AI models.`,
ossRepos,
domain: 'hanzo.industries',
url: 'https://hanzo.industries',
foundedYear: 2016,
badge: "Techstars '17",
},
seo: {
titleTemplate: '%s | Hanzo Industries',
defaultTitle: 'Hanzo Industries — Frontier AI Research Lab',
ogImage: '/og-image.png',
// The brand mark, copied from `@hanzo/logo` (this repo's own dependency —
// `dist/favicon.ico`, `dist/favicon.svg`, `dist/favicon/apple-touch-icon.png`).
// The .ico is the one browsers fetch from /favicon.ico whatever the markup
// says, so it has to BE the mark: six layers, 16→256. Do not redraw these.
icons: {
ico: '/favicon.ico',
svg: '/favicon.svg',
appleTouch: '/apple-touch-icon.png',
},
themeColor: '#000000',
},
links: {
github: 'https://github.com/hanzoai',
twitter: 'https://x.com/hanzoai',
docs: 'https://docs.hanzo.ai',
huggingFace: 'https://huggingface.co/zenlm',
platform: 'https://hanzo.ai',
chat: 'https://hanzo.chat',
bot: 'https://hanzo.bot',
botApp: 'https://app.hanzo.bot',
dev: 'https://hanzo.ai/dev',
team: 'https://hanzo.team',
engine: 'https://engine.hanzo.ai',
edge: 'https://edge.hanzo.ai',
zenModels: 'https://hanzo.ai/zen',
modelApi: 'https://hanzo.ai/api',
},
chat: {
apiUrl: 'https://api.hanzo.ai',
// CANONICAL HIP-0111 path (what hanzo.id's discovery advertises). The bare
// /oauth/authorize was only ever served by the hanzo.id-worker shim.
iamAuthorizeUrl: 'https://hanzo.id/v1/iam/oauth/authorize',
iamClientId: 'hanzo-app-client-id',
freeMessageLimit: 1,
},
stats: [
{ value: "Techstars '17", label: 'Backed Company' },
{ value: '130+', label: 'Research Papers' },
{ value: ossRepos, label: 'OSS Projects' },
{ value: 'Safety First', label: 'Aligned AI Systems' },
],
// Clients only. Zoo Labs Foundation and Lux Network were listed here (and
// carried marks in the partner strip): they are sibling orgs in this estate,
// not customers, and a Hanzo surface carries Hanzo branding alone.
clients: [
'Triller', 'Damon', 'Bellabeat', 'Unikrn', 'Cover', 'Casper',
'Myle', 'Drumpants', 'Cove', 'Aura', 'KANOA', 'SKULLY',
],
} as const
export type SiteConfig = typeof siteConfig
export default siteConfig