React Metrics Band
The hard numbers, counted up as they scroll into view. The animation is decoration — the number is the content, which changes how it has to be built.
- 38×
- Faster key rotation
- 2.4M
- Devices secured
- 99.98%
- Attestation uptime
- 0
- Field security incidents
11 weeks → 2 days
across 31 countries
trailing 12 months
since first shipment, 2023
- 38×
- Faster key rotation
- 2.4M
- Devices secured
- 99.98%
- Attestation uptime
- 0
- Field security incidents
11 weeks → 2 days
across 31 countries
trailing 12 months
since first shipment, 2023
Installation
Props
| Prop | Type | Description |
|---|---|---|
| metrics | ProofMetric[] | { value, label, prefix?, suffix?, decimals?, detail? } |
| durationMs | number | Count-up duration (default 1400) |
| variant | "surface" or "deep" | Card surface, or deep with the electric accent |
The number ships in the HTML
Three decisions follow from treating the value as content rather than as an effect:
- The server renders the final number. State initialises to
target, not to zero. A count-up that starts at 0 in the markup means your proof metrics are invisible to anything that does not execute JavaScript — including, historically, plenty of crawlers and every reader-mode. - Animation starts on intersection, not on mount. An
IntersectionObserverfires once at 35% visibility and then disconnects. Counting up while off-screen wastes the effect entirely. prefers-reduced-motionis honoured. Users who have asked for less motion get the final value immediately. Count-ups are exactly the kind of movement that setting exists for.
The easing is easeOutCubic and the final frame assigns target exactly, so the number always lands on the real value rather than a rounding artefact like 2.39M.
Only publish numbers you can defend
detail exists so each figure can carry its basis — "11 weeks → 2 days", "trailing 12 months". A large number with no baseline is decoration, and a technical buyer reads it as such. Note that the demo includes a zero: 0 field security incidents is a strong claim precisely because it is falsifiable and dated.
New components every week
Get the week's new Kelvin UI components and templates in one short email. No spam, unsubscribe anytime.