Life At The Studio

Life at the studio

Quiet mornings, loud afternoons, and work we actually care about.

Polaris is one floor, fourteen people, and a wall that never stops filling up. Here is a look at the room you would be making things in.

Polaris studio floor with designers at shared tables
The studio floor, mid-afternoon
Team gathered around a whiteboard sketching ideas
Friday critique, no slides allowed
Studio kitchen with the team sharing a long lunch
Long lunches around the big table
Wall covered with pinned posters and printed work
The wall that never stops growing
Close shot of hands sketching in a notebook
Where most ideas start
The whole team mid-conversation around a table
Everyone in the room, every kickoff

Like the look of it?

See open roles
About this block

Life At The StudioPRO

A captioned masonry photo wall of studio life with an intro and a roles CTA.

Careers45: Life At The Studio

A careers "life at the studio" section that renders an eyebrow badge, a <strong>-aware heading, a lead paragraph, a CSS-column masonry wall of captioned photos with a hover zoom and a bottom gradient overlay, and a bordered closing row pairing a CTA line with a Button1 link to open roles.

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

Base UI flavor

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

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

Quick start

The installed file exports careers45Demo alongside the block: the exact props behind the preview above. Spread it to get a working studio photo wall in one line.

tsx
import { Careers45, careers45Demo } from "@/components/beste/block/careers45";

export default function Page() {
  return <Careers45 {...careers45Demo} />;
}

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

tsx
import { Careers45 } from "@/components/beste/block/careers45";

export default function Page() {
  return (
    <Careers45
      label="Life at the studio"
      heading="Work we <strong>actually care about.</strong>"
      lead="One floor, fourteen people, and a wall that never stops filling up."
      moments={[
        {
          src: "https://example.com/floor.jpg",
          alt: "Studio floor with designers at shared tables",
          caption: "The studio floor, mid-afternoon",
          aspect: "aspect-[4/5]",
        },
        {
          src: "https://example.com/critique.jpg",
          alt: "Team gathered around a whiteboard",
          caption: "Friday critique, no slides allowed",
          aspect: "aspect-[4/3]",
        },
      ]}
      ctaText="Like the look of it?"
      button={{ label: "See open roles", href: "/careers" }}
    />
  );
}

Props

PropTypeDefaultDescription
labelstringEyebrow text rendered through Badge6; omitted when falsy
headingstringSection heading, supports inline <strong>
leadstringIntro paragraph under the heading
momentsMoment[][]Photos rendered as masonry figures
ctaTextstringCopy line in the closing CTA row
buttonActionLinkLink fed into the Button1 CTA
classNamestringExtra classes for the outer <section>
ts
type Moment = {
  src: string;
  alt: string;
  caption: string;
  // Tailwind aspect class, e.g. "aspect-[4/5]", varies the masonry rhythm
  aspect: string;
};

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

Behavior notes

  • heading is injected via dangerouslySetInnerHTML, so its inline <strong> renders as bold text-primary; pass trusted markup only.
  • The photo wall is a pure CSS columns masonry (sm:columns-2 lg:columns-3) with break-inside-avoid on each figure, so there is no JS layout, no lazy loading, and no lightbox.
  • Each moment.aspect string is applied directly as a Tailwind class on the image box, so an invalid or unlisted aspect value silently produces no ratio.
  • Every image gets a fixed top-to-bottom gradient overlay and a group-hover scale-105 zoom; the caption sits over the overlay in text-background and is decorative, not a link.
  • The entire closing CTA row only renders when button is provided; inside it, ctaText renders only when also truthy, and the button always wraps a next/link to button.href with no click handler of its own.
  • The block ships no interactive state or callbacks: it is fully presentational, with navigation deferred to the button.href link.

More Careers blocks

View all Careers
PRO

careers42

Studio Culture

Culture statement and tenets beside a three-image studio-life collage.

PRO

careers50

Careers Gallery Header

Centered careers intro with eyebrow, highlighted heading and supporting copy above a three-image gallery — one wide frame beside two portraits.

PRO

careers40

Open Roles

A studio jobs list with role meta, salary and apply arrows.

PRO

careers8

Job Detail Page

Single job posting detail with responsibilities, requirements, nice-to-haves, and apply CTA. Full position description layout.

PRO

careers14

Meet the Team Gallery

Team member photo grid with names and roles. Square portrait layout for showcasing leadership and team composition.

PRO

careers48

Join The Studio

Sticky employer-value intro beside a scrollable open-roles list.