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
labelstringSquare eyebrow rendered above the heading via Badge6
labelsComingSoon40Labels{}Holds the floating badge text shown over the image
headingstringCity or location heading
descriptionstringSupporting paragraph under the heading
detailsDetailItem[][]Ruled grid of opening facts, one column per item
buttonActionLinkDark seal notify link rendered via Button1
imageImageItemCover image tile on the left with an optional accent badge
classNamestringExtra 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

A two-column coming-soon section with a vertical monospace edge label, an oversized wordmark, a tagline and a working email notify form, beside a framed portrait image tile.

PRO

comingsoon53

Next Issue Magazine

A two-column coming-soon section styled as a magazine launch with an accent-badged cover image, a masthead, a square eyebrow, a heading, a numbered contents list, and a working email subscribe form.

PRO

comingsoon42

Podcast Launch Teaser

A two-column podcast-launch section with an accent-badged square cover image beside a square eyebrow, show title, description, a dark seal subscribe button, platform links, and a ruled list of first episodes.

PRO

comingsoon25

Launch Day Announcement

An editorial launch-date announcement with a square eyebrow, a kicker, an oversized date headline paired with a supporting note and a dark seal remind-me button, above a three-column ruled list of launch facts.

PRO

comingsoon56

Restaurant Opening Soon

A hospitality coming-soon section with an interior image beside a venue name, a square eyebrow, a heading, an opening details grid with icons, and a working email list form with a success state.

PRO

comingsoon27

Launch Roadmap Columns

A pre-launch roadmap laid out as three now-next-later columns with a monospace parenthetical eyebrow, a heading and changelog pill button on top, and ruled entry lists under each column header.