Bento Launch Grid

Auralis

(Launching soon)

A new home for the work you're proud of.

A bright, minimal studio corner
Waitlist memberWaitlist memberWaitlist memberWaitlist member

2,400 makers already on the list

About this block

Bento Launch GridPRO

A coming-soon bento grid with a large panel holding a wordmark, a monospace parenthetical eyebrow, a heading and a working email notify form, an image tile, and a dark social-proof tile with an avatar stack and waitlist count.

ComingSoon48: Bento Launch Grid

An Auralis coming-soon bento grid with a large muted panel holding a wordmark, a monospace parenthetical eyebrow, a heading, and a working email notify form, an image tile, and a dark social-proof tile with an overlapping avatar stack and a waitlist count.

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/comingsoon48?email=YOUR_EMAIL&license_key=YOUR_KEY"

Base UI flavor

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

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

Quick start

The installed file exports comingsoon48Demo alongside the block: the exact props behind the preview above. Spread it to get a working bento launch grid in one line.

tsx
import { ComingSoon48, comingsoon48Demo } from "@/components/beste/block/comingsoon48";

export default function Page() {
  return <ComingSoon48 {...comingsoon48Demo} />;
}

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

tsx
import { ComingSoon48 } from "@/components/beste/block/comingsoon48";

export default function Page() {
  return (
    <ComingSoon48
      brand="Auralis"
      badge={{ label: "Launching soon" }}
      labels={{
        placeholder: "you@studio.com",
        success: "You're on the list. See you on opening day.",
        count: "2,400",
        proof: "makers already on the list",
      }}
      heading="A new home for the work you're proud of."
      image={{ src: "/studio-corner.jpg", alt: "A bright, minimal studio corner" }}
      avatars={[
        { src: "/people/ava.jpg", alt: "Waitlist member" },
        { src: "/people/theo.jpg", alt: "Waitlist member" },
        { src: "/people/priya.jpg", alt: "Waitlist member" },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
brandstringWordmark in the top corner of the main panel
badgeBadgeParenthetical eyebrow rendered via Badge7
labelsComingSoon48Labels{}Form placeholder, success, and social-proof count and text
headingstringStatement heading on the main panel
imageImageItemCover image tile in the grid
avatarsAvatarItem[][]Overlapping avatar stack on the social-proof tile
classNamestringExtra classes for the outer <section>
ts
type Badge = {
  label: string;
};

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

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

type ComingSoon48Labels = {
  placeholder?: string;
  success?: string;
  count?: string;
  proof?: string;
};

Behavior notes

  • The layout is a fixed md:grid-cols-3 md:grid-rows-2 bento where the main panel spans two columns and two rows; the image and social-proof tiles fill the remaining cells.
  • The email form owns its own state; handleSubmit calls preventDefault and only flips to the success pill when the trimmed email is non-empty, so there is no external callback to wire.
  • The avatars render as a -space-x-3 overlapping stack of plain <img> elements with border-foreground rings on a bg-foreground social-proof tile, and the stack renders only when avatars is non-empty.
  • The proof line renders whenever labels.count or labels.proof is present, with count bolded ahead of the proof text.
  • The image tile renders only when image is set, and every string is plain text with no inline markup parsing, so any HTML passed in shows as escaped text.

Wiring the form up

The form ships with local state and a success message but no backend, so submissions are not sent anywhere until you connect one. Point handleSubmit at your own route handler or email platform, or wire in a form library. For a walkthrough of the options, see React Hook Form, TanStack Form, and Formisch.

More Coming Soon blocks

View all Coming Soon
PRO

comingsoon29

Upcoming Writing Grid

A newsletter-forward pre-launch section with a monospace parenthetical eyebrow, a heading and subscribe pill button on top, and a three-card grid of upcoming articles each with a kind label, title, and summary.

PRO

comingsoon9

Bento Stats Dashboard

Coming soon section with a bento-grid of live build stats like commits, test coverage, uptime, and team size. Perfect for building in public with transparent engineering metrics.

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

comingsoon15

Waitlist Coming Soon

A centered pre-launch section with an eyebrow, a large light heading, a paragraph, an image tile holding a working email-capture form with a success state, and a social-proof note.

PRO

comingsoon16

Image Split Waitlist

A two-column pre-launch section with a monospace parenthetical eyebrow, an oversized headline, a working rounded email-capture form with a success state, an avatar social-proof row, and a tall full-bleed image carrying a floating launch label.

PRO

comingsoon46

Split Screen Launch

A full-height split coming-soon page with a dark brand panel carrying a wordmark, a monospace parenthetical eyebrow, a heading and a working email notify form, beside a full-bleed image with a floating launch label.