Split-layout hero with full chat interface mockup featuring channels sidebar, message threads, online users, and floating notification. Perfect for collaboration and messaging apps.
Split hero pairing marketing copy with a fully mocked team-chat interface: a channel sidebar with unread counts, a message thread with avatars and a pinned-message indicator, an online-users list, and a floating new-message notification that animates continuously.
Pro blocks install through the shadcn CLI with your license key and ship their full source. Docs and live previews stay open to everyone, so you can read every block's details first.
Swap YOUR_EMAIL and YOUR_KEY for the email and license key on your account. Find your license key on your account page.
Radix flavor
npx shadcn add "https://ui.beste.co/r/hero75?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://ui.beste.co/r-base/hero75?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/hero75.tsx and the shadcn/ui badge, button, and card components it depends on.
The installed file exports hero75Demo alongside the block: the exact props behind the preview above. Spread it to get a working hero in one line.
import { Hero75, hero75Demo } from "@/components/beste/block/hero75";
export default function Page() {
return <Hero75 {...hero75Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Hash } from "lucide-react";
import { Hero75 } from "@/components/beste/block/hero75";
export default function Page() {
return (
<Hero75
badge={{ label: "Team Chat", variant: "outline" }}
heading="Where teams come together"
description="Real-time messaging and file sharing built for fast-moving teams."
buttons={[{ label: "Get Started Free", href: "/signup" }]}
channels={[
{ icon: Hash, name: "general", active: true },
{ icon: Hash, name: "engineering", unread: 5 },
]}
messages={[
{ sender: { name: "Emily Zhang" }, content: "Just pushed to staging!", time: "10:32 AM", pinned: true },
{ sender: { name: "Marcus Chen" }, content: "Looks great, testing now.", time: "10:34 AM" },
]}
onlineUsers={[{ name: "Emily Zhang", status: "online" }]}
displayPosition="left"
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
badge | { label: string; variant?: "default" | "secondary" | "outline" } | – | Badge above the heading |
heading | string | – | Main headline (required prop, no default) |
description | string | – | Supporting paragraph |
buttons | HeroButton[] | [] | CTA buttons below the description |
channels | ChannelItem[] | [] | Sidebar channel list inside the chat mockup |
messages | MessageItem[] | [] | Message thread rendered in the mockup's main pane |
onlineUsers | OnlineUser[] | [] | Online-users list under the channel sidebar |
displayPosition | "left" | "right" | "left" | Which side the chat mockup renders on at the lg breakpoint |
className | string | – | Extra classes for the outer <section> |
type HeroButton = {
label: string;
href: string;
variant?: "default" | "outline" | "secondary" | "ghost" | "link";
};
type ChannelItem = {
icon: LucideIcon;
name: string;
unread?: number;
active?: boolean;
};
type MessageItem = {
sender: { name: string; avatar?: string };
content: string;
time: string;
pinned?: boolean;
};
type OnlineUser = {
name: string;
avatar?: string;
status: "online" | "away" | "busy";
};ChannelItem.icon takes a LucideIcon component reference directly (e.g. Hash), so callers import the icon from lucide-react and pass the component itself rather than a string key.sm (hidden ... sm:block); mobile viewports show only the messages pane.displayPosition reorders the text and mockup columns with lg:[&>*:first-child]:order-2, an arbitrary-variant selector on the grid's first child that only takes effect at lg and above.messages/onlineUsers props and runs a continuous CSS float keyframe animation via inline style, positioned with absolute -right-4 sm:-right-6 outside the chat Card.<span> whenever avatar is omitted.hero43
Split-layout hero with interactive email client mockup featuring sidebar, message list, and floating notification. Perfect for email and communication apps.
hero77
Split-layout hero with weekly calendar mockup showing events, attendees, and floating reminder notification. Perfect for scheduling and calendar apps.
hero25
Split-layout hero with interactive dashboard mockup featuring stats cards, line chart, and recent activity feed. Perfect for SaaS and analytics platforms.
hero53
Split-layout hero with realistic iPhone mockup, notch detail, and App Store/Play Store download buttons. Perfect for mobile app landing pages.
hero76
Split-layout hero with interactive kanban board mockup showing tasks with priorities, tags, assignees, and floating completion stats. Perfect for project management tools.
hero103
Fullscreen hero with app store buttons and phone mockup over inset background video