Skip to content
All Taste components

Features

Features — 3-column icon grid

Six features in a ruled grid of cells, each with an outlined icon, a title and one sentence.

heading row with lead · 6 cells with hairline dividers · 3 → 2 → 1 columns

Everything in one place

The money side of your business, sorted

Six tools that replace the spreadsheet, the reminder emails and the end-of-year panic.

Invoices in a minute

Pick a client, add the lines, send. Your logo and terms are already on it.

Polite reminders

Late clients get a nudge on your schedule, in words you wrote.

Pay links

Card or bank transfer on every invoice, with the money in two days.

Retainers

Monthly clients are billed on the same day, without you lifting a finger.

24 currencies

Bill abroad in their money; see the rate before you send.

Year-end exports

Hand your accountant a clean pack of CSVs and PDFs.

import { CreditCard, FileText, Globe, Lock, Mail, Repeat, type LucideIcon } from "lucide-react";

const features: { icon: LucideIcon; title: string; text: string }[] = [
  { icon: FileText, title: "Invoices in a minute", text: "Pick a client, add the lines, send. Your logo and terms are already on it." },
  { icon: Mail, title: "Polite reminders", text: "Late clients get a nudge on your schedule, in words you wrote." },
  { icon: CreditCard, title: "Pay links", text: "Card or bank transfer on every invoice, with the money in two days." },
  { icon: Repeat, title: "Retainers", text: "Monthly clients are billed on the same day, without you lifting a finger." },
  { icon: Globe, title: "24 currencies", text: "Bill abroad in their money; see the rate before you send." },
  { icon: Lock, title: "Year-end exports", text: "Hand your accountant a clean pack of CSVs and PDFs." },
];

export function FeaturesIconGrid() {
  return (
    <section aria-labelledby="features-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="mb-8 grid items-end gap-4 lg:mb-12 lg:grid-cols-[1.1fr_1fr] lg:gap-12">
          <div>
            <p className="text-[13px] font-medium text-primary">Everything in one place</p>
            <h2 id="features-title" className="mt-3.5 text-balance text-3xl font-semibold tracking-tight text-fg sm:text-4xl">
              The money side of your business, sorted
            </h2>
          </div>
          <p className="text-pretty text-base leading-relaxed text-fg-muted">
            Six tools that replace the spreadsheet, the reminder emails and the end-of-year panic.
          </p>
        </div>
        {/* 1px gaps over a border-coloured background draw the hairlines between cells */}
        <div className="grid gap-px overflow-hidden rounded-xl border border-border bg-border sm:grid-cols-2 lg:grid-cols-3">
          {features.map(({ icon: Icon, title, text }) => (
            <div key={title} className="grid content-start gap-2.5 bg-bg p-6 lg:p-7">
              <span className="mb-2 grid size-10 place-items-center rounded border border-border bg-bg text-fg shadow-sm">
                <Icon className="size-[19px]" aria-hidden />
              </span>
              <h3 className="text-base font-semibold tracking-tight text-fg">{title}</h3>
              <p className="text-pretty text-[14.5px] leading-relaxed text-fg-muted">{text}</p>
            </div>
          ))}
        </div>
      </div>
    </section>
  );
}

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