Announcement Story

Announcement

14 May 2026 · Product

Four clinics can now share one waiting list

Multi-site capacity sharing is out of testing and on every plan. Three practices ran it for eleven weeks before we shipped it, and two of them made us change it first.

A healthcare professional smiling in a bright clinic
Bramble Health ran the first shared waiting list across three sites in March.

Until now a group running four clinics ran four waiting lists, which meant a cancellation at one site was invisible to the receptionist at another. The practical result was an hour a day of ringing round, and members waiting for an opening that existed eleven miles away.

Capacity is now modelled at group level while rooms, opening hours, and rules stay per site. When a slot is cancelled anywhere, the offer goes to the whole list in order, and whoever confirms first takes it. Nobody rings round.

The part we changed after testing: the first version offered slots across every site by default, and two practices told us that was wrong for members without a car. Site preference is now something the member sets, and it is respected before distance is.

Available on
Every plan, no extra charge
Tested by
3 practices, 11 weeks
Sites supported
No limit
Migration needed
None, it is a setting
About this block

Announcement StoryPRO

A single announcement laid out like an article, with a standfirst, a full-bleed captioned photo band, a reading column, and a sticky rail carrying the key facts and related entries.

News38: Announcement Story

A single announcement laid out like an article, with a standfirst, a full-bleed captioned photo band, a reading column and a sticky rail carrying the key facts and related entries.

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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/news38?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/news38?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/news38.tsx plus the badge23 and button21 components it uses for the eyebrow and the actions.

Quick start

The installed file exports news38Demo alongside the block: the exact props behind the preview above. Spread it to get a working story in one line.

tsx
import { News38, news38Demo } from "@/components/beste/block/news38";

export default function AnnouncementPage() {
  return <News38 {...news38Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { News38 } from "@/components/beste/block/news38";

export default function AnnouncementPage() {
  return (
    <News38
      badge={{ label: "Announcement" }}
      kicker="14 May 2026 · Product"
      heading="Four clinics can now share one waiting list"
      standfirst="Multi-site capacity sharing is out of testing and on every plan."
      image={{ src: "/news/clinic.jpg", alt: "A clinician in a bright clinic" }}
      caption="Bramble Health ran the first shared waiting list across three sites in March."
      facts={[
        { label: "Available on", value: "Every plan, no extra charge" },
        { label: "Tested by", value: "3 practices, 11 weeks" },
      ]}
      body={[
        "Until now a group running four clinics ran four waiting lists.",
        "Capacity is now modelled at group level while rooms and hours stay per site.",
      ]}
      buttons={[
        { label: "Read the release note", href: "/changelog/3-4-0" },
        { label: "See how it works", href: "/product/waiting-list" },
      ]}
      relatedTitle="Around the same time"
      related={[
        {
          kind: "Company",
          title: "We are profitable, and staying at eighteen people",
          date: "02 May 2026",
          href: "/news/profitable",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the kicker, rendered through Badge23
kickerstringDate and category line above the heading
headingstringAnnouncement headline
standfirststringOpening summary, capped at max-w-2xl
image{ src: string; alt: string }Full-bleed band under the standfirst
captionstringCaption under the photograph
factsFact[][]Key facts in the sticky rail
bodystring[][]Article paragraphs in reading order
buttonsActionLink[][]Actions, first solid and the rest outlined
relatedTitlestringHeading above the related entries
relatedRelated[][]Linked nearby announcements
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

type BandImage = {
  src: string;
  alt: string;
};

type Fact = {
  label: string;
  value: string;
};

type Related = {
  kind: string;
  title: string;
  date: string;
  href: string;
};

Behavior notes

  • The container is opened and closed three times: the header sits in a max-w-7xl wrapper, the photo band is a direct child of the section so it runs edge to edge, and the body opens a fresh wrapper. That is what lets one section mix gridded and full-bleed content.
  • The caption sits inside its own max-w-7xl wrapper with matching padding, so it aligns with the text even though the photograph does not.
  • The photograph is a real figure with a figcaption, so the caption stays associated with the image.
  • Body paragraphs are plain strings rendered as separate p elements. There is no markdown parsing, so links or emphasis inside a paragraph need the block edited rather than passed in.
  • Paragraphs use mb-6 with last:mb-0, so spacing lives between them and the column never ends on a stray margin.
  • The rail is lg:sticky lg:top-24 lg:self-start. The self-start is required, otherwise the column stretches to the full row height and sticky has nothing to travel within. Adjust top-24 to match your own fixed header.
  • The reading column is capped at max-w-2xl even though its grid track is wider, so long-form text keeps a readable measure and the extra width becomes breathing room.

More News blocks

View all News
PRO

news29

News Stories

Instagram-style story circles with fullscreen viewer, auto-advance progress bars, channel avatars, and LIVE badges.

PRO

news8

Numbered Headlines

Compact numbered headline list with large index numbers, category badges, and source attribution.

PRO

news39

Inverted Company Announcement

A company update held in one dark panel, pairing a light heading and four supporting figures over a hairline rule with a bordered column that floats a live press contact card.

PRO

news25

Category Hub

News categories grid with story counts, top story preview, and browse links.

PRO

news1

Breaking News Ticker

Animated breaking news ticker with live indicator, category badges, and auto-rotating headlines.

PRO

news35

News Spotlight Theater

Cinematic full-screen news slideshow with animated transitions, auto-play, spotlight effect, and dramatic typography.