Scroll Stack

Cards that pin and pile up as you scroll.

  1. We buy from twelve farms

    Direct relationships, visited every harvest.

    Roasted coffee beans on the steel counter, with the same cobalt cup behind them.
  2. We roast on Tuesdays

    Small batches, shipped within two days.

    A slender stream of coffee pours into the cobalt cup.
  3. You brew it your way

    Guides for every method, from moka pot to cold brew.

    A cobalt ceramic cup of coffee on a brushed steel counter in morning light.
import { ScrollStack } from '@brand-studio/ui';
import { beans, cup, pour } from '@/demos/assets';

export default function ScrollStackDemo() {
  return (
    <div style={{ width: '100%' }}>
      <ScrollStack
        cards={[
          { id: 'source', title: 'We buy from twelve farms', body: 'Direct relationships, visited every harvest.', asset: beans },
          { id: 'roast', title: 'We roast on Tuesdays', body: 'Small batches, shipped within two days.', asset: pour },
          { id: 'brew', title: 'You brew it your way', body: 'Guides for every method, from moka pot to cold brew.', asset: cup },
        ]}
      />
    </div>
  );
}

Installation

pnpm add @brand-studio/ui

Usage

import { ScrollStack } from '@brand-studio/ui';
<ScrollStack cards={cards} />

Accessibility

  • Cards are an ordered list with sticky positioning, so they read in order without JavaScript.
  • Under reduced motion the covered cards do not shrink.

API Reference

PropTypeDefault
cardsStackCard[]
className?string''

Still, Deskhand and Hollis are fictional brands. The coffee photographs are original generated artwork. @brand-studio/ui is MIT licensed.