Role Fit FinderFREE

A hiring section that answers three questions instead of listing a job board: the answers land on one open role with its team, its location, and its published pay band, and the photograph beside it changes to the part of the studio that role sits in.

Careers56: Role Fit Finder

A hiring section that asks three questions instead of listing a job board. The answers land on one open role with its team, its location, and its published pay band, and the photograph beside it changes to the part of the studio that role sits in.

Free block

This block is free. No license or account is required: install it with the CLI and use it in unlimited projects.

Installation

Radix flavor

bash
npx shadcn add "https://ui.beste.co/r/careers56"

Base UI flavor

bash
npx shadcn add "https://ui.beste.co/r-base/careers56"

That installs the block file, the badge6 eyebrow and button1 seal CTA it is built from, and the questionnaire primitive.

Quick start

tsx
import { Careers56, careers56Demo } from "@/components/beste/block/careers56";

export default function Page() {
  return <Careers56 {...careers56Demo} />;
}
tsx
import { Careers56 } from "@/components/beste/block/careers56";

export default function Page() {
  return (
    <Careers56
      badge={{ label: "Careers" }}
      meta="Six open roles"
      heading="Skip the job board and answer three questions"
      description="Every open role here wants a different kind of week."
      shortcuts="numbers"
      image={{
        src: "https://images.unsplash.com/photo-1594100165806-939c3fbb5b6a",
        alt: "Studio wall covered in pinned work in progress",
      }}
      caption="Twenty-two people, one floor, and a wall that is never empty."
      stats={[
        { title: "Median reply", value: "3 days" },
        { title: "Interview rounds", value: "Two" },
      ]}
      questions={[
        {
          name: "craft",
          title: "What do you want to spend the day doing?",
          choices: [
            { value: "build", label: "Building the thing" },
            { value: "design", label: "Deciding how it looks" },
          ],
        },
        {
          name: "experience",
          title: "How long have you been at it?",
          choices: [
            { value: "mid", label: "Three to six years" },
            { value: "senior", label: "Seven or more" },
          ],
        },
      ]}
      roles={[
        {
          // both answers have to fit, so this sits above the looser role
          match: { craft: "build", experience: "senior" },
          title: "Engineering lead",
          summary: "You set how the work is built and you still write a good share of it.",
          facts: [
            { title: "Team", value: "Engineering, 4 people" },
            { title: "Band", value: "£82,000 to £95,000" },
          ],
          image: {
            src: "https://images.unsplash.com/photo-1754390754756-16ee0e29cf36",
            alt: "Desk with a laptop, notes, and printed schedules",
          },
          caption: "The engineering corner.",
          button: { label: "Read the full role", href: "https://beste.co" },
        },
        {
          // no match: the catch-all, and it has to be last
          title: "Open application",
          summary: "Nothing on the list matched, which happens.",
          button: { label: "Write to us", href: "https://beste.co" },
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadgeEyebrow above the rule, rendered with Badge6.
metastringShort line beside the eyebrow, across the hairline divider.
headingstringSection heading.
descriptionstringSection description under the heading.
questionsFitQuestion[][]The questions, in the order they are asked.
shortcuts"letters" | "numbers"Prints a shortcut on every choice of the active question.
rolesRole[][]Checked in order; the first one whose match fits wins.
imageRoleImageStanding photograph, shown until a role is matched.
captionstringLine under the standing photograph.
statsFact[][]Two bordered cells under the photograph.
labelsCareers56Labels{}Overrides for the navigation buttons and the match heading.
classNamestringMerged onto the section element.
ts
type Badge = { label: string };
type ActionButton = { label: string; href: string };
type RoleImage = { src: string; alt: string };
type Fact = { title: string; value: string };

type FitQuestion = {
  name: string;
  title: string;
  description?: string;
  choices?: FitChoice[];
};

type FitChoice = { value: string; label: string; description?: string };

type Role = {
  match?: Record<string, string>;
  title: string;
  summary: string;
  facts?: Fact[];
  image?: RoleImage;
  caption?: string;
  button?: ActionButton;
};

type Careers56Labels = {
  previous?: string;
  next?: string;
  submit?: string;
  restart?: string;
  matchTitle?: string;
};

Behavior notes

More Careers blocks

View all Careers
PRO

careers52

Single Role Detail

A job description laid out as a reading column with checked responsibility lists and a candid caveat panel, against a sticky rail carrying the published salary band, level, and location alongside the apply action.

PRO

careers3

Department-Grouped Positions

Department-grouped job listings with minimal row layout. Jobs organized by team with location and type indicators.

FREE

careers51

Filterable Open Roles List

A light editorial careers section with a monospace eyebrow over a hairline rule, a two-column heading, and a sticky culture photo with a gradient caption beside team filter pills and hairline job rows showing location, contract type, and a hover arrow.

PRO

careers48

Join The Studio

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

PRO

careers1

Job Listings List

Job listings section with role cards showing department, location, and employment type. Clean list layout with hover effects and apply buttons.

PRO

careers40

Open Roles

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