New Location Opening

A sunlit street in LisbonNow fitting out
New Location

We're opening in Lisbon.

Our first studio outside the capital lands this autumn, right in the heart of Príncipe Real. Be the first through the door.

Opening
Late October 2026
Where
Rua da Escola Politécnica
Hours
Weekdays, 9 to 6
About this block

New Location OpeningPRO

A two-column location-launch section with an accent-badged image tile beside a square eyebrow, a city heading, a supporting line, a ruled details grid of opening facts, and a dark seal notify button.

ComingSoon40: New Location Opening

A Polaris two-column location-launch section that pairs an accent-badged image tile with a square eyebrow, a city heading, a supporting line, a ruled three-up details grid of opening facts, and a dark seal notify 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.

Upgrade Now

Installation

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

bash
npx shadcn add "https://ui.beste.co/r/comingsoon40?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/comingsoon40?email=YOUR_EMAIL&license_key=YOUR_KEY"

This installs the block to components/beste/block/comingsoon40.tsx.

Quick start

The installed file exports comingsoon40Demo alongside the block: the exact props behind the preview above. Spread it to get a working location-launch section in one line.

tsx
import { ComingSoon40, comingsoon40Demo } from "@/components/beste/block/comingsoon40";

export default function Page() {
  return <ComingSoon40 {...comingsoon40Demo} />;
}

Then replace the demo with your own props. Written out, a trimmed setup looks like this:

tsx
import { ComingSoon40 } from "@/components/beste/block/comingsoon40";

export default function Page() {
  return (
    <ComingSoon40
      label="New Location"
      labels={{ imageBadge: "Now fitting out" }}
      heading="We're opening in Lisbon."
      description="Our first studio outside the capital lands this autumn."
      details={[
        { label: "Opening", value: "Late October 2026" },
        { label: "Where", value: "Rua da Escola Politécnica" },
        { label: "Hours", value: "Weekdays, 9 to 6" },
      ]}
      button={{ label: "Notify Me", href: "/notify" }}
      image={{ src: "/lisbon.jpg", alt: "A sunlit street in Lisbon" }}
    />
  );
}

Props

PropTypeDefaultDescription
labelstring–Square eyebrow rendered above the heading via Badge6
labelsComingSoon40Labels{}Holds the floating badge text shown over the image
headingstring–City or location heading
descriptionstring–Supporting paragraph under the heading
detailsDetailItem[][]Ruled grid of opening facts, one column per item
buttonActionLink–Dark seal notify link rendered via Button1
imageImageItem–Cover image tile on the left with an optional accent badge
classNamestring–Extra classes for the outer <section>
ts
type DetailItem = {
  label: string;
  value: string;
};

type ActionLink = {
  label: string;
  href: string;
};

type ImageItem = {
  src: string;
  alt: string;
};

type ComingSoon40Labels = {
  imageBadge?: string;
};

Behavior notes

  • The image tile renders on the left only when image is set, as a plain <img> absolutely positioned to cover a 4/3 frame; labels.imageBadge overlays a bg-primary pill in the top-left corner when present.
  • Every region is optional: the eyebrow, heading, description, the details grid, and the button each render only when their prop is present or non-empty.
  • The details grid renders as a <dl> on a sm:grid-cols-3 layout, with each item drawn under its own border-t rule, and it is omitted entirely when the array is empty.
  • The button renders as a real navigation via Button1 asChild wrapping a Next.js <Link href={button.href} /> with the dark tone, so it points at a URL rather than firing a handler.
  • Every string is plain text with no inline markup parsing, so any HTML passed in shows as escaped text.

More Coming Soon blocks

View all Coming Soon
PRO

comingsoon49

Framed Editorial Launch

PRO

comingsoon53

Next Issue Magazine

PRO

comingsoon56

Restaurant Opening Soon

Get Pro access