Casa Vireo, silk ateliers on Lake Como
Charmeuse, crepe and heavy duchess satin, woven on our own looms and cut by hand for a few couture houses and the brides who find us.
A couture silk house hero over the silk-drape background component: a full-bleed length of emerald silk hangs in deep folds from a few pins, swelling in a slow breeze with real cloth physics and an anisotropic sheen along the weave, while a sweep of the cursor stirs the air so the silk ripples and swings, then settles. A semibold serif headline, an intro, an Arrow Pill and an underline link sit low on the left over a soft shade. Every fabric setting passes through the silk prop.
A full-bleed hero over the silk-drape WebGL component, a length of silk hanging in deep folds from a few pins that swells in a slow breeze with cloth physics and a sheen along the weave, while a sweep of the cursor makes it ripple and swing; a serif headline, an intro and two buttons sit low on the left over a soft shade.
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/hero241?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero241?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero241.tsx plus the silk-drape background and the button23 and button2 buttons it uses.
The installed file exports hero241Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero241, hero241Demo } from "@/components/beste/block/hero241";
export default function Page() {
return <Hero241 {...hero241Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hero241 } from "@/components/beste/block/hero241";
export default function Page() {
return (
<Hero241
eyebrow="Silk ateliers on Lake Como"
heading="Silk that moves before you do."
description="Charmeuse, crepe and heavy duchess satin, woven on our own looms and cut by hand."
buttons={[
{ label: "Book a fitting", href: "/fittings" },
{ label: "Browse the fabrics", href: "/fabrics" },
]}
silk={{ color: "#1f5c4c", backgroundColor: "#07120f", sheen: 0.7, wind: 0.45, pins: 5 }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small line above the heading |
heading | string | – | Serif headline, rendered as the page h1 |
description | string | – | Intro under the heading |
buttons | ActionButton[] | [] | The first renders as a light Button23 arrow pill, the rest as Button2 underline links |
silk | Omit<SilkDrapeProps, "className" | "children"> | – | Forwards the SilkDrape component's props: color, backgroundColor, sheen, lightAngle, stiffness, wind, pins, detail, interactive, paused |
className | string | – | Extra classes for the outer <section> |
type ActionButton = {
label: string;
href: string;
};color for contrast.interactive is on; touch input is ignored so scrolling on a phone does not move the silk.