Pick a track to narrow the day. Every session is run by someone who does the job rather than someone who sells the tool.
Thursday 18 June, Bristol
09:00
30 min
Operations
What four practices changed about the first fifteen minutes of the day, and which of those changes stuck after a month.
Elena Rourke, Bramble Health
Main room
09:45
45 min
Operations
A working session on backfill rules, including the two settings that make members feel chased rather than helped.
Maya Coleman, Bramble Health
Room 2
11:00
60 min
Clinical
Template design from a clinician's side, with three real handovers pulled apart in front of the room.
Dr Amelia Frost, Harbour Practice
Main room
13:30
45 min
Clinical
How one group cut the wait without adding clinicians, and the part of it that had nothing to do with software.
Idris Warren, Norwich Care Collective
Room 2
14:30
45 min
Finance
Reconciliation walked through live on real anonymised data, including the reconciliation that fails and why.
Sara Okonjo, Fenwick Group
Room 3
15:30
60 min
Finance
Codes, credits, and the awkward middle where an insurer pays part of something. Bring your worst example.
Tom Ashby and a finance panel
Room 3
16:45
45 min
Operations
The roadmap and the rejections, with the reasoning behind both. Questions throughout rather than at the end.
Priya Nandan
Main room
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.
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.
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/event95?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/event95?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/event95.tsx plus the badge23 and button21 components it uses for the eyebrow and the registration action.
The installed file exports event95Demo alongside the block: the exact props behind the preview above. Spread it to get a working agenda in one line.
import { Event95, event95Demo } from "@/components/beste/block/event95";
export default function AgendaPage() {
return <Event95 {...event95Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Event95 } from "@/components/beste/block/event95";
export default function AgendaPage() {
return (
<Event95
badge={{ label: "The agenda" }}
heading="One day, three tracks, and nothing that is really a sales pitch"
description="Pick a track to narrow the day."
dayLabel="Thursday 18 June, Bristol"
allLabel="Whole day"
sessions={[
{
time: "09:00",
duration: "30 min",
track: "Operations",
title: "The morning huddle, rebuilt",
description: "What four practices changed about the first fifteen minutes of the day.",
speaker: "Elena Rourke, Bramble Health",
room: "Main room",
href: "/agenda/huddle",
},
{
time: "11:00",
duration: "60 min",
track: "Clinical",
title: "Notes people will actually read",
description: "Template design from a clinician's side.",
speaker: "Dr Amelia Frost",
room: "Main room",
href: "/agenda/notes",
},
]}
button={{ label: "Register for the day", href: "/register" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Eyebrow above the hairline rule, rendered through Badge23 |
heading | string | – | Section heading in the left column of the header |
description | string | – | Supporting paragraph, right-aligned from md up |
dayLabel | string | – | Date and place line under the paragraph |
allLabel | string | "All" | Label for the unfiltered pill |
sessions | Session[] | [] | The agenda, in the order it should read |
button | { label: string; href: string } | – | Registration action under the list |
className | string | – | Extra classes for the outer section |
type ActionLink = {
label: string;
href: string;
};
type Session = {
time: string;
duration: string;
track: string;
title: string;
description: string;
speaker: string;
room: string;
href: string;
};Array.from(new Set(sessions.map(session => session.track))), so adding a session with a new track adds a pill automatically, in first-appearance order. Counts are computed the same way.Link elements laid out as a three-track grid from md: time, session, then speaker and room right-aligned. Below md they stack in that same order.tabular-nums, so the left column stays aligned across the day.md:px-4 alongside the hover fill, so the highlight extends slightly past the text on wider screens.border-t, which closes the agenda list rather than leaving it open.button elements with aria-pressed and explicit cursor-pointer, since Tailwind v4 buttons default to cursor: default.