A client wall that sets six greyscale logos in a hairline cell grid, each lifting to full colour on hover, with an eyebrow and a short claim on the left, a reach line on the right, and a credit note underneath.
Client wall that sets six greyscale logos in a hairline cell grid, each lifting to full colour on hover, with an eyebrow and a short claim on the left, a reach line on the right, and a credit note underneath.
Free block
This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.
Radix flavor
npx shadcn add "https://ui.beste.co/r/logos12"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/logos12"This installs the block to components/beste/block/logos12.tsx plus the badge23 component it uses for the eyebrow.
The installed file exports logos12Demo alongside the block: the exact props behind the preview above. Spread it to get a working logo wall in one line.
import { Logos12, logos12Demo } from "@/components/beste/block/logos12";
export default function Page() {
return <Logos12 {...logos12Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Logos12 } from "@/components/beste/block/logos12";
export default function Page() {
return (
<Logos12
badge={{ label: "Trusted by" }}
heading="Groups, clinics, and single rooms, running the same quiet workflow"
items={[
{ src: "/logos/brightwell.svg", alt: "Brightwell Group" },
{ src: "/logos/northgate.svg", alt: "Northgate Clinics" },
{ src: "/logos/meadowline.svg", alt: "Meadowline Care" },
{ src: "/logos/coastline.svg", alt: "Coastline Health" },
{ src: "/logos/alder.svg", alt: "Alder and Finch" },
{ src: "/logos/rowan.svg", alt: "Rowan Practice" },
]}
stat="240 practices, 9 countries, one shared way of working"
footnote="Names used with permission."
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string } | – | Monospace eyebrow above the claim, rendered via Badge23 |
heading | string | – | Short claim in the left column |
items | Logo[] | [] | Logo cells, filling the grid in source order |
stat | string | – | Reach line, right-aligned from md up |
footnote | string | – | Credit note under the grid |
className | string | – | Extra classes for the outer <section> |
type Logo = { src: string; alt: string };sm.h-7, md:h-8) with w-auto and object-contain, so wordmarks of very different aspect ratios sit optically level without being stretched.alt carries the company name, so the wall still says who these customers are when images fail or a screen reader is doing the reading.md:items-end, which drops the reach line onto the same baseline as the last line of the claim rather than centring it against the block.logos13
Client proof band with a parenthetical eyebrow, a display heading beside a supporting paragraph, and a ruled grid of grayscale logos where each one carries a plain caption naming the work, closed by a footnote and a pill CTA.
logos15
Client proof organised by sector: each ruled row names the sector, explains the kind of work it involves, and lines the matching grayscale logos up on the right edge.