Sales suite open today, 10 to 6
A sticky development navbar with a thin information row above the main bar: today's sales suite hours, a phone link and a launch notice with an arrow, separated from the wordmark, links and compact pill by a hairline. The row collapses to zero height with a fade once the page scrolls and returns at the top, and the mobile panel is always mounted and toggled by the menu button.
A sticky navbar for a development's sales site with a thin information row above the main bar: today's sales suite hours on the left with the phone number, and a launch notice with an arrow on the right, separated from the main bar by a hairline. The row collapses to zero height with a fade once the page has scrolled and comes back when you return to the top. Under it sit the text wordmark, five quiet links and a compact pill button, and on small screens the menu button opens an always-mounted panel that repeats the links, the phone, the notice and the button.
Upgrade to Pro
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://beste.dev/r/realestate75?email=YOUR_EMAIL&license_key=YOUR_KEY"Base UI flavor
npx shadcn add "https://beste.dev/r-base/realestate75?email=YOUR_EMAIL&license_key=YOUR_KEY"This installs the block to components/beste/block/realestate75.tsx plus the Button25 pill it uses for the call to action and the shadcn/ui button primitive behind it.
The installed file exports realestate75Demo alongside the block: the exact props behind the preview above. Spread it to get a working navbar in one line.
import { Realestate75, realestate75Demo } from "@/components/beste/block/realestate75";
export default function Page() {
return <Realestate75 {...realestate75Demo} />;
}Then replace the demo with your own props. Written out, a trimmed setup looks like this:
import { Realestate75 } from "@/components/beste/block/realestate75";
export default function Page() {
return (
<Realestate75
brand="Alder Row"
hours="Sales suite open today, 10 to 6"
phone={{ label: "+44 20 7946 0000", href: "tel:+442079460000" }}
notice={{ label: "Phase 2 launching 14 March 2027", href: "/phase-2" }}
items={[
{ label: "Residences", href: "/residences" },
{ label: "Location", href: "/location" },
{ label: "Buying", href: "/buying" },
]}
button={{ label: "Register your interest", href: "/register" }}
labels={{ open: "Open menu", close: "Close menu" }}
/>
);
}| Prop | Type | Default | Description |
|---|---|---|---|
brand | string | – | Text wordmark on the left of the main bar, linked to the home page. |
hours | string | – | Opening line at the left of the info row, for example today's sales suite hours. |
phone | NavItem | – | Phone link in the info row (from the sm breakpoint) and in the mobile panel. |
notice | NavItem | – | Announcement link with an arrow at the right of the info row and in the mobile panel. |
items | NavItem[] | [] | Links shown in the main bar on desktop and in the panel on small screens. |
button | ActionButton | – | Compact pill button on the right; tone falls back to dark. |
labels | { open?: string; close?: string } | {} | Accessible names for the menu button in its two states. |
className | string | – | Extra classes merged onto the header. |
type NavItem = { label: string; href: string };
type ActionButton = {
label: string;
href: string;
tone?: "dark" | "outline" | "primary" | "neutral";
};motion.div whose height animates between 40 px and 0 together with its opacity, driven by useScroll: it collapses once the page has scrolled past 24 px and expands again at the top. While collapsed it is aria-hidden and its links are taken out of the tab order.hours, phone or notice is set; the phone appears from the sm breakpoint and the notice from md, and both are repeated inside the mobile panel so nothing is lost on small screens.aria-expanded, the links slide up with per-item delays and choosing any link closes the panel.prefers-reduced-motion the entrances and hairline draws are skipped and the info row switches height without a transition.