Skip to content
All Taste components

Features

Features — how it works in 3 steps

A numbered 1-2-3 walk-through joined by a dashed line, each step with a small picture of what happens.

centered heading · 3 numbered steps · dashed connector · mini picture per step · vertical timeline on small screens

How it works

Paid in three steps, not thirty emails

  1. 1

    Add your client

    Name, email and currency. Fernbill remembers the rest for next time.

  2. 2

    Send the invoice

    Your branding, a pay link and a due date — out in under a minute.

  3. 3

    Get paid

    Reminders go out until it's paid. The money lands in two working days.

const steps = [
  { title: "Add your client", text: "Name, email and currency. Fernbill remembers the rest for next time.", example: { label: "Kaveri Foods", tag: "INR" } },
  { title: "Send the invoice", text: "Your branding, a pay link and a due date — out in under a minute.", example: { label: "INV-1042 · $3,450", tag: "Sent" } },
  { title: "Get paid", text: "Reminders go out until it’s paid. The money lands in two working days.", example: { label: "Payout to your bank ••42", tag: "$3,450" } },
];

export function FeaturesSteps() {
  return (
    <section aria-labelledby="steps-title" className="bg-bg font-sans">
      <div className="mx-auto max-w-6xl px-4 py-16 sm:px-6 lg:py-24">
        <div className="mx-auto mb-12 max-w-2xl text-center">
          <p className="text-[13px] font-medium text-primary">How it works</p>
          <h2 id="steps-title" className="mt-3.5 text-balance text-3xl font-semibold tracking-tight text-fg sm:text-4xl">Paid in three steps, not thirty emails</h2>
        </div>
        <ol className="grid gap-7 md:grid-cols-3 md:gap-8">
          {steps.map((s, i) => (
            <li
              key={s.title}
              className="relative grid content-start gap-2.5 pl-[60px] md:pl-0
                before:absolute before:bottom-[-24px] before:left-5 before:top-12 before:border-l before:border-dashed before:border-border-strong
                last:before:hidden md:before:bottom-auto md:before:left-[52px] md:before:right-[-20px] md:before:top-5 md:before:border-l-0 md:before:border-t"
            >
              <span className="absolute left-0 top-0 grid size-10 place-items-center rounded-full bg-primary text-[15px] font-semibold text-primary-fg ring-[6px] ring-primary/15 md:relative md:mb-2.5">
                {i + 1}
              </span>
              <h3 className="text-base font-semibold tracking-tight text-fg">{s.title}</h3>
              <p className="text-pretty text-[14.5px] leading-relaxed text-fg-muted">{s.text}</p>
              <div aria-hidden className="mt-3 flex items-center justify-between gap-3 rounded-lg border border-border bg-surface p-3.5 text-[12.5px] text-fg">
                <span className="truncate">{s.example.label}</span>
                <span className="rounded-full bg-primary-soft px-2 py-0.5 text-xs font-medium text-primary-soft-fg">{s.example.tag}</span>
              </div>
            </li>
          ))}
        </ol>
      </div>
    </section>
  );
}

The code uses the Taste Tailwind preset. Make yours on the Taste page with Export my system.