Upcoming Writing Grid

(First to publish)

The writing we're releasing alongside the studio.

Subscribe once and every piece below lands in your inbox the week it goes live, in the order we finish it.

Subscribe for updates

Field notes

Why we deleted the dashboard

The case for a workspace that shows you the work, not a wall of numbers.

Playbook

A brief that writes itself

The five prompts we ask before a single pixel gets drawn.

Behind the build

Shipping slower on purpose

How a two-week freeze made the first release twice as sturdy.

About this block

Upcoming Writing GridPRO

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.

ComingSoon29: Upcoming Writing Grid

A monochrome, editorial newsletter-forward pre-launch section that pairs a parenthetical eyebrow, a heading, and a subscribe pill button across the top, then lays a three-column grid of upcoming-article cards below, each with a kind label, title, and summary.

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

Base UI flavor

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

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

Quick start

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

tsx
import { ComingSoon29, comingsoon29Demo } from "@/components/beste/block/comingsoon29";

export default function Page() {
  return <ComingSoon29 {...comingsoon29Demo} />;
}

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

tsx
import { ComingSoon29 } from "@/components/beste/block/comingsoon29";

export default function Page() {
  return (
    <ComingSoon29
      badge={{ label: "First to publish" }}
      heading="The writing we're releasing alongside the studio."
      description="Subscribe once and every piece below lands in your inbox the week it goes live."
      button={{ label: "Subscribe for updates", href: "/waitlist" }}
      topics={[
        {
          kind: "Field notes",
          title: "Why we deleted the dashboard",
          summary: "The case for a workspace that shows you the work, not a wall of numbers.",
        },
        {
          kind: "Playbook",
          title: "A brief that writes itself",
          summary: "The five prompts we ask before a single pixel gets drawn.",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badge{ label: string }–Parenthetical eyebrow rendered above the heading via Badge7
headingstring–Section heading in the intro row
descriptionstring–Supporting paragraph under the heading
buttonActionLink–Subscribe pill link rendered via Button12
topicsTopicItem[][]Upcoming-article cards rendered in a three-column grid
classNamestring–Extra classes for the outer <section>
ts
type ActionLink = {
  label: string;
  href: string;
};

type TopicItem = {
  kind: string;
  title: string;
  summary: string;
};

Behavior notes

  • There is no form or event callback: the button is a real navigation via Button12 asChild wrapping a Next.js <Link href={button.href} />, so it always points at a URL.
  • The intro eyebrow, heading, description, and button each render only when their prop is present, and the whole top row lays out as a md:flex-row split with the button pinned to the end.
  • The topic grid renders only when topics is non-empty, mapping each entry into a bordered bg-card <article> with the kind label, title, and summary stacked.
  • The grid is a fixed md:grid-cols-3 layout, so three topics fill one row cleanly and extra entries wrap onto the next.
  • Every string is plain text with no inline markup parsing, so HTML passed into any field shows as escaped text.

More Coming Soon blocks

View all Coming Soon
PRO

comingsoon70

Newsletter Sample Issues

PRO

comingsoon49

Framed Editorial Launch

PRO

comingsoon48

Bento Launch Grid

Get Pro access