Nine projects a year, kept small enough that the people who pitched the work are the people who draw it.
They spent the first month arguing us out of the thing we asked for. The thing we got instead is still on every bottle, four years later.
Ida Sundqvist
Managing Director, Halden Reserve
The useful conversation is usually the one about what is actually wrong. Bring that and we will tell you whether we are the right studio for it.
We answer every enquiry ourselves, including the ones we turn down.
A monochrome studio home page: a navbar carrying availability and contact details, a split-screen statement hero with a full-height photograph, a ruled project index, an oversized client quote, a booking panel with engagement details, and an oversized wordmark footer.
Composed from 6 blocks. Installing this page installs all of them, plus the pieces and primitives they use.
Built in the Auralis collection.
A monochrome studio home page: a sticky navbar carrying availability and contact details, a split-screen statement hero with a full-height photograph, a ruled project index, an oversized client quote, a booking panel with the engagement details, and an oversized wordmark footer. Six blocks, one install.
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.
npx shadcn add "https://ui.beste.co/page/r/home2?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the page to components/beste/page/home2.tsx and everything behind it: the six blocks it composes (navbar65, hero156, portfolio112, testimonial35, cta78, footer108) and the badge7 and button12 components they use. Nine files, no follow-up installs.
The installed file exports home2Demo alongside the page: the exact props behind the preview above. Spread it to get a working page in one line.
import { Home2, home2Demo } from "@/components/beste/page/home2";
export default function Page() {
return <Home2 {...home2Demo} />;
}Each section is a separate prop, so the usual next step is to keep the demo and replace one section at a time.
import { Home2, home2Demo } from "@/components/beste/page/home2";
export default function Page() {
return (
<Home2
{...home2Demo}
work={{
label: "Selected",
heading: "Nine projects a year, and every one shipped.",
projects: [
{ title: "Halden Reserve", category: "Identity", year: "2026" },
{ title: "Norrland Ferries", category: "Wayfinding", year: "2025" },
{ title: "Fold Quarterly", category: "Editorial", year: "2025" },
],
}}
/>
);
}Every prop is the full prop object of the block that renders that section, so anything the block accepts is accepted here.
| Prop | Type | Default | Description |
|---|---|---|---|
navbar | ComponentProps<typeof Navbar65> | – | Availability, contact details and links |
hero | ComponentProps<typeof Hero156> | – | Split-screen statement beside a full-height photograph |
work | ComponentProps<typeof Portfolio112> | – | Ruled project index |
testimonial | ComponentProps<typeof Testimonial35> | – | One oversized client quote |
cta | ComponentProps<typeof Cta78> | – | Booking panel with engagement details |
footer | ComponentProps<typeof Footer108> | – | Oversized wordmark footer |
className | string | – | Extra classes for the page's outer wrapper |
| Section | Block | Notes |
|---|---|---|
| Navbar | navbar65 | Sticky; carries a status line and an email beside the links |
| Hero | hero156 | Half statement, half photograph, both full height |
| Work | portfolio112 | A ruled list rather than a card grid |
| Quote | testimonial35 | Set at display size, so keep the quote short |
| Booking | cta78 | Already carries its own tinted cards; the page adds no surface |
| Footer | footer108 | Wordmark at full width |
testimonial removes that section entirely rather than rendering an empty one.sticky top-0 z-50 by the page, so it follows the reader down the whole document. It works here because the block carries its own opaque band; a transparent navbar would collide with the headings passing underneath.dark class, which swaps the theme tokens for that subtree. The cards and borders inside the block follow the switch, which they would not do if the section were merely painted a dark colour.bg-muted tint anywhere. The rhythm comes from the hero's photo half and the inverted booking band, which is why an extra tinted section tends to muddy it.navbar65
Two-tier navbar — a top strip carries an availability badge with a live dot and utility links, over a main row with an oversized wordmark, nav and pill CTA.
hero156
Edge-to-edge split hero: a dark half carries the statement, paragraph, outline pill CTA and a ruled detail row, while the other half is a full-height photograph with a pill caption in its corner.
portfolio112
Editorial project index of ruled rows — padded numeral, project name, client and year, with a floating thumbnail revealed on hover.
testimonial35
A single dramatic pull-quote with a decorative mark, centered above a rounded avatar, name, and role.