Manifesto Lines

Two wooden boats moored off a white sand beach

A short manifesto

  1. 01

    We would rather listen for an hour than advise for a minute.

  2. 02

    Nobody is a case. Nobody is a category.

  3. 03

    Silence in the room is work, not a gap in it.

  4. 04

    Progress is allowed to look like nothing for a while.

  5. 05

    You decide when we are done, and you can come back.

About this block

Manifesto LinesPRO

A manifesto set as numbered serif lines that each blur in as they reach the viewport, ruled from one another, beside a sticky photograph that drifts inside its frame as the page scrolls, closed by a sliding-marker pill.

About78: Manifesto Lines

A manifesto set as a numbered list: each line arrives on its own as a large serif statement in a ruled row, beside a sticky photograph that drifts inside its frame for the length of the list.

Upgrade to Pro

Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.

Upgrade Now

Installation

Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/about78?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/about78?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/about78.tsx plus the button22 sliding-marker pill it uses.

Quick start

The installed file exports about78Demo alongside the block: the exact props behind the preview above. Spread it to get a working manifesto section in one line.

tsx
import { About78, about78Demo } from "@/components/beste/block/about78";

export default function Page() {
  return <About78 {...about78Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { About78 } from "@/components/beste/block/about78";

export default function Page() {
  return (
    <About78
      eyebrow="A short manifesto"
      lines={[
        "We would rather listen for an hour than advise for a minute.",
        "Nobody is a case. Nobody is a category.",
        "Silence in the room is work, not a gap in it.",
      ]}
      button={{ label: "See the practice", href: "/practice", tone: "dark" }}
      image={{ src: "/photos/lake.jpg", alt: "Morning mist lifting off a still lake below wooded hills" }}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringSmall-caps line above the list
linesstring[][]Manifesto statements, numbered in the order given
buttonActionButtonPill action under the list
image{ src: string; alt: string }Sticky photograph in the left column
classNamestringExtra classes for the outer <section>
ts
type ActionButton = {
  label: string;
  href: string;
  tone?: "primary" | "light" | "dark" | "outline";
};

Behavior notes

  • Lines are numbered from the index and padded to two digits, so the list reads 01, 02, 03 without the numbers being content anyone has to keep in sync when a line is added or removed.
  • Every line shares one flat 0.1s delay rather than a growing stagger, because a list this tall is read one row at a time; an index-scaled delay would leave the last statement waiting seconds after it is already on screen.
  • The rows use a tighter -15% viewport margin than the rest of the section, so a statement settles in once it is properly inside the reading area rather than the moment it clips the bottom edge.
  • The list is an ol with divide-y and a border on both ends, so the rules come from the list itself; adding a line adds a rule, and nothing has to be styled per position.
  • The photograph is md:sticky md:top-28 and drifts between -10% and 10% of its own height against a 1.2 scale, so it stays beside the list for the whole read while still moving; below md the sticky is dropped and it becomes the first block in the stack.
  • This is the one block in the set that does not use text1: the statements are already the largest type on the page and a per-word stagger on five of them in a row would turn reading into waiting.
  • Both parts are optional. Without image the list keeps its column position rather than stretching, and without lines only the eyebrow and the action remain.

More About blocks

View all About
PRO

about82

Band and Figures

An about section built around a wide photograph that drifts inside its frame: a serif heading that settles in word by word above it, then an intro with a sliding-marker pill beside four ruled serif figures that count up as they arrive.

PRO

about79

Founder Letter

An about section written as a letter: a portrait drifting inside its frame on the left, and on the right a serif opening line that settles in word by word, three paragraphs, a ruled signature with the founder's name and role, and a sliding-marker pill.

PRO

about65

Centered Manifesto

Centered manifesto with a very large multi-line statement heading, muted emphasis phrases, a closing line, and a single CTA.

PRO

about75

Practitioner Portraits

A team section: a serif heading that settles in word by word beside the intro and a pill action, then three portrait photographs that drift inside their frames as the page scrolls, each with a serif name, a small-caps role and a short bio.

PRO

about77

The Rooms Grid

A studio tour: a serif heading that settles in word by word beside the intro and a pill action, four photographs of the rooms in an uneven, offset grid that each drift at their own pace as the page scrolls, and a ruled row of visiting details.

FREE

about69

Mission Band With Principles

A company story section that runs a two-column heading over a wide photo band, then sets three founding principles as numbered hairline columns underneath.