Skip to content

Faceted background

In review
Live · web

Signature surface: the one canonical faceted field (no controls)

Streaming

Nockerl · session

Faceted background

Content stays fully legible on the field. The facets are a low-contrast tonal grain, never a glow.

One codified look, composed from the shipped NockerlFacetedBackground primitive (the same field as the app-shell, the sidebar, and empty-state): a canvas per-facet tone-wave, the mesh built once per size and re-tinted every frame. Color is token-only, so it themes; changing the signature is a one-place design-system change that propagates to every app.

// Web: React, consuming @dizyx/nockerl-tokens. (Web is the laggard platform;
// this is the canonical API the published @dizyx/nockerl-react package exposes.
// It re-implements the native field on a token-colored <canvas>.)
import { NockerlFacetedBackground } from '@dizyx/nockerl-react';
export function SessionStage() {
return (
<NockerlFacetedBackground>
<h1>Faceted background</h1>
<p>Content renders on the field and stays fully legible.</p>
</NockerlFacetedBackground>
);
}
PropTypeDefaultDescription
reducedbooleanfalseWhen true, freezes to a single composed static frame (prefers-reduced-motion). Resolved by the consumer; not a user-facing control.
barebooleanfalseBARE mode: render just the full-bleed facet field with NO surface chrome (no border, radius, shadow, or 16:9 aspect). Use it for a full-bleed app-shell / stage background. The default is the bordered card-radius signature surface. The MESH + tone-wave are identical either way (one implementation); bare only drops the chrome. Positioned absolute inset:0, so the parent must be positioned.
childrenReact.ReactNodeChildren render ON the surface (proving legibility over the live mesh).

Also accepts the native <div> attributes (e.g. onClick, disabled, id, aria-*, data-*), forwarded straight through, plus a forwarded ref.

Cross-platform drift (this surface lives natively in Voice + Android)

The faceted field is canonical on Android (ChatFeedBackground.kt, behind the chat feed) and a faithful Swift port in Voice (FacetBackground.swift). Web is derived: the demo re-implements the exact same mesh on a token-colored <canvas>. Honest divergences:

  • Configurability: all three surfaces are intentionally fixed. The field is a single codified standard, not user-configurable (no intensity / density / speed / tint knobs and no surface variants on any platform). Geometry is private; only Compose exposes a modifier for placement.
  • Cell size: Compose 128.dp vs Swift 130, a small unreconciled constant.
  • Edge hairline: Compose canvasEdge @ 0.05, Swift white @ 0.06. Both should resolve to one canvas-edge token at one alpha.
  • Base tone: both read the chat-bg token (#181B20 dark); the per-facet shift is a neutral per-channel luminance add (no hue, no glow) on all three.