Downloadable Resource Cards

The library

The files we work from, free to take

These are the working documents behind the writing, not marketing versions of them. Take one, rename it, and change whatever does not fit your practice.

Printed estimate on a desk

Spreadsheet

The estimate sheet

Every line we price, with the ranges we quote inside and the ones we never show a client.

Notes spread across a studio table

Document

The project brief

Eleven questions, in the order that stops a kickoff call from running for two hours.

Team reviewing work around a table

Checklist

The handover pack

What leaves the studio at the end of a project, and the four things clients ask for later.

About this block

Downloadable Resource CardsPRO

Three resource cards, each led by a preview image and stamped with its format, holding the title, one line on what is inside, and a seal download button pinned to the bottom of the card.

Showcase50: Downloadable Resource Cards

Three resource cards, each led by a preview image and stamped with its format, holding the title, one line on what is inside, and a seal download button pinned to the bottom of the card.

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

Base UI flavor

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

This installs the block to components/beste/block/showcase50.tsx, the badge6 component used for the eyebrow and the button1 seal button on each card.

Quick start

The installed file exports showcase50Demo alongside the block: the exact props behind the preview above. Spread it to get a working resource shelf in one line.

tsx
import { Showcase50, showcase50Demo } from "@/components/beste/block/showcase50";

export default function LibraryPage() {
  return <Showcase50 {...showcase50Demo} />;
}

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

tsx
import { Showcase50 } from "@/components/beste/block/showcase50";

export default function LibraryPage() {
  return (
    <Showcase50
      eyebrow="The library"
      heading="The files we work from, free to take"
      description="These are the working documents behind the writing."
      downloadLabel="Download"
      resources={[
        {
          image: { src: "/library/estimate.jpg", alt: "A printed estimate" },
          format: "Spreadsheet",
          title: "The estimate sheet",
          description: "Every line we price, with the ranges we quote inside.",
          href: "/library/estimate-sheet",
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringBadge6 label above the hairline rule
headingstringSection heading under the rule
descriptionstringSupporting paragraph
downloadLabelstringLabel on every card's button
resourcesResource[][]Cards, three to a row on desktop
classNamestringExtra classes for the outer section
ts
type Resource = {
  image: ResourceImage;
  format: string;
  title: string;
  description: string;
  href: string;
};

type ResourceImage = {
  src: string;
  alt: string;
};

Behavior notes

  • The card is a div and only the button is a link. Wrapping the card in a link as well would nest one anchor inside another, which is invalid markup and unpredictable to click.
  • The description carries flex-1, so buttons line up along the bottom of the row however long the copy is.
  • The button is Button1 at full width, which is a layout class only. Its own padding and height are untouched, so it matches every other seal button on the site.
  • Hovering anywhere on the card darkens its border and eases the preview image up in scale, inside motion-safe.
  • format is free text, so it can carry "Spreadsheet", "Figma file" or a file size without a fixed vocabulary.

More Showcase blocks

View all Showcase
PRO

showcase52

Linked Programme Cards

Four cards on a muted fill, each one a whole link that inverts to ink on hover: a photograph drifting across the top, a serif name facing its arrow, the shape it takes, a paragraph and a detail line at the foot.

PRO

showcase1

Interactive Hotspot Image

Full-width image showcase with clickable animated hotspots that reveal feature popovers with icons and descriptions. Perfect for product tours and interactive feature demonstrations.

PRO

showcase44

Brand Partner Grid

Centered eyebrow, heading, and description above a grid of borderless brand cards — each with a square, colorable logo plate, a title and short description, and a full-width animated seal detail button.

PRO

showcase7

Screenshot with Testimonial Quote

Two-column section combining product image with large customer quote, author avatar, name, and role. Perfect for social proof sections alongside product visuals.

PRO

showcase10

Video Demo Thumbnail

Video preview section with thumbnail image, centered play button overlay, duration badge, and CTA buttons below. Perfect for product demo videos and explainer content.

PRO

showcase28

Markdown Editor With Live Preview

Browser-chrome card rendering a markdown source editor on the left and the rendered HTML on the right — minimal monochrome syntax markers, structured preview blocks (headings, paragraphs, lists, fenced code). Every label is editable; no media props required.