Skip to content

Home page: product artwork, rebuilt compatibility diagram, shader stages - #1206

Merged
Aditya-thesys merged 4 commits into
mainfrom
home-white-background
Sep 22, 2026
Merged

Aditya-thesys merged 4 commits into
mainfrom
home-white-background

Conversation

@pd-builds

Copy link
Copy Markdown
Contributor

Product bands

Real artwork replaces the placeholder illustrations on the OpenUI and Gateway bands. Six images, light and dark per band, at 1120x440 (2x sources).

products.ts was already written for this: each band now sets shot and ProductSection composes the light/dark pair. The -light / -dark suffix is the picture's own tone, not the page theme, because the Cloud band is black on a light page and white on a dark one and needs the opposite asset in each.

The observability card was a narrow column beside its copy, which made its visual roughly half the width of the reliability band's. It now uses the same shape as a ProductSection band, copy across the top and a full-width stage below, so the two match. A rule divides them.

Compatibility diagram

Rebuilt. Four rows, each two bands of square logo cells drifting inward behind a centre column that names the layer and stays put. Every row runs the same animation pair with no stagger, so cell edges line up down the diagram and it reads as a single grid rather than four strips.

The centre is one element spanning all four rows rather than four stacked cells. Stacked cells each cast their shadow onto their neighbours, which are the rest of the same column.

Logos updated to the current stack. Llama, LlamaIndex and Mastra are left out: no mark could be found for any of them, and a row is better short than represented by a related company's logo.

The band's heading moved below the diagram and gained a caption. The diagram is images plus a visually hidden list, so none of this band's claim appeared in crawlable body text before.

Shader

Adds shaders and the "Faded Dither" preset behind each product stage, loaded client-only since it is WebGPU. Two tones, picked by the ground the stage actually sits on rather than by the page theme, since the Cloud band inverts.

Elsewhere on the page

  • Light-mode page fill is white. --openui-foreground is rgb(253,253,253), two levels off white, and sections painting pure #fff sat on it so the step read as a faint frame. The token is pinned on the home page's own root, not on .homeTheme, which covers thirteen marketing routes.
  • The Cloud banner retires when the FAQ arrives instead of running to the end.
  • Tweet card shadows were being clipped by their column's overflow: hidden.
  • Observability CTA now reads "Get Early Access".

Notes for review

  • pnpm add re-sorted docs/package.json's dependencies block. The only addition is shaders; codemirror, react-resizable-panels and semver were already there and only moved.
  • shaders is a new third-party runtime dependency (1.38MB ESM, dynamically imported). Worth confirming its licence terms for production use before merge.
  • next build passes.

🤖 Generated with Claude Code

…ages

Replaces the placeholder illustrations on the OpenUI and Gateway bands with
real artwork, rebuilds the compatibility diagram, and adds a shader layer
behind each product stage.

The -light / -dark suffix on the artwork is the picture's own tone, not the
page theme: the Cloud band is black on a light page and white on a dark one,
so it needs the opposite asset in each.

The compatibility diagram's centre is one element spanning all four rows
rather than four stacked cells, because stacked cells each cast their shadow
onto their neighbours, which are the rest of the same column.

Llama, LlamaIndex and Mastra are left out of the diagram: no mark could be
found for any of them, and a row is better short than represented by a
related company's logo.

--openui-foreground is pinned to white on the home page's own root rather
than on .homeTheme. The token is declared in the react-ui package and read in
167 places across the site, and .homeTheme covers thirteen marketing routes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 21, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
openui-docs Ready Ready Preview Sep 22, 2026 8:51am UTC

Request Review

… bands

The bands were drawn wide. On a phone that meant a squeezed desktop
picture, a horizontal card scroller, and a description stranded above the
artwork it describes. Everything here is scoped to the 767px breakpoint;
desktop renders exactly as it did before.

- Phone artwork: each stage carries a second 1440x1200 drawing, switched
  by a display:contents wrapper so the existing theme rules still pick the
  tone. The wrapper sidesteps a specificity race, since
  [data-theme="dark"] .x outranks a .x inside a media query.
- Shader: phone-width screens get more wave cycles and a thinner line,
  because a phone shows so little of the preset that it reads as one flat
  swell. Keyed off the viewport, so every shader on a screen matches.
- Descriptions move below the stage: .lockup becomes display:contents and
  its children take an order, rather than duplicating the copy.
- Gateway's cards render as FeatureGridSection accordion rows, matching the
  grid under the Lang band. So a band can re-point the grid's colours, each
  --fg-* token now reads a --feature-grid-* override first: .section
  declares --fg-* on itself, so a value inherited under the same name would
  lose to it.
- The Cloud heading drops out, the band separator fades at both ends, and
  the Lang band sits closer to the grid that states its capabilities.

Also fixes the tweet wall, which clipped the right edge off every card and
overlapped its columns: the column sizes its border box, so a flat 230px
basis left only 198px of content box while the slot inside was a fixed
320px. The column is now 262px (the card plus its 16px of shadow bleed)
and the slot a percentage, which under zoom resolves in its own scaled
space and so tracks the column.

The feature grid's vertical dividers now fade at their ends, which shows on
every page that uses it: benchmarks, cloud, gateway, observability,
openclaw-os and pricing.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Aditya-thesys
Aditya-thesys previously approved these changes Sep 21, 2026
The only conflict was pnpm-lock.yaml, which .gitattributes marks
merge=binary so git will not attempt it. Resolved by taking main's
lockfile and regenerating with pnpm install --lockfile-only, which keeps
every one of main's pins and adds this branch's one dependency on top.

The regenerated lockfile differs from main's by +60 / -0 lines: the
shaders entry for docs and its dependency tree. shaders, typegpu,
tinyest, tsover-runtime and typed-binary all resolve to the same
versions this branch was built and tested against; 3.2.470 is also
still the latest shaders on npm, so nothing drifted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Aditya-thesys
Aditya-thesys previously approved these changes Sep 22, 2026
…sing CTA (#1211)

* feat(observability): rework the page's diagram, features and closing CTA

The page was a set of sections that each looked right on a wide screen and
came apart on a phone. This reworks the argument it makes and fixes what
phone width did to it.

- The trace gap diagram was two panels of badges, status marks and per-row
  descriptions. It is now one card split down the middle: a heading pair
  per side and four plain rows, each row opposite the one it answers. The
  halves share a height and their lists use equal rows, so line n on the
  left stays level with line n on the right whichever wraps.
- The trust block moved from below the setup steps to directly under
  Insights, where the feature flow ends on what the product learns from a
  session and a reader starts wondering where that data goes. Setup keeps
  the grey; trust now sits on the page.
- The closing CTA is a centred column rather than a title and a field on
  opposite sides of 1200px: offer, title, field, pricing. Its "View
  pricing" is now the same tertiary Button the trust section uses.
- Feature cards on a phone read heading, image, then description. The
  orders are absolute rather than relative, because the cards alternate
  which side the art takes on desktop and a relative rule would have given
  odd and even cards different mobile orders.
- The feature shots kept their artwork's own 1.8 ratio on a phone. A 4/3
  stage was cutting a quarter of the width off every screenshot, straight
  through the UI, and the per-image object-position offsets underneath it
  were chasing that crop rather than removing it.
- The setup snippet renders at its desktop measure and scales down, so the
  code keeps its proportions instead of losing its right-hand half.

Three shared Cloud files gain opt-in hooks rather than new behaviour:
--cloud-code-mobile-zoom, --cloud-code-mobile-padding-block and
--cloud-setup-content-display all default to what they do today, so
/cloud/gateway is unchanged. Verified: its panel still has zoom 1 and its
steps still precede the code.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(observability): re-encode the feature art, same pixels at 1/7 the size

The WebP conversion behind the new artwork ran a lossless encode at minimal
compression effort and carried the source ICC profile through into a VP8X
container. Nothing was compressed to a lower quality; the encoder simply
did not try. The fourteen files landed at 9.03 MB against the 3.11 MB they
replaced.

Re-encoded with `cwebp -z 9 -metadata none`. Lossless at maximum effort,
which on flat UI screenshots with an alpha channel beats lossy -q 90 on
size as well as on fidelity, so there is no reason to take the quality hit.

  before this branch   3.11 MB
  as committed         9.03 MB
  now                  1.27 MB

Every file verified: decoded both versions to PNG and compared SHA-256.
Identical after decode, so this is a pure size change with no visual diff.
insights keeps the genuine 1440 -> 2880 upgrade this branch gave it.

Reproduce:

  for f in docs/public/openui-observability/*.webp; do
    dwebp -quiet "$f" -o /tmp/r.png &&
    cwebp -quiet -z 9 -metadata none /tmp/r.png -o "$f"
  done

Separate from this: the <Image> elements in FeaturesSection still set
`unoptimized`, so the sizes hint beside it is inert and a phone pulls the
full 2880px file into a ~343px slot.

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Aditya-thesys <aditya@thesys.dev>
@Aditya-thesys
Aditya-thesys enabled auto-merge (squash) September 22, 2026 08:49
@Aditya-thesys
Aditya-thesys merged commit 8d33839 into main Sep 22, 2026
4 checks passed
@Aditya-thesys
Aditya-thesys deleted the home-white-background branch September 22, 2026 08:53

This branch was successfully deployed

1 active deployment
Preview — f7ec9423 Deployed Sep 22, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants