Staaarter

Before After Results

A testimonial card built around a measurable before/after result: two stat callouts sit side by side above the quote, connected by an arrow, so the improvement is the first thing a reader sees before the customer's own words back it up.

By Staaarter Team
Testimonials
Docs
Live preview

Docs

Installation

A real shadcn registry command, not a copy-paste stand-in: it fetches this block plus its avatar, avatar-initials dependencies and any missing npm packages, and installs them straight into your project.

npx shadcn add https://staaarter.com/r/before-after-results.json

Prefer not to use the CLI? Copy the source from the Code toggle above into src/components/blocks/testimonials/testimonial14.tsx instead.

Usage

The file also exports testimonial14Demo, the exact props behind the preview above. Spread it to get a working section in one line, then replace it with your own data.

import { Testimonial14, testimonial14Demo } from "@/components/blocks/testimonials/testimonial14";

export default function Page() {
  return <Testimonial14 {...testimonial14Demo} />;
}

Props

PropTypeDefaultDescription
headingstringundefinedOptional heading above the card.
beforeMetricPointnoneThe before-state label and value, e.g. { label: "Manual reconciliation", value: "2 hrs/week" }.
afterMetricPointnoneThe after-state label and value shown next to before.
quotestringnoneThe customer quote below the stat pair.
authorPersonnoneName, role, and optional avatar of the person quoted.
classNamestringnoneExtra classes for the outer section element.

Types

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

type Person = {
  name: string;
  role: string;
  avatar?: { src: string; alt: string };
};

Behavior notes

  • Fully static/decorative: this is a Server Component with no event handlers or client state.
  • The arrow between the before/after stats is a decorative lucide ArrowRight icon marked aria-hidden; the actual before/after relationship is conveyed in text via the stat labels, not just the icon.
  • Avatar renders a real photo when author.avatar.src is provided and falls back to initials via initialsFromName otherwise, same pattern as the About category.