Reading Paths By Time AvailablePRO

Three columns keyed to how long the reader has rather than what they want, each opening with the time span, a promise for it, and the two or three pieces that fit inside it.

Feature270: Reading Paths By Time Available

Three columns keyed to how long the reader has rather than what they want, each opening with the time span, a promise for it, and the two or three pieces that fit inside it.

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

Base UI flavor

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

This installs the block to components/beste/block/feature270.tsx and the badge6 component it uses for the eyebrow (installed to components/beste/component/badge6.tsx).

Quick start

The installed file exports feature270Demo alongside the block: the exact props behind the preview above. Spread it to get a working reading path in one line.

tsx
import { Feature270, feature270Demo } from "@/components/beste/block/feature270";

export default function StartHerePage() {
  return <Feature270 {...feature270Demo} />;
}

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

tsx
import { Feature270 } from "@/components/beste/block/feature270";

export default function StartHerePage() {
  return (
    <Feature270
      eyebrow="Where to begin"
      heading="Pick by the time you have, not the topic"
      description="Most reading lists assume you have a free afternoon."
      slots={[
        {
          duration: "Five minutes",
          title: "One idea, argued once",
          description: "Short pieces that stop as soon as the point is made.",
          links: [
            { label: "Why we stopped sending ranges", href: "/essays/ranges" },
            { label: "Saying no in one paragraph", href: "/essays/no" },
          ],
        },
      ]}
    />
  );
}

Props

PropTypeDefaultDescription
eyebrowstringBadge6 label above the hairline rule
headingstringSection heading under the rule
descriptionstringSupporting paragraph
slotsTimeSlot[][]One column per span of time
classNamestringExtra classes for the outer section
ts
type TimeSlot = {
  duration: string;
  title: string;
  description: string;
  links: ReadingLink[];
};

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

Behavior notes

More Feature blocks

View all Feature
PRO

feature162

Numbered Steps Grid

3-column grid of numbered steps with titles and descriptions. Ideal for onboarding flows, process overviews, and how-it-works sections.

PRO

feature274

Archive By Year Columns

One column per year on a hairline, each stating the year as a figure with its published count beside it, a sentence on what that year was about, and the pieces that defined it.

PRO

feature267

Center-Line Journey Timeline

A feature that runs a hairline down the middle of the section and alternates its stages either side of it, dropping an image tile with a live phone frame onto the step worth showing.

FREE

feature230

Three editorial pillar columns

Three tall portrait images in a row, each paired with a padded numeral, title, and description — a monochrome statement of guiding principles.

PRO

feature116

Checkbox Checklist Grid

2-column grid of checklist items with checkbox icons and strikethrough styling. Great for progress tracking, launch checklists, or task lists.

PRO

feature224

Capability Checklist Split

Two-column split with an eyebrow, big heading, description, and CTA on the left and a checklist of capabilities with rounded check seals on the right.

Markdown version