An exhibition page for a working studio: a navbar running the visiting details as a marquee, a framed poster hero, a salon wall hang with a lightbox, an archive ledger of works by year, a visiting FAQ, a framed closing invitation and a footer showing whether the room is open right now.
Composed from 7 blocks. Installing this page installs all of them, plus the pieces and primitives they use.
Built in the Auralis collection.
An exhibition page for a working studio: a navbar running the visiting details as a marquee, a framed poster hero, a salon wall hang with a lightbox, an archive ledger of works by year, a visiting FAQ, a framed closing invitation, and a footer showing whether the room is open right now. Seven 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/exhibition1?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the page to components/beste/page/exhibition1.tsx and everything behind it: the seven blocks it composes (navbar62, hero155, gallery12, gallery17, faq76, cta71, footer118) and the button12 and badge7 components they use. Ten files, no follow-up installs.
The installed file exports exhibition1Demo alongside the page: the exact props behind the preview above. Spread it to get a working page in one line.
import { Exhibition1, exhibition1Demo } from "@/components/beste/page/exhibition1";
export default function Page() {
return <Exhibition1 {...exhibition1Demo} />;
}Each section is a separate prop, so the usual next step is to keep the demo and replace one section at a time.
import { Exhibition1, exhibition1Demo } from "@/components/beste/page/exhibition1";
export default function Page() {
return (
<Exhibition1
{...exhibition1Demo}
navbar={{
brand: "Room One",
marquee: [
"Open Wednesday to Friday, 16:00 to 18:00",
"Entry is free and needs no booking",
"Ground floor, step free",
],
cta: { label: "Book a visit", href: "/visit" },
}}
/>
);
}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 Navbar62> | – | Visiting details, run as a marquee |
hero | ComponentProps<typeof Hero155> | – | Framed poster hero |
hang | ComponentProps<typeof Gallery12> | – | Salon wall hang with a lightbox |
archive | ComponentProps<typeof Gallery17> | – | Archive ledger of works by year |
faq | ComponentProps<typeof Faq76> | – | Visiting questions |
cta | ComponentProps<typeof Cta71> | – | Framed closing invitation |
footer | ComponentProps<typeof Footer118> | – | Opening hours, and whether the room is open now |
className | string | – | Extra classes for the page's outer wrapper |
| Section | Block | Notes |
|---|---|---|
| Navbar | navbar62 | Sticky; the marquee carries the visiting details |
| Hero | hero155 | A framed poster rather than a full-bleed photograph |
| Hang | gallery12 | Salon layout; the lightbox lives inside the block |
| Archive | gallery17 | Given bg-muted/50 by the page, separating it from the hang |
| Questions | faq76 | Visiting practicalities, not sales objections |
| Invitation | cta71 | Framed to echo the hero |
| Footer | footer118 | States the opening state in words |
archive removes that section entirely rather than rendering an empty one.sticky top-0 z-50 by the page, so the visiting details stay on screen through the whole hang. That is the reason it is sticky here: the marquee is information a visitor needs at the end of the page, not branding.className="bg-muted/50" on the archive after spreading archive, so a className passed inside that prop is overridden. It is the only tint on the page, and it exists to keep two galleries in a row from reading as one.dark band on this page. The work supplies the contrast, and inverting a section would compete with the photographs rather than frame them.gallery12 hangs the current show, gallery17 lists the archive. They are different jobs and the tint is what says so.navbar62
Navbar with a dark scrolling announcement bar on top — looping links that pause on hover and fade at the edges — over a clean wordmark row with a pill CTA.
hero155
Full-bleed photographic hero printed inside an inset hairline frame, with the eyebrow and availability line on the top rule, an oversized statement in the middle, and notes, a pill CTA and an image credit anchored along the bottom.
gallery12
Works of different sizes hung on one centre line inside a matted wall panel, each with its own label, opening a viewer that shows the piece in a mount beside a museum wall label of medium, dimensions and year.
gallery17
Collection intake listed year by year with a summary beside each set of works, opening a viewer that scrolls rather than steps: every acquisition is a snap section and the header counter follows whichever fills the screen.
faq76
A two-column editorial FAQ pairing a sticky eyebrow, oversized heading, short note, and contact CTA on the left with a ruled, index-marked accordion of questions on the right.