mirror of
https://github.com/hanzo-apps/hanzo.ai.git
synced 2026-10-29 07:20:43 +00:00
ProviderMark is one table of every lab's mark, about 32 KB after brotli, and four client components imported it whole: the landing's agent strip and race, /templates' prompt rows and /gen's roster, which put it in the first load of /dev, /gen and /templates for a few marks below the fold. components/models/ Mark is the lazy one Maker already used, its footprint standing empty until the table arrives; every client mark draws through it. /dev's first load is 406 KB (was 449), /gen's 387 (was 429). A server page renders ProviderMark itself and ships none of it. The focused bar (the previous commit) stood in a Suspense boundary, and that boundary misbehaved twice. The prerender flushed it before the bar's module had loaded, so the export carried an empty boundary where the bar goes and the bar further down, swapped in by React's inline script: on a slow line it arrived late and pushed /login's form down (CLS 0.15 on Fast 3G against 0.1). And IAM settling is an update, so hydration threw the prerendered bar away for the fallback until the chunk landed (focus.spec found no wordmark). With no boundary the prerender holds the bar in place and a focused page hydrates once its chunk, a preload in its head, has arrived: measured on /forget, the bar is there from the first parse through hydration. Claude-Session: https://claude.ai/code/session_01BLLMyBFSvAfCt7ZGqYuiEz
21 lines
982 B
TypeScript
21 lines
982 B
TypeScript
'use client'
|
|
|
|
import { View } from '@/components/ui'
|
|
import { Mark } from './Mark'
|
|
|
|
/**
|
|
* The mark of the lab that makes a model, bare and in the page's ink, so it
|
|
* reads in both themes: Hanzo's H for ours (Enso, its tiers and Kai; owner,
|
|
* 2026-10-16), a lab's own mark for a price-list id, read through ProviderMark
|
|
* (`anthropic/claude-opus-4.8` wears Claude's, `openai/gpt-5.6-sol` OpenAI's,
|
|
* `deepseek/deepseek-v4-pro` DeepSeek's). Every row that draws one is drawn from
|
|
* a read the page makes after it loads, so the table is fetched then (./Mark).
|
|
* Its footprint stands empty while the table loads, and for a row with no id,
|
|
* so names stay in one column.
|
|
*/
|
|
export function Maker({ id, ours, size = 14 }: { id: string | null; ours: boolean; size?: number }) {
|
|
if (ours) return <Mark org="hanzo" size={size} ink />
|
|
if (id) return <Mark org={id.split('/')[0]} model={id} size={size} ink />
|
|
return <View aria-hidden width={size} height={size} shrink={0} />
|
|
}
|