Studio Brief With Changing PlateFREE

A four-step studio brief where the tall photograph beside it changes with the question on screen, each with its own caption, and sending the brief swaps the plate for the studio and the form for a ledger of the answers.

Agency24: Studio Brief With Changing Plate

A four-step studio brief where the tall photograph beside it changes with the question on screen, each with its own caption. Sending the brief swaps the plate for the studio and the form for a ledger of the answers.

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/agency24"

Base UI flavor

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

That installs the block file, the badge7 eyebrow and button12 pill it is built from, and the questionnaire primitive.

Quick start

tsx
import { Agency24, agency24Demo } from "@/components/beste/block/agency24";

export default function Page() {
  return <Agency24 {...agency24Demo} />;
}
tsx
import { Agency24 } from "@/components/beste/block/agency24";

export default function Page() {
  return (
    <Agency24
      badge={{ label: "Start a brief" }}
      heading="Four answers and we know whether we are the wrong studio for you."
      description="The same questions we would ask on a first call."
      shortcuts="numbers"
      steps={[
        {
          name: "work",
          title: "What are we making?",
          required: true,
          choices: [
            { value: "identity", label: "An identity" },
            { value: "site", label: "A site" },
          ],
          image: { src: "https://images.unsplash.com/photo-1583201173319-a4efa99605cf", alt: "Print" },
          caption: "Wordmark and print system for a small publisher.",
        },
        {
          name: "contact",
          title: "Where do we send the reply?",
          required: true,
          // an input step: the field writes to the same name
          input: { label: "Email address", placeholder: "you@studio.com", type: "email" },
          image: { src: "https://images.unsplash.com/photo-1777523743687-233bbfdbd894", alt: "Desk" },
          caption: "Every brief gets a written answer.",
        },
      ]}
      closing={{
        image: { src: "https://images.unsplash.com/photo-1763307411452-43cfd9f516ce", alt: "Studio" },
        caption: "This is the room your brief lands in on Monday morning.",
        title: "Brief received",
        description: "One of us replies inside two working days.",
        emptyLabel: "Left blank",
      }}
      button={{ label: "Book the intro call", href: "https://beste.co" }}
      notes={[
        {
          title: "No forms after this one",
          description: "The reply comes from the person who would run the work.",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadgeParenthetical eyebrow above the heading, rendered with Badge7.
headingstringSection heading.
descriptionstringLead paragraph, set opposite the heading.
stepsBriefStep[][]The questions, each carrying the plate and caption shown while it is on screen.
shortcuts"letters" | "numbers"Prints a shortcut on every choice of the active step.
closingClosingThe plate, the caption, and the ledger heading shown once the brief is sent.
buttonActionButtonButton12 pill under the ledger.
notesNote[][]Ruled row under the brief.
labelsAgency24Labels{}Overrides for the navigation buttons and the rewrite link.
classNamestringMerged onto the section element.
ts
type Badge = { label: string };
type ActionButton = { label: string; href: string };
type BriefImage = { src: string; alt: string };
type Note = { title: string; description: string };

type BriefStep = {
  name: string;
  title: string;
  description?: string;
  choices?: BriefChoice[];
  input?: { label: string; placeholder?: string; type?: "email" | "text" };
  required?: boolean;
  multiple?: boolean;
  image: BriefImage;
  caption: string;
};

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

type Closing = {
  image: BriefImage;
  caption: string;
  title: string;
  description: string;
  emptyLabel?: string;
};

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

Behavior notes

More Agency blocks

View all Agency
PRO

agency21

Capabilities Accordion

Ruled, expandable capability rows with oversized type, detail copy, and monospace tag chips.

PRO

agency14

Studio Team

A studio team grid of member portraits with names and roles.

PRO

agency16

Studio At A Glance

Studio overview pairing facts, copy and highlight stats with a clean studio image.

PRO

agency12

Studio Values

Studio values laid out with oversized ghost numerals, titles, descriptions and keywords.

PRO

agency11

Studio Manifesto

Oversized editorial manifesto statement with emphasized phrases, principle chips and a founder signature.

PRO

agency17

Principles Selector

Interactive principle list that swaps a detail panel with image as each is hovered.

Markdown version