Sharingan

Section · scroll

Bento assemble

Bento tiles fly in from around the grid and lock into place as the page scrolls; their figures count up as they land, and a play badge turns with the scroll.

Why Upwind

Why founders pick us

A small senior team, one plan across every channel, and numbers you can check every Monday.

    • Maya, lifecycle lead
    • Kofi, paid media
    • Priya, product analytics
    • Jonas, SEO

    40

    growth specialists

    Paid, lifecycle, product and SEO, all in one room.

  • A smiling man in a white t-shirt resting his chin on his handWeekly calls
  • 1,001

    experiments run

  • 82%

    of clients grow within a quarter

  • One plan, every channel

    Ads, emails and onboarding pull the same way, with one owner for each number.

  • A smiling woman with long brown hair, her hand at her chin
  • Live

    A dashboard you can read

    Every test, its cost and what it brought in, updated each morning.

  • $4.2M

    raised by clients last year

Bento assemble

Bento tiles fly in from around the grid and lock into place as the page scrolls; their figures count up as they land, and a play badge turns with the scroll.

Use when: A "why us" block with a few strong figures, faces and short claims: agencies, studios, SaaS.

DOM and GSAP (ScrollTrigger, Flip), every browser · pinned for about 1.8 screens

npx shadcn@latest add @sharingan/bento-assemble

First time? Add the @sharingan registry to your project: getting started. The CLI also installs gsap, used under GSAP’s own no-charge licence.

Add ?motion=final or ?motion=off to the address for the version without scroll motion; phones below 768 px get it too, with short reveals.

Props

content what the section says, real text in the DOM

Bento assemble content
NameTypeDefaultDescription
eyebrowstring (≤ 48 chars)—A short kicker above the headline.
headline *string (4–60 chars)—The section's headline, 2–8 words.
textstring (≤ 200 chars)—One or two sentences beside the headline.
badgeobject—A round play button, ringed by its label, that turns with the scroll.
label *string (4–40 chars)—Set in a circle around the play button.
href *string (≥ 1 chars)—
tiles *object[] (3–10)—The tiles, in reading order. Seven fill a 4 × 3 grid with one large, one tall and two wide tiles.
size"small" | "wide" | "tall" | "large""small"small 1×1, wide 2×1, tall 1×2, large 2×2, on a four-column grid.
tone"paper" | "accent" | "accent-2" | "photo""paper"The tile's colour; `photo` fills it with its image.
figurestring (≤ 12 chars)—A figure that counts up as the tile lands: 40, 82%, $1.2M, 1,001.
titlestring (≤ 60 chars)—
textstring (≤ 140 chars)—
labelstring (≤ 32 chars)—A small pill over the tile's corner.
imageobject—The tile's photo (tone `photo`), or a small picture beside its text.
src *string (≥ 1 chars)—
alt *string (4–160 chars)—What the image shows, for screen readers.
avatarsobject[] (≤ 6)—Faces set in a row of overlapping circles.
src *string (≥ 1 chars)—
alt *string (4–160 chars)—What the image shows, for screen readers.

config how it moves; attributes on the Web Component

Bento assemble config
NameTypeDefaultDescription
lengthnumber (0.8–3)1.8How long the section stays pinned, in screen heights.
spreadnumber (0–1.2)0.55How far out the tiles start, as a share of their distance from the grid's centre.
countbooleantrueFigures count up as their tile lands.
accentstring (≥ 1 chars)"#ee8a7b"The `accent` tiles, the pills and the badge.
accentAltstring (≥ 1 chars)"#b9ccb1"The `accent-2` tiles.

The same section as a Web Component

Section · scroll

<sg-bento-assemble>

The same engine as a Web Component, driven by attributes, on the page’s own HTML.

<sg-bento-assemble>

Plain HTML tiles marked with data-sg-tile, a blue and butter palette, tiles that start further out.

  • 2,400

    Figures with commas

  • A young woman with blonde hair smiling
  • 64%

    and percentages

  • 3.5x

    and decimals

  • Attributes only

    accent, accent-alt, spread, length and count.

  • No framework

    The ring is drawn from the badge's label.

Sharingan is made by Dilane Kombou.

Open source under the MIT licence.