Fieldwork, an editorial studio for fashion and culture
Art direction, photography and print for brands that would rather be looked at than scrolled past. Twelve years, four hundred covers and counting.
A split hero for an editorial studio built on the counter-columns component: on the right, a wall of photographic prints tipped back in perspective, its tall columns drifting endlessly in opposite directions and bleeding off the top and bottom of the frame. Scrolling the page pushes the columns, hovering slows them almost to a stop and the wall leans toward the cursor. On the left, a sentence-case eyebrow, a large semibold headline, an intro, an Arrow Pill and an underline link. On phones the wall becomes a band under the copy. Every wall setting passes through the wall prop, and reduced motion shows a still, staggered wall.
A split hero with a large headline, an intro, an Arrow Pill and an underline link on the left and, on the right, a counter-columns wall of photographic prints tipped back in perspective whose tall columns drift endlessly in opposite directions, pushed by page scroll, slowed by hover and leaning toward the cursor.
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.
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
npx shadcn add "https://ui.beste.co/r/hero255?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero255?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero255.tsx plus the counter-columns component and the button23 and button2 buttons it uses.
The installed file exports hero255Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero255, hero255Demo } from "@/components/beste/block/hero255";
export default function Page() {
return <Hero255 {...hero255Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero255 } from "@/components/beste/block/hero255";
export default function Page() {
return (
<Hero255
eyebrow="Fieldwork, an editorial studio for fashion and culture"
heading="Pictures people keep."
description="Art direction, photography and print for brands that would rather be looked at than scrolled past."
buttons={[
{ label: "Start a project", href: "/contact" },
{ label: "See the work", href: "/work" },
]}
wall={{
images: [
{
src: "https://images.unsplash.com/photo-1509631179647-0177331693ae?w=900&q=80",
alt: "A model in wide striped trousers leaning on a teal wall",
},
{
src: "https://images.unsplash.com/photo-1485968579580-b6d095142e6e?w=900&q=80",
alt: "A woman in a dark check coat walking down a city street",
},
{
src: "https://images.unsplash.com/photo-1490750967868-88aa4486c946?w=900&q=80",
alt: "Orange poppies against a clear blue sky",
},
],
columns: 3,
tilt: 0.6,
gap: 16,
fade: 0.16,
}}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Muted line above the headline |
heading | string | – | Headline, rendered as the page h1 |
description | string | – | Intro under the headline |
buttons | ActionButton[] | [] | The first renders as an Arrow Pill (Button23), the rest as underline links (Button2) |
wall | Omit<CounterColumnsProps, "className"> | – | Forwards the CounterColumns props from the counter-columns component, including the required images plus columns, speed, tilt, gap, fade, interactive and paused |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};
type CounterColumnsImage = {
src: string;
alt: string;
};wall is set with at least one image; fewer images than the columns need are repeated, and the loop closes without a visible jump at any size.md the wall is absolutely placed over the right 56% of the section, full height, with a 128px gradient from the background color softening its inner edge; the copy is capped at 40% of the width.26rem tall under the copy and shows at most two columns.interactive on, page scroll pushes the columns and the push eases away, hovering slows the wall almost to a stop, and the plane leans toward the cursor.md.