All Taste components
Features
Features — icon list in two columns
A heading column on the left and a two-column list of smaller features, each row ruled off.
1 : 2 split · heading, lead and button · 8 items with line icons · ruled rows · 1 column on small screens
And the rest
The small things that make it feel finished
Details we sweated so your clients see a business, not a spreadsheet.
See every feature- Your own domainInvoices sent from billing@yourstudio.com.
- Client portalEvery invoice and receipt behind one link.
- Quick addCreate a client mid-invoice without leaving it.
- Time to invoiceTurn tracked hours into lines in one click.
- Bank feedsPayments match their invoices on their own.
- Two-step sign inAn extra lock on the account that holds your money.
- Expense receiptsSnap a photo; it's filed against the right job.
- Paid alertsA ping on your phone the moment money lands.
import { Bell, Clock, Globe, Link, Receipt, ShieldCheck, Users, Zap, type LucideIcon } from "lucide-react";
const items: { icon: LucideIcon; title: string; text: string }[] = [
{ icon: Globe, title: "Your own domain", text: "Invoices sent from billing@yourstudio.com." },
{ icon: Users, title: "Client portal", text: "Every invoice and receipt behind one link." },
{ icon: Zap, title: "Quick add", text: "Create a client mid-invoice without leaving it." },
{ icon: Clock, title: "Time to invoice", text: "Turn tracked hours into lines in one click." },
{ icon: Link, title: "Bank feeds", text: "Payments match their invoices on their own." },
{ icon: ShieldCheck, title: "Two-step sign in", text: "An extra lock on the account that holds your money." },
{ icon: Receipt, title: "Expense receipts", text: "Snap a photo; it’s filed against the right job." },
{ icon: Bell, title: "Paid alerts", text: "A ping on your phone the moment money lands." },
];
export function FeaturesIconList() {
return (
<section aria-labelledby="more-title" className="bg-surface font-sans">
<div className="mx-auto grid max-w-6xl gap-7 px-4 py-16 sm:px-6 lg:grid-cols-[1fr_2fr] lg:gap-14 lg:py-24">
<div className="flex flex-col items-start gap-4 lg:sticky lg:top-24 lg:self-start">
<p className="text-[13px] font-medium text-primary">And the rest</p>
<h2 id="more-title" className="text-balance text-2xl font-semibold tracking-tight text-fg sm:text-3xl">The small things that make it feel finished</h2>
<p className="text-pretty text-[14.5px] leading-relaxed text-fg-muted">Details we sweated so your clients see a business, not a spreadsheet.</p>
<a href="/features" className="inline-flex h-9 items-center rounded border border-border-strong bg-bg px-3.5 text-sm font-medium text-fg transition hover:bg-surface-2">See every feature</a>
</div>
<ul className="grid gap-x-10 sm:grid-cols-2">
{items.map(({ icon: Icon, title, text }) => (
<li key={title} className="grid grid-cols-[20px_1fr] gap-x-3.5 gap-y-1 border-t border-border py-5">
<Icon className="row-span-2 mt-0.5 size-5 text-fg" aria-hidden />
<h3 className="text-[15px] font-semibold tracking-tight text-fg">{title}</h3>
<p className="text-sm leading-relaxed text-fg-muted">{text}</p>
</li>
))}
</ul>
</div>
</section>
);
}
The code uses the Taste Tailwind preset. Make yours on the Taste page with Export my system.