Inverted Out Of Hours Panel

Out of hours

Somebody reads it, even at ten past seven on a Monday

The on-call rota starts before clinics do and the person who answers can also fix it. There is no tier one, because there is no tier two to escalate to.

Engineers on the rota

Support shifts are taken by the people who wrote the code, founders included. Nobody reads from a script.

Before the doors open

Cover starts at 07:00 UK, half an hour before the earliest clinic on the platform takes its first member.

Written up afterwards

Anything that broke gets a public note with the date on it, whether or not you were the one who noticed.

O

On call

Replying

Booking page is slow at Kingsway this morning.
Seeing it. Rolling back the 06:40 deploy now.
Back to normal, thank you.
About this block

Inverted Out Of Hours PanelPRO

A support section built as one dark panel, with a light heading, three hairline promises about who answers, two actions, and a bordered column floating a live on-call conversation.

Chat27: Inverted Out Of Hours Panel

A support section built as one dark panel, with a light heading, three hairline promises about who answers, two actions and a bordered column floating a live on-call conversation.

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/chat27?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

This installs the block to components/beste/block/chat27.tsx, the chat33 thread piece it floats in the right column (installed to components/beste/piece/chat33.tsx), and the badge23 and button21 components it uses for the eyebrow and the actions.

Quick start

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

tsx
import { Chat27, chat27Demo } from "@/components/beste/block/chat27";

export default function SupportPage() {
  return <Chat27 {...chat27Demo} />;
}

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

tsx
import { Chat27 } from "@/components/beste/block/chat27";
import { Chat33 } from "@/components/beste/piece/chat33";

export default function SupportPage() {
  return (
    <Chat27
      badge={{ label: "Out of hours" }}
      heading="Somebody reads it, even at ten past seven on a Monday"
      description="The on-call rota starts before clinics do and the person who answers can also fix it."
      promises={[
        {
          title: "Engineers on the rota",
          description: "Support shifts are taken by the people who wrote the code.",
        },
        {
          title: "Before the doors open",
          description: "Cover starts at 07:00 UK, half an hour before the earliest clinic.",
        },
      ]}
      buttons={[
        { label: "See the status page", href: "/status" },
        { label: "Read an incident write-up", href: "/incidents" },
      ]}
      media={
        <Chat33
          name="On call"
          status="Replying"
          items={[
            { from: "them", text: "Booking page is slow at Kingsway this morning." },
            { from: "me", text: "Seeing it. Rolling back the 06:40 deploy now." },
          ]}
        />
      }
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow at the top of the panel, retoned for the dark surface
headingstringSection heading on the panel
descriptionstringSupporting paragraph, capped at max-w-md
promisesPromiseItem[][]Hairline rows about who answers and when
buttonsActionLink[][]Actions, first solid and the rest outlined
mediaReactNodeLive asset in the right column, chat33 in the demo
classNamestringExtra classes for the outer section
ts
type ActionLink = {
  label: string;
  href: string;
};

type PromiseItem = {
  title: string;
  description: string;
};

Behavior notes

  • The panel is bg-foreground inside the normal page container, so it reads as an inverted card rather than a full-bleed band. Every text token inside is a fixed background value, since the surface is fixed.
  • Badge23 is retoned inline with border-background/30 text-background/70, since the component's own tones assume a light surface.
  • Hairlines use border-background/20 rather than border-border. On an inverted surface the standard border token is close to invisible.
  • Button tones are positional and not overridable: the first is primary, later ones are outline plus an added border-background/30 so they read against the dark panel.
  • The panel is a lg:grid-cols-5 split, three columns of copy against two of media. Below lg it stacks and the divider flips from lg:border-l to border-t, so the seam always runs across the join.
  • The media column has no tile and no backdrop: the piece sits directly on the dark panel, which is why it keeps its own card surface.
  • PromiseItem is named rather than being called Promise, since that would shadow the global Promise type inside the installed file.

More Chat blocks

View all Chat
PRO

chat23

Messaging Overview Split

A messaging section pairing a light heading, a hairline table of response figures, and two actions with an image tile that floats a live conversation thread.

PRO

chat31

Two Sides Of One Conversation

A messaging section splitting a hairline matrix between the staff view and the member view, each half floating its own live asset above a title and a list of what that side gets.

PRO

chat24

Support Channels Grid

A support section listing four linked contact channels as a hairline matrix, each with an icon tile, its response time, and its hours, beside a soft panel floating a live card for whoever is on shift.

PRO

chat25

Ask Your Data Spotlight

An assistant section where question pills swap the image tile beneath them, each floating a live answer card that cites the records it read, closing on three hairline guarantees and one action.

PRO

chat22

Member Inbox And Thread

A two-pane messaging panel: a selectable conversation list with unread dots on the left, and the chosen thread on the right with member and staff bubbles, timestamps, and a composer row.

PRO

chat28

Conversation Handover Trail

One member conversation walked through as timestamped hairline rows inside a bordered panel, each naming what happened and either the person who picked it up or the step that ran on its own.