Sharingan

Behind the work

Curious what else we've made?

Brand identities, packaging and product shoots from the studio, for small makers and the shelves they want to win.

See all projects
A hand holds a small black camera against a pink wall
A glass of soda with ice and a striped straw next to a green bottle
A turquoise teapot pours red tea into a white cup on blue
Jars of strawberry jam behind fresh strawberries on a green background
Mint headphones lying across a mint and pink background
A glass of iced tea with mint and lemon on a café table
The silhouette of a person holding a soda bottle against a purple sky
A black quilted bag, sunglasses, a watch and lipstick laid out on white
A black watch with a white face on a wrist
  1. #01Strategy & planning
  2. #02Design & development
  3. #03Launch & growth
  4. #04Ongoing support

Curve reel

Project cards on the inside of a curved wall: the middle sinks back, the edges come forward, and the reel turns slowly while numbered steps light up as the cards pass.

Use when: Studios, agencies and portfolios with eight or more strong images, and a process worth naming in three to five steps.

Engine: DOM (HTML, SVG, CSS 3D), every browser

Render: …

npx shadcn@latest add @sharingan/curve-reel

First time? Add the @sharingan registry to your project: getting started.

Add ?motion=final to the address for the repeatable still frame, or ?motion=off for the reduced-motion version.

Props

content what the hero says, real text in the DOM

Curve reel content
NameTypeDefaultDescription
eyebrowstring (≤ 40 chars)—A short kicker in the accent colour.
headline *string (8–60 chars)—The promise in one or two lines, 3–8 words.
subheadlinestring (≤ 160 chars)—One sentence under the headline.
ctaobject—
label *string (2–28 chars)—Action verb first, 1–4 words.
href *string (≥ 1 chars)—
projects *object[] (4–16)—The cards of the reel, in the order they pass. When they are too few to close the loop, the reel repeats them.
src *string (≥ 1 chars)—The image, portrait (10:13 or 4:5 work best).
alt *string (4–160 chars)—What the image shows, for screen readers.
title *string (1–40 chars)—The project's name, read with the card.
hrefstring—Where the card leads: the case study.
stepsobject[] (≤ 5)—Numbered steps under the reel (#01, #02…); each lights up while its cards pass the middle.
label *string (2–32 chars)—
cardinteger (0–9007199254740991)—The card (by index) that lights this step when it passes the middle. Spread evenly when left out.

config how it looks and moves; attributes on the Web Component

Curve reel config
NameTypeDefaultDescription
curvaturenumber (0–1)0.70 is a flat strip, 1 a deep curved wall: the middle sinks back, the edges come forward.
speednumber (0–120)24How fast the reel turns, in cards per minute; 0 holds it still.
visibleinteger (5–11)7How many cards fit on the arc; more are cut at the edges.
dragbooleantrueDrag or swipe the reel to turn it; it keeps its momentum.
tiltnumber (0–8)3How far the view leans toward the pointer, in degrees.
accentstring"oklch(0.68 0.2 45)"The eyebrow, the step numbers, the button's arrow and the step progress.
stepsbooleantrueShow the numbered steps and light them as the reel turns.
introbooleantrueThe cards start stacked in the middle and open onto the curve.

The same hero as a Web Component

Web Component · no framework

<sg-curve-reel>

The same engine, driven by attributes: a deeper curve, nine cards on the arc, a faster turn, a blue accent. Five photos, repeated to close the loop.

  1. #01Brief
  2. #02Shoot
  3. #03Ship

Sharingan is made by Dilane Kombou.

Open source under the MIT licence.