Public Incident HistoryPRO

A postmortem archive opening on four hairline reliability figures, then listing every incident as a linked row with a tone-coded severity chip, its duration, the impact, and the fix, beside a live uptime strip.

News42: Public Incident History

A postmortem archive opening on four hairline reliability figures, then listing every incident as a linked row with a tone-coded severity chip, its duration, the impact and the fix, beside a live uptime strip.

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

Base UI flavor

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

This installs the block to components/beste/block/news42.tsx, the indicator14 uptime piece it floats on the tile (installed to components/beste/piece/indicator14.tsx), and the badge23 and button21 components it uses for the eyebrow and the action.

Quick start

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

tsx
import { News42, news42Demo } from "@/components/beste/block/news42";

export default function IncidentsPage() {
  return <News42 {...news42Demo} />;
}

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

tsx
import { Indicator14 } from "@/components/beste/piece/indicator14";
import { News42 } from "@/components/beste/block/news42";

export default function IncidentsPage() {
  return (
    <News42
      badge={{ label: "Incident history" }}
      heading="Everything that has gone wrong, with the date still on it"
      description="We publish incidents whether or not anyone noticed, and we leave them up."
      severityLabels={{ major: "Major", degraded: "Degraded", minor: "Minor" }}
      summary={[
        { value: "4", label: "incidents in the last 12 months" },
        { value: "99.97%", label: "availability across the year" },
      ]}
      incidents={[
        {
          date: "24 April 2026",
          title: "Slow booking pages in the UK region",
          severity: "degraded",
          duration: "41 minutes",
          impact: "The admin app was slow for one region. Member links kept working from cache.",
          fix: "Rolled back the 06:40 deploy and added a query budget to the booking path.",
          href: "/incidents/april-2026",
        },
      ]}
      media={<Indicator14 title="Booking service" uptime="99.97%" range="Last 45 days" />}
      image={{ src: "/backdrops/green.jpg", alt: "Deep green gradient backdrop" }}
      policy="Every incident gets a write-up within 48 hours."
      button={{ label: "Follow the status page", href: "/status" }}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }Eyebrow above the hairline rule, rendered through Badge23
headingstringSection heading in the left column of the header
descriptionstringSupporting paragraph, right-aligned from md up
severityLabelsRecord<Severity, string>The word shown on each severity chip
summarySummary[][]Reliability figures on a hairline row
incidentsIncident[][]The archive, newest first
mediaReactNodeLive asset on the sticky tile, indicator14 in the demo
image{ src: string; alt: string }Backdrop behind the media tile
policystringWrite-up and credit policy under the tile
button{ label: string; href: string }Outline status page action
classNamestringExtra classes for the outer section
ts
type Severity = "major" | "minor" | "degraded";

type ActionLink = {
  label: string;
  href: string;
};

type Incident = {
  date: string;
  title: string;
  severity: Severity;
  duration: string;
  impact: string;
  fix: string;
  href: string;
};

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

Behavior notes

More News blocks

View all News
PRO

news36

Press Coverage List

A press section built around a soft panel holding the standout quote and its publication, followed by hairline coverage rows that align publication, headline, and date, and a press kit action to close.

PRO

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.

PRO

news28

Data Statistics Dashboard

Data journalism style cards with animated numbers, change indicators, progress bars, and key statistics.

PRO

news5

News Timeline

Vertical news timeline with timestamps, breaking news indicators, and optional article images.

PRO

news40

Monthly Digest

A monthly round-up grouped into what shipped, what broke, and what is still undecided, each entry a linked hairline row, beside a sticky tile floating the month's live figures.

PRO

news8

Numbered Headlines

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