Portfolio Under Construction

(Under construction)

Mara Ellison

Designer & Art Director

My new portfolio is nearly ready. In the meantime, the work still speaks for itself, just reach out.

Find me on

Currently open to new projects

About this block

Portfolio Under ConstructionPRO

A personal coming-soon page with a monospace parenthetical eyebrow, an oversized name, a role and tagline, an email contact pill button, a row of social links, and an availability status line.

ComingSoon60: Portfolio Under Construction

An Auralis personal coming-soon page that centers a monospace parenthetical eyebrow, an oversized name, a role and tagline, an email contact pill button, a row of social icon links, and a pulsing availability status line.

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

Base UI flavor

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

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

Quick start

The installed file exports comingsoon60Demo alongside the block: the exact props behind the preview above. Spread it to get a working portfolio holding page in one line.

tsx
import { ComingSoon60, comingsoon60Demo } from "@/components/beste/block/comingsoon60";

export default function Page() {
  return <ComingSoon60 {...comingsoon60Demo} />;
}

Then replace the demo with your own props. The socials icons come from lucide-react, so import the ones you need. Written out, a trimmed setup looks like this:

tsx
import { Dribbble, Instagram, Linkedin } from "lucide-react";
import { ComingSoon60 } from "@/components/beste/block/comingsoon60";

export default function Page() {
  return (
    <ComingSoon60
      badge={{ label: "Under construction" }}
      name="Mara Ellison"
      role="Designer & Art Director"
      tagline="My new portfolio is nearly ready. In the meantime, the work still speaks for itself, just reach out."
      contact={{ label: "Email me", href: "mailto:hi@maraellison.com" }}
      socials={[
        { label: "Dribbble", href: "/dribbble", icon: Dribbble },
        { label: "Instagram", href: "/instagram", icon: Instagram },
        { label: "LinkedIn", href: "/linkedin", icon: Linkedin },
      ]}
      labels={{
        statusText: "Currently open to new projects",
        socialsCaption: "Find me on",
      }}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadgeParenthetical eyebrow rendered above the name via Badge7
labelsComingSoon60Labels{}Availability status and socials caption strings
namestringOversized name headline
rolestringRole line under the name
taglinestringSupporting paragraph under the role
contactActionLinkEmail contact pill rendered via Button12 with a Mail icon
socialsSocialLink[][]Row of social icon links
classNamestringExtra classes for the outer <section>
ts
type Badge = {
  label: string;
};

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

type SocialLink = {
  label: string;
  href: string;
  icon: LucideIcon;
};

type ComingSoon60Labels = {
  statusText?: string;
  socialsCaption?: string;
};

Behavior notes

  • This block has no form: it is a static holding page, so there is no email input, submit state, or success panel.
  • The contact pill renders as a real link via Button12 asChild wrapping a Next.js <Link href={contact.href} /> with a Mail icon, so it navigates rather than firing a handler.
  • The social row renders only when socials is non-empty, mapping each entry to a Next.js <Link> whose icon component is drawn straight from the prop and given an aria-label from social.label.
  • The availability line renders only when labels.statusText is set, prefixed by a small animate-pulse dot for a live-status feel.
  • Following the Auralis language, the whole layout is a centered max-w-2xl column with the name set in oversized text-5xl to md:text-7xl type, and every string is plain text with no inline markup parsing, so HTML passed in shows as escaped text.

More Coming Soon blocks

View all Coming Soon
PRO

comingsoon22

Coming Soon Notify Page

A centered coming-soon launch page with a brand wordmark, a square eyebrow, an accent-highlighted heading, a working email notify form with a success state, a launch note, and a row of social links.

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

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

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

comingsoon19

Pre-Launch Manifesto

A pre-launch manifesto section on a soft muted card with a monospace parenthetical eyebrow, a large statement heading, and a three-column ruled list of numbered building principles above a follow-along pill button.

PRO

comingsoon32

Trusted By Waitlist

A centered pre-launch section with a monospace parenthetical eyebrow, a statement heading, a supporting paragraph, a waitlist pill button, and a captioned grayscale logo strip of early partners.