Files
hanzo.ai/public/shots/docs-api-390.webp
zeekayandHanzo Dev ffc084d0fc shots: show three products, and refuse the eleven that show only ourselves
Screenshots now render through <ProductShot> from @hanzogui/shell 8.0.5 — one
frame, so the landing, a category page and a docs callout present a shot
identically instead of each inventing a treatment. Art-directed (2400w @2x
desktop / 1170w @3x phone via <picture>), intrinsic width/height so the box
reserves its ratio before the bytes land, lazy below the fold.

Of fourteen captured plates, three ship:

  chat         -> /products/ai        chat.hanzo.ai's composer, empty state
  app-builder  -> /products/apps      hanzo.app's build composer
  docs-api     -> /products/platform  the api.hanzo.ai/v1 reference

Eleven are withheld, and the reason is the point. Most captures were Hanzo's own
MARKETING pages, not product surfaces. Two were cloud.hanzo.ai's landing page
itself — including the one nominated as the landing hero, because the console
dashboard sits behind an IAM session that could not be established. A landing
page illustrated with a screenshot of that same landing page is not a weak shot,
it is a recursive one, so the hero slot stays EMPTY: heroShot resolves only a
category:'hero' entry and deliberately has no fallback, since falling back to
"the first primary" would drop a category shot onto the front door. The rest are
circular in the milder way — hanzo.ai/pricing shown on hanzo.ai/products/payments
tells a reader nothing they are not already looking at. The savings calculator is
withheld on different grounds: its vendor grid names ~80 third-party products in
a replace-this framing, which is competitive-comparison material and not a call
to make silently.

The rule that survives: the subject must be a real product SURFACE, captured on
a host that is not the page presenting it.

scripts/optimize-shots.py regenerates lib/data/product-shots.ts and the WebP from
the capture manifest, so plates, intrinsic dimensions and the module cannot
drift; it refuses to emit any shot the manifest does not mark ship. 1.4MB of PNG
-> 0.4MB of WebP. Verified at 1440 and 390: overflow 0, correct plate per
viewport, lazy, alt present on every shot.

Co-authored-by: Hanzo Dev <[email protected]>
2026-08-04 01:57:51 -07:00

72 KiB
1170x2532px