Testimonials
Social-proof sections — grids, a single hero quote, a masonry wall, marquees and a carousel.
Preview
@props([
'wordmark' => 'Northwind',
'rating' => 5,
'quote' => 'Adopting this system changed how our team ships. We own every line of the UI, theme it with tokens, and pull updates without ever fighting our own codebase. It is the most leverage a small product team can buy.',
'name' => 'Amara Okafor',
'role' => 'Head of Product',
'company' => 'Northwind Labs',
'avatarSrc' => null,
'avatarFallback' => 'AO',
])
<x-ui.section space="xl" {{ $attributes }}>
<div class="mx-auto max-w-3xl px-4">
<figure class="flex flex-col items-center text-center">
@if ($wordmark)
<span
class="mb-8 inline-flex items-center rounded-md border border-border bg-muted px-4 py-2 text-sm font-semibold tracking-tight text-muted-foreground"
>
{{ __($wordmark) }}
</span>
@endif
@if ($rating)
<x-ui.rating :value="$rating" :max="5" read-only class="mb-8" />
@endif
<blockquote class="text-balance text-2xl font-medium leading-relaxed tracking-tight sm:text-3xl sm:leading-relaxed">
<p>{{ __($quote) }}</p>
</blockquote>
<figcaption class="mt-10 flex flex-col items-center gap-4">
<x-ui.avatar size="lg" :src="$avatarSrc" :alt="$name" :fallback="$avatarFallback" />
<div class="flex flex-col items-center">
<span class="text-base font-semibold text-foreground">{{ __($name) }}</span>
<span class="mt-2 text-sm text-muted-foreground">
{{ __($role) }}@if ($role && $company), @endif{{ __($company) }}
</span>
</div>
</figcaption>
</figure>
</div>
</x-ui.section>
Installation
php artisan ui:add blocks/testimonials-single
Registry contract
Install confidence
php artisan ui:add blocks/testimonials-single
writes only the generated targets below. The CLI validates each file hash before writing and
prompts before replacing local changes unless --force is used.
- Version
- 1.0.4
- License
- open
- Stability
- stable
- Contract
- v1
- Foundation
- ≥ 1.0.0
| Type | Generated target |
|---|---|
| blade | resources/views/blocks/testimonials-single.blade.php |
Registry dependencies
Package dependencies
composer: jml/brok:^0.2
Use with AI
A brief for your coding agent: what the block is, the install command, how to render it, its props and the rules. Copy it, or open a prompt about this block in an assistant.
# Brok UI block: Testimonials Single (`testimonials-single`)
A single centered testimonial with company wordmark, readonly 5-star rating, a large balanced blockquote, and an avatar with name, role, and company.
Brok UI is a Laravel Blade registry. `ui:add` copies this block into the app as plain Blade the app owns; it composes installed `<brok:*>` primitives and semantic design tokens.
## Install
```bash
php artisan ui:add blocks/testimonials-single
```
## Render it
```blade
<x-blocks.testimonials-single />
```
## Props
- `wordmark` (string, default `Northwind`) — Company wordmark text shown above the quote.
- `rating` (int, default `5`) — Star rating value out of 5.
- `quote` (string, default `Adopting this system changed how our team ships. We own every line of the UI, theme it with tokens, and pull updates without ever fighting our own codebase. It is the most leverage a small product team can buy.`) — Testimonial quote text.
- `name` (string, default `Amara Okafor`) — Author name.
- `role` (string, default `Head of Product`) — Author role.
- `company` (string, default `Northwind Labs`) — Author company.
- `avatar-src` (mixed|null, default `null`) — Author avatar image source; null falls back to initials.
- `avatar-fallback` (string, default `AO`) — Initials shown when no avatar image is set.
## Use when
- Spotlighting one large centered customer quote with a star rating and company wordmark.
- Giving a single strong endorsement the whole section.
## Avoid when
- Showing multiple testimonials at once; use testimonials-grid instead.
## Rules
- Render the installed block with `<x-blocks.testimonials-single />` and pass data through its props; edit the copied file only for structural changes.
- Keep the semantic design tokens (`bg-background`, `text-muted-foreground`); never swap in raw colour utilities.
- Keep the `data-slot` attributes and the logical (start/end) spacing so the markup still mirrors under `dir="rtl"`.
## Links
- Docs: https://brokui.dev/blocks/testimonials-single
- Registry JSON (files, props, contract): https://brokui.dev/r/open/blocks/testimonials-single.json
Working in Claude Code, Cursor or Codex? Give the agent the whole registry through the MCP server or the Brok UI skill.
Guidance
Use when
- Spotlighting one large centered customer quote with a star rating and company wordmark.
- Giving a single strong endorsement the whole section.
Avoid when
- Showing multiple testimonials at once; use testimonials-grid instead.
Anti-patterns
- Do not replace semantic props with conflicting utility classes.
- Do not remove labels, focus styles, or state attributes.
Usage
Render the block as a component, passing data where useful:
<x-blocks.testimonials-single />
Built from primitives
This block composes installed <brok:*> primitives and semantic design
tokens only — it does not reimplement any primitive. Re-theme it (light, dark, admin, customer) by
editing CSS variables; flip the preview to RTL to confirm it mirrors.
Source
The exact, editable file ui:add writes
into your app. The preview above renders this same source — there are no preview-only blocks.
@props([
'wordmark' => 'Northwind',
'rating' => 5,
'quote' => 'Adopting this system changed how our team ships. We own every line of the UI, theme it with tokens, and pull updates without ever fighting our own codebase. It is the most leverage a small product team can buy.',
'name' => 'Amara Okafor',
'role' => 'Head of Product',
'company' => 'Northwind Labs',
'avatarSrc' => null,
'avatarFallback' => 'AO',
])
<x-ui.section space="xl" {{ $attributes }}>
<div class="mx-auto max-w-3xl px-4">
<figure class="flex flex-col items-center text-center">
@if ($wordmark)
<span
class="mb-8 inline-flex items-center rounded-md border border-border bg-muted px-4 py-2 text-sm font-semibold tracking-tight text-muted-foreground"
>
{{ __($wordmark) }}
</span>
@endif
@if ($rating)
<x-ui.rating :value="$rating" :max="5" read-only class="mb-8" />
@endif
<blockquote class="text-balance text-2xl font-medium leading-relaxed tracking-tight sm:text-3xl sm:leading-relaxed">
<p>{{ __($quote) }}</p>
</blockquote>
<figcaption class="mt-10 flex flex-col items-center gap-4">
<x-ui.avatar size="lg" :src="$avatarSrc" :alt="$name" :fallback="$avatarFallback" />
<div class="flex flex-col items-center">
<span class="text-base font-semibold text-foreground">{{ __($name) }}</span>
<span class="mt-2 text-sm text-muted-foreground">
{{ __($role) }}@if ($role && $company), @endif{{ __($company) }}
</span>
</div>
</figcaption>
</figure>
</div>
</x-ui.section>
Ownership & lifecycle
Owner, release state, review evidence and adoption for this item.
- Owner
- Platform UI (@JoshJML)
- Current version
-
1.0.4 - Status
- Stable
- License
-
open - Deprecation
- Not deprecated
- Contract
-
v1 - Foundation
-
≥ 1.0.0