Pick The Frames Taste ProfileFREE

A gallery finder whose questions are photographs rather than sentences: three rows of frames are chosen by eye, and the result names the leading way of looking, shows the series that goes with it, and breaks the picks down as a share bar.

Gallery25: Pick The Frames Taste Profile

A gallery finder whose questions are photographs rather than sentences. Three rows of frames are chosen by eye, and the result names the leading way of looking, shows the series that goes with it, and breaks the picks down as a share bar.

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

Base UI flavor

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

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

Quick start

tsx
import { Gallery25, gallery25Demo } from "@/components/beste/block/gallery25";

export default function Page() {
  return <Gallery25 {...gallery25Demo} />;
}
tsx
import { Gallery25 } from "@/components/beste/block/gallery25";

export default function Page() {
  return (
    <Gallery25
      badge={{ label: "What do you actually like" }}
      heading="Choose pictures, not adjectives."
      description="Pick the frames you would hang and we will tell you what you have been choosing."
      questions={[
        {
          name: "one",
          title: "Which of these would you hang?",
          choices: [
            {
              value: "a",
              label: "Empty foreground, long light",
              // which style this frame counts towards
              style: "quiet",
              image: {
                src: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e",
                alt: "Frame from the quiet selection",
              },
            },
            {
              value: "b",
              label: "Somebody caught mid-sentence",
              style: "documentary",
              image: {
                src: "https://images.unsplash.com/photo-1519741497674-611481863552",
                alt: "Frame from the documentary selection",
              },
            },
          ],
        },
      ]}
      styles={[
        {
          key: "quiet",
          title: "The quiet eye",
          description: "You keep choosing frames where very little is happening.",
          strip: [
            {
              src: "https://images.unsplash.com/photo-1441974231531-c6227db76b6e",
              alt: "Print from the quiet series",
            },
          ],
          button: { label: "See the quiet series", href: "https://beste.co" },
        },
        {
          key: "documentary",
          title: "The documentary eye",
          description: "You pick the frames with somebody in them.",
          button: { label: "See the documentary series", href: "https://beste.co" },
        },
      ]}
      labels={{ submit: "Read my picks", leadLabel: "of your picks" }}
    />
  );
}

Props

PropTypeDefaultDescription
badgeBadgeParenthetical eyebrow above the heading, rendered with Badge7.
headingstringSection heading.
descriptionstringLead paragraph, set opposite the heading.
questionsPhotoQuestion[][]Rows of frames, in the order they are shown. One pick each.
stylesStyle[][]Counted from the frames that were picked; the largest share leads.
labelsGallery25Labels{}Overrides for the navigation buttons and the result copy.
classNamestringMerged onto the section element.
ts
type Badge = { label: string };
type ActionButton = { label: string; href: string };
type Frame = { src: string; alt: string };

type PhotoQuestion = {
  name: string;
  title: string;
  description?: string;
  choices?: PhotoChoice[];
};

type PhotoChoice = {
  value: string;
  label: string;
  image: Frame;
  style: string;
};

type Style = {
  key: string;
  title: string;
  description: string;
  strip?: Frame[];
  button?: ActionButton;
};

type Gallery25Labels = {
  previous?: string;
  next?: string;
  submit?: string;
  restart?: string;
  leadLabel?: string;
  breakdownTitle?: string;
};

Behavior notes

More Gallery blocks

View all Gallery
PRO

gallery9

Zoomable Justified Gallery

Justified rows of frames that grow to fill every line, opening a viewer whose picture doubles as the zoom control: clicking switches between fitting the screen and filling it, with the caption and controls on one closing rule.

PRO

gallery3

Filterable Album Grid

Album gallery with pill filters that swap the whole set below, where any tile opens a light full-screen viewer: the frame hangs on the page surface while a side column carries the caption, the album summary, the controls and a plainly labelled thumbnail index.

PRO

gallery16

Artist Room Index

Exhibition split into artist rooms, each with a sticky statement column beside its works, opening a viewer that shows the chosen piece large with the next one waiting as a thumbnail you can step straight into.

PRO

gallery10

Overview Toggle Viewer

Square grid whose viewer holds two states: a single frame with caption and controls, or an in-place overview of the whole set that you can jump from without closing the layer.

PRO

gallery2

Lightbox Frame Grid

Captioned image grid where any tile opens a full-screen lightbox on a dark scrim, with a frame counter, keyboard arrows, escape to close and previous and next controls beside the caption.

PRO

gallery23

Wall Scale Viewer

Works listed with the sizes they are printed at, opening a viewer that hangs the piece in a photographed room and scales it as you switch size pills, so the dimensions stop being an abstraction.