Before and After Columns

One line changes the workflow

Thesamerequest,beforeandafter.

Nothing about the way you talk to the agent changes. What changes is where the answer comes from.

Before

The agent improvises

  • Guesses a layout from memory
  • Invents spacing, type and colors each time
  • Forgets the phone view
  • Every page looks like a different site
  • You spend the evening fixing it

After

The agent chooses

  • Searches a library of finished sections
  • Drops one in with your theme applied
  • Responsive and accessible from the first render
  • Every page speaks the same language
  • You spend the evening elsewhere
About this block

Before and After ColumnsPRO

A centred serif headline that settles in word by word, then two columns: a muted panel listing how an agent improvises today and an ink panel listing what it does once the library is installed. Between them, on a hairline, sits the pill that copies the install command on click.

Feature295: Before and After Columns

Two columns that make the same argument twice: what an agent does today in muted paper, what it does after the install in ink, with the command sitting on the hairline between them.

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

Base UI flavor

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

This installs the block to components/beste/block/feature295.tsx plus the text1 word stagger it uses.

Quick start

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

tsx
import { Feature295, feature295Demo } from "@/components/beste/block/feature295";

export default function Page() {
  return <Feature295 {...feature295Demo} />;
}

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

tsx
import { Feature295 } from "@/components/beste/block/feature295";

export default function Page() {
  return (
    <Feature295
      eyebrow="One line changes the workflow"
      heading="The same request, before and after."
      description="What changes is where the answer comes from."
      before={{
        label: "Before",
        title: "The agent improvises",
        items: ["Guesses a layout from memory", "Forgets the phone view"],
      }}
      after={{
        label: "After",
        title: "The agent chooses",
        items: ["Searches a library of finished sections", "Responsive from the first render"],
      }}
      command="npx your-cli@latest"
      copyLabel="Copy command"
      copiedLabel="Copied"
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstring–Small-caps line above the heading
headingstring–Section heading, through Text1
descriptionstring–Paragraph under the heading
beforeColumn–The muted column, listed with minus markers
afterColumn–The ink column, listed with plus markers
commandstring–The install command; clicking the pill copies it
copyLabelstring–Accessible name for the pill in its resting state
copiedLabelstring–Accessible name and live-region text once copied
classNamestring–Extra classes for the outer <section>
ts
type Column = {
  label: string;
  title: string;
  items: string[];
};

Behavior notes

  • The two columns are the same component shape but deliberately not the same surface: paper against ink is what carries the argument before anyone reads a word of it.
  • Minus and plus icons stand in for the usual cross and tick, which keeps the before column from reading as an error state.
  • The plus markers use text-current rather than the accent, because the accent disappears against the ink panel. This is the same trap that hides a coloured icon on any dark surface in the set.
  • The middle column collapses to just the pill below the large breakpoint, where the vertical hairlines above and below it are hidden.
  • The command pill is filled ink so it reads as the hinge between the two columns rather than as part of either one.
  • Columns arrive 0.2 seconds apart with the pill between them, so the eye lands on the problem, then the command, then the outcome.
  • Both columns are optional. Passing only one gives a single list with the pill beside it.

More Feature blocks

View all Feature
PRO

feature281

Three Icon Columns

PRO

feature324

Before and After Restoration

PRO

feature292

Install Ask Ship Steps

Get Pro access