Skip to content
Brok UI

Loading…

No results

Hero

Open source

Marketing hero sections: centred, split, search, form, video, stats, screenshot and more; the centred hero takes a switchable backdrop.

Preview

10 of 15

resources/views/blocks/hero-screenshot.blade.php Blade
@props([
    'announcement'      => 'New — Instant deploy to any cloud',
    'announcementHref'  => '#',
    'headline'          => 'The platform built for',
    'headlineHighlight' => 'modern product teams',
    'lead'              => 'Ship faster with a unified workspace for design, code, and delivery. No duct tape. No context switching.',
    'primaryLabel'      => 'Start for free',
    'primaryHref'       => '#',
    'ghostLabel'        => 'View demo',
    'ghostHref'         => '#',
    'screenshotAlt'     => 'Product screenshot',
])

<section data-slot="hero-screenshot" {{ $attributes->merge(['class' => 'relative overflow-hidden bg-background py-20 text-foreground sm:py-28 lg:py-36']) }}>
    <div aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-1/2 -z-10 flex -translate-y-1/4 justify-center">
        <div class="h-64 w-[56rem] rounded-full bg-primary/5 blur-3xl"></div>
    </div>

    <div class="mx-auto max-w-6xl px-4">
        <div class="mx-auto max-w-3xl text-center">
            <x-ui.button :href="$announcementHref" variant="outline" size="sm" shape="pill" :with-arrow="true" class="mb-6 text-muted-foreground">
                <x-ui.badge variant="default" size="sm">{{ __('New') }}</x-ui.badge>
                {{ __($announcement) }}
            </x-ui.button>

            <h1 class="text-4xl font-bold tracking-tight text-foreground sm:text-5xl lg:text-6xl">{{ __($headline) }} <span class="block text-primary">{{ __($headlineHighlight) }}</span></h1>
            <p class="mx-auto mt-6 max-w-xl text-lg leading-relaxed text-muted-foreground">{{ __($lead) }}</p>

            <div class="mt-10 flex flex-wrap items-center justify-center gap-4">
                <x-ui.button variant="default" :href="$primaryHref" :with-arrow="true">{{ __($primaryLabel) }}</x-ui.button>
                <x-ui.button variant="ghost" :href="$ghostHref">{{ __($ghostLabel) }}</x-ui.button>
            </div>
        </div>

        <div class="relative mt-16 sm:mt-20">
            <div aria-hidden="true" class="pointer-events-none absolute -inset-4 -z-10 rounded-lg bg-primary/5 blur-2xl"></div>
            <x-ui.mockup type="browser" size="lg" url="app.example.com" role="img" aria-label="{{ __($screenshotAlt) }}" class="flex aspect-[16/9] flex-col shadow-foreground/5">
                <div class="flex h-full">
                    <div class="flex w-48 shrink-0 flex-col gap-2 border-e border-border bg-muted/50 p-4">
                        <div class="h-4 w-3/4 rounded bg-muted-foreground/20"></div>
                        <div class="mt-2 space-y-2">
                            <div class="h-7 w-full rounded-md bg-primary/10"></div>
                            <div class="h-7 w-full rounded-md bg-muted-foreground/10"></div>
                            <div class="h-7 w-full rounded-md bg-muted-foreground/10"></div>
                            <div class="h-7 w-5/6 rounded-md bg-muted-foreground/10"></div>
                        </div>
                    </div>
                    <div class="flex flex-1 flex-col gap-4 overflow-hidden p-6">
                        <div class="flex items-center gap-4">
                            <div class="h-7 w-36 rounded-md bg-muted-foreground/20"></div>
                            <div class="ms-auto flex gap-2">
                                <div class="h-7 w-20 rounded-md bg-muted-foreground/10"></div>
                                <div class="h-7 w-20 rounded-md bg-primary/20"></div>
                            </div>
                        </div>
                        <div class="grid grid-cols-4 gap-4">
                            @for ($i = 0; $i < 4; $i++)
                                <div class="space-y-2 rounded-lg border border-border bg-background p-6">
                                    <div class="h-3 w-2/3 rounded bg-muted-foreground/20"></div>
                                    <div class="h-5 w-1/2 rounded bg-muted-foreground/30"></div>
                                </div>
                            @endfor
                        </div>
                        <div class="flex flex-1 items-end gap-4 overflow-hidden rounded-lg border border-border bg-background p-6">
                            <div class="h-1/2 w-4 rounded-t bg-primary/40"></div>
                            <div class="h-3/4 w-4 rounded-t bg-primary/40"></div>
                            <div class="h-2/5 w-4 rounded-t bg-primary/60"></div>
                            <div class="h-5/6 w-4 rounded-t bg-primary/60"></div>
                            <div class="h-3/5 w-4 rounded-t bg-primary/80"></div>
                            <div class="h-full w-4 rounded-t bg-primary"></div>
                            <div class="flex-1"></div>
                            <div class="w-32 shrink-0 space-y-2 self-start">
                                <div class="h-3 w-full rounded bg-muted-foreground/20"></div>
                                <div class="h-3 w-4/5 rounded bg-muted-foreground/15"></div>
                            </div>
                        </div>
                    </div>
                </div>
            </x-ui.mockup>
            <div aria-hidden="true" class="pointer-events-none absolute inset-x-0 bottom-0 h-32 rounded-b-lg bg-gradient-to-t from-background to-transparent"></div>
        </div>
    </div>
</section>

Installation

terminal
php artisan ui:add blocks/hero-screenshot

Installs these dependencies automatically:

Registry contract

Install confidence

php artisan ui:add blocks/hero-screenshot 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.5
License
open
Stability
stable
Contract
v1
Foundation
≥ 1.0.0
Type Generated target
blade resources/views/blocks/hero-screenshot.blade.php

Registry dependencies

badge button mockup

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.

hero-screenshot.md
# Brok UI block: Hero Screenshot (`hero-screenshot`)

A centered hero with a large product-screenshot frame shown below the copy, lifted by a soft glow and faded into the page, with dual call-to-action buttons.

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/hero-screenshot
```

## Render it

```blade
<x-blocks.hero-screenshot />
```

## Props

- `announcement` (string, default `New — Instant deploy to any cloud`) — Announcement pill text.
- `announcement-href` (string, default `#`) — Announcement pill destination.
- `headline` (string, default `The platform built for`) — First part of the headline.
- `headline-highlight` (string, default `modern product teams`) — Second, colour-highlighted part of the headline, shown on its own line.
- `lead` (string, default `Ship faster with a unified workspace for design, code, and delivery. No duct tape. No context switching.`) — Supporting copy under the headline.
- `primary-label` (string, default `Start for free`) — Primary button label.
- `primary-href` (string, default `#`) — Primary button destination.
- `ghost-label` (string, default `View demo`) — Ghost secondary button label.
- `ghost-href` (string, default `#`) — Ghost secondary button destination.
- `screenshot-alt` (string, default `Product screenshot`) — Accessible label for the mockup, read as an image by assistive tech.

## Use when

- Opening a product landing page with a clickable announcement pill, a two-part headline with a colour-highlighted second phrase, and a richly detailed dashboard screenshot (sidebar nav, stat cards, bar chart) framed in a browser mockup below the copy.
- Wanting the screenshot lifted with a soft glow and faded into the page via a bottom gradient.

## Avoid when

- Needing a simpler, unfilled mockup placeholder or a two-column layout instead of a fully composed dashboard illustration; use hero-spotlight for a plainer mockup or hero-split for a split layout.

## Rules

- Render the installed block with `<x-blocks.hero-screenshot />` 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/hero-screenshot
- Registry JSON (files, props, contract): https://brokui.dev/r/open/blocks/hero-screenshot.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

  • Opening a product landing page with a clickable announcement pill, a two-part headline with a colour-highlighted second phrase, and a richly detailed dashboard screenshot (sidebar nav, stat cards, bar chart) framed in a browser mockup below the copy.
  • Wanting the screenshot lifted with a soft glow and faded into the page via a bottom gradient.

Avoid when

  • Needing a simpler, unfilled mockup placeholder or a two-column layout instead of a fully composed dashboard illustration; use hero-spotlight for a plainer mockup or hero-split for a split layout.

Anti-patterns

  • Do not replace semantic props with conflicting utility classes.
  • Do not remove labels, focus styles, or state attributes.
Anatomy
announcement pill heading highlighted heading phrase lead primary cta ghost cta browser mockup sidebar nav mock stat cards mock bar chart mock bottom fade

Usage

Render the block as a component, passing data where useful:

resources/views/welcome.blade.php Blade
<x-blocks.hero-screenshot />

Built from primitives

Composes <brok:*> Semantic tokens Re-themeable RTL-ready

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.

resources/views/blocks/hero-screenshot.blade.php Blade
@props([
    'announcement'      => 'New — Instant deploy to any cloud',
    'announcementHref'  => '#',
    'headline'          => 'The platform built for',
    'headlineHighlight' => 'modern product teams',
    'lead'              => 'Ship faster with a unified workspace for design, code, and delivery. No duct tape. No context switching.',
    'primaryLabel'      => 'Start for free',
    'primaryHref'       => '#',
    'ghostLabel'        => 'View demo',
    'ghostHref'         => '#',
    'screenshotAlt'     => 'Product screenshot',
])

<section data-slot="hero-screenshot" {{ $attributes->merge(['class' => 'relative overflow-hidden bg-background py-20 text-foreground sm:py-28 lg:py-36']) }}>
    <div aria-hidden="true" class="pointer-events-none absolute inset-x-0 top-1/2 -z-10 flex -translate-y-1/4 justify-center">
        <div class="h-64 w-[56rem] rounded-full bg-primary/5 blur-3xl"></div>
    </div>

    <div class="mx-auto max-w-6xl px-4">
        <div class="mx-auto max-w-3xl text-center">
            <x-ui.button :href="$announcementHref" variant="outline" size="sm" shape="pill" :with-arrow="true" class="mb-6 text-muted-foreground">
                <x-ui.badge variant="default" size="sm">{{ __('New') }}</x-ui.badge>
                {{ __($announcement) }}
            </x-ui.button>

            <h1 class="text-4xl font-bold tracking-tight text-foreground sm:text-5xl lg:text-6xl">{{ __($headline) }} <span class="block text-primary">{{ __($headlineHighlight) }}</span></h1>
            <p class="mx-auto mt-6 max-w-xl text-lg leading-relaxed text-muted-foreground">{{ __($lead) }}</p>

            <div class="mt-10 flex flex-wrap items-center justify-center gap-4">
                <x-ui.button variant="default" :href="$primaryHref" :with-arrow="true">{{ __($primaryLabel) }}</x-ui.button>
                <x-ui.button variant="ghost" :href="$ghostHref">{{ __($ghostLabel) }}</x-ui.button>
            </div>
        </div>

        <div class="relative mt-16 sm:mt-20">
            <div aria-hidden="true" class="pointer-events-none absolute -inset-4 -z-10 rounded-lg bg-primary/5 blur-2xl"></div>
            <x-ui.mockup type="browser" size="lg" url="app.example.com" role="img" aria-label="{{ __($screenshotAlt) }}" class="flex aspect-[16/9] flex-col shadow-foreground/5">
                <div class="flex h-full">
                    <div class="flex w-48 shrink-0 flex-col gap-2 border-e border-border bg-muted/50 p-4">
                        <div class="h-4 w-3/4 rounded bg-muted-foreground/20"></div>
                        <div class="mt-2 space-y-2">
                            <div class="h-7 w-full rounded-md bg-primary/10"></div>
                            <div class="h-7 w-full rounded-md bg-muted-foreground/10"></div>
                            <div class="h-7 w-full rounded-md bg-muted-foreground/10"></div>
                            <div class="h-7 w-5/6 rounded-md bg-muted-foreground/10"></div>
                        </div>
                    </div>
                    <div class="flex flex-1 flex-col gap-4 overflow-hidden p-6">
                        <div class="flex items-center gap-4">
                            <div class="h-7 w-36 rounded-md bg-muted-foreground/20"></div>
                            <div class="ms-auto flex gap-2">
                                <div class="h-7 w-20 rounded-md bg-muted-foreground/10"></div>
                                <div class="h-7 w-20 rounded-md bg-primary/20"></div>
                            </div>
                        </div>
                        <div class="grid grid-cols-4 gap-4">
                            @for ($i = 0; $i < 4; $i++)
                                <div class="space-y-2 rounded-lg border border-border bg-background p-6">
                                    <div class="h-3 w-2/3 rounded bg-muted-foreground/20"></div>
                                    <div class="h-5 w-1/2 rounded bg-muted-foreground/30"></div>
                                </div>
                            @endfor
                        </div>
                        <div class="flex flex-1 items-end gap-4 overflow-hidden rounded-lg border border-border bg-background p-6">
                            <div class="h-1/2 w-4 rounded-t bg-primary/40"></div>
                            <div class="h-3/4 w-4 rounded-t bg-primary/40"></div>
                            <div class="h-2/5 w-4 rounded-t bg-primary/60"></div>
                            <div class="h-5/6 w-4 rounded-t bg-primary/60"></div>
                            <div class="h-3/5 w-4 rounded-t bg-primary/80"></div>
                            <div class="h-full w-4 rounded-t bg-primary"></div>
                            <div class="flex-1"></div>
                            <div class="w-32 shrink-0 space-y-2 self-start">
                                <div class="h-3 w-full rounded bg-muted-foreground/20"></div>
                                <div class="h-3 w-4/5 rounded bg-muted-foreground/15"></div>
                            </div>
                        </div>
                    </div>
                </div>
            </x-ui.mockup>
            <div aria-hidden="true" class="pointer-events-none absolute inset-x-0 bottom-0 h-32 rounded-b-lg bg-gradient-to-t from-background to-transparent"></div>
        </div>
    </div>
</section>

Ownership & lifecycle

Owner, release state, review evidence and adoption for this item.
Owner
Platform UI (@JoshJML)
Current version
1.0.5
Status
Stable
License
open
Deprecation
Not deprecated
Contract
v1
Foundation
≥ 1.0.0