Unlock Lifetime Full Access 50% off

Sections / Gems / 3D and WebGL data pieces

Ribbon Ledger

A time series as a lit 3D ribbon. Calm stretches lie flat and face you; where the numbers jump around, the ribbon twists and shows its other, differently coloured side, so volatility is something you see before you read it. Move along it to read any point, drag to turn it, step through it with the arrow keys. The series is also a real table underneath.

Included with Full Access
Open the demo
Ribbon Ledger: six frames of the gem in motion
Kind
3D and WebGL data pieces
Interaction
WebGL · time series · scrub · drag to orbit · keyboard · data table
Dependencies
three 0.180.0
Licence
Licensed with Full Access, for the sites you build; do not resell the gem itself

Formats

  • Webflow (native)
  • Figma (layers)
  • Framer component
  • HTML
  • Prompts for Claude Code, Cursor, Lovable, v0, Bolt

Copy to Webflow pastes a native section with the gem in an Embed inside it. Copy to Figma pastes a frame of its best moment, text and controls as layers. Copy to Framer pastes a component with its options as controls. HTML is one self-contained snippet. Each prompt (Claude Code, Cursor, Lovable, v0, Bolt) carries the exact files, so your agent installs this gem, not a lookalike. With the MCP server, ask your agent for get_section("ribbon-ledger").

Behaviour and accessibility

  • Twist comes from the data: each point's distance from the line between its neighbours, so a smooth series stays flat and a jumpy one turns over.
  • The plot is a labelled slider: arrow keys, Page Up and Down, Home and End read point by point, and each value is spoken with its change on the period before. The whole series is also a visually hidden table.
  • Mouse: hover reads, drag turns the ribbon. Touch: tap reads, and dragging still scrolls the page.
  • The ribbon draws itself in the first time it is seen; drawing stops entirely off screen or in a background tab.
  • With prefers-reduced-motion: no draw-in or idle sway, the marker jumps, and it renders only when something changes.
  • three.js 0.180.0: the vanilla build imports it from jsDelivr, the React build from npm.

Options

OptionTypeDefaultWhat
dataLedgerPoint[]36 built inThe series, oldest first. Two points or more.
titlestring"Monthly recurring revenue"The series' name, shown over the ribbon and used as the table caption.
prefixstring"$"Written before every value ($).
suffixstring"k"Written after every value (k, %, ms).
decimalsnumber0Decimal places shown.
colorLowstring"#5b7cfa"Ribbon colour at the lowest values.
colorHighstring"#7ff0c8"Ribbon colour at the highest values.
colorBackstring"#ff8a5c"Colour of the ribbon's back face, shown where it twists.
backgroundstring"#08090d"Background (any CSS colour, or transparent).
twistnumber1How far volatility twists the ribbon: 1 lets the wildest stretch turn right over. 0 keeps it flat.
orbitbooleantrueDrag to turn the ribbon.
onScrub(index: number) => voidCalled when the point being read changes.