Gatherings
Six hours, mostly outdoors, mostly silent. Lunch is provided and talking is optional.
An evening workshop on rest for people who cannot sit still. Practical, a little uncomfortable.
A morning for anyone in the middle of a leaving: a job, a home, a person.
Along the river, then soup. The one gathering where nobody is asked anything.
An events list under a serif heading that settles in word by word beside the intro and a pill action: ruled rows that blur in one by one, each with a large serif day and small-caps month, a serif title and description, place and availability, and a reserve link.
A season of gatherings as a ruled schedule: each row lines up a serif date, a title and description, the place and how many spaces are left, and a reserve link whose arrow lifts on hover.
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/event103?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/event103?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/event103.tsx plus the button22 sliding-marker pill and the text1 word stagger it uses.
The installed file exports event103Demo alongside the block: the exact props behind the preview above. Spread it to get a working events list in one line.
import { Event103, event103Demo } from "@/components/beste/block/event103";
export default function Page() {
return <Event103 {...event103Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Event103 } from "@/components/beste/block/event103";
export default function Page() {
return (
<Event103
eyebrow="Gatherings"
heading="A few days a season, with other people in the room."
description="Small groups, long silences, no sharing circle unless you want one."
button={{ label: "All upcoming dates", href: "/events", tone: "outline" }}
gatherings={[
{
day: "14",
month: "Oct",
title: "A quiet day",
description: "Six hours, mostly outdoors, mostly silent.",
place: "Sintra hills",
availability: "4 places left",
href: "/events/quiet-day",
},
]}
labels={{ reserve: "Reserve a place" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
eyebrow | string | – | Small-caps line above the heading |
heading | string | – | Section heading, rendered as an h2 through Text1 |
description | string | – | Short intro in the narrow right column |
button | ActionButton | – | Pill action under the intro |
gatherings | Gathering[] | [] | Schedule rows, in the order given |
labels | { reserve?: string } | {} | Wording of the reserve link; the link is dropped when unset |
className | string | – | Extra classes for the outer <section> |
type Gathering = {
day: string;
month: string;
title: string;
description: string;
place: string;
availability: string;
href: string;
};
type ActionButton = {
label: string;
href: string;
tone?: "primary" | "light" | "dark" | "outline";
};"14" and "Oct" render exactly as given with no locale surprises and no formatting library.tabular-nums, so a column of dates stays optically aligned whatever the digits are.14 Oct; from md it stacks into a serif numeral above its month. The same two strings, two arrangements, no duplicated markup.availability is deliberately a free string, so "4 places left", "Waiting list" and "Sold out" all read naturally without the block needing to know about capacity.ol with divide-y and a border on both ends, so a schedule stays an ordered list for a screen reader and each added row brings its own rule.md, so the date, the copy, the place and the link land on the same vertical rules down the whole list.event95
A conference agenda whose track pills are derived from the sessions and carry live counts, narrowing a timed list of hairline rows that align the slot, the session, and its speaker and room.
event102
Upcoming sessions as hairline rows, each opening with the date set as a figure, then the session and what it covers, with its seat state and a booking link on the end.
event17
Host profiles with photos, bios, and social media links displayed in a two-column grid. Perfect for introducing conference MCs and event directors.
event94
An events section that opens with a split featured card pairing a photo with date, time, and format lines, then lists the rest of the schedule as rows separated by hairlines, each with a bordered date tile, host meta, seat count, and register action.