Feature Bento
ComponentsFeature Bento
SectionsNew

Feature Bento

Show what your product makes possible. A flexible feature grid that pairs concrete benefits with useful visual previews.

USE IT FORProduct landing pagesFeature overviewsSaaS homepages
React + CSS

folio®EXAMPLE WORKSPACE

MADE FOR YOUR EVERYDAY

Less scattered. More together.

ONE SHARED HOME

See the work, at a glance.

Bring projects, notes, and next steps into one calm workspace.

BETTER TOGETHER

Make room for your team.

Share a project and keep everyone working from the same page.

A CLEARER WEEK

Know what’s coming next.

Keep reviews and milestones close to the work they belong to.

FIND YOUR FLOW

Less looking. More doing.

Find the document you need, then get back to the good part.

Product benefits, with a preview of how they work.

Live component. Go ahead, interact.
01

Installation

Run this in your shadcn-configured React project. The component and stylesheet are added together.

TERMINAL
npx shadcn@latest add http://localhost:5173/r/feature-bento.json

This command uses the current site address. For localhost, keep this preview running on the same computer. Files follow your configured components alias.

02

Usage

Import the component and make the details your own.

TypeScript
import { FeatureBento } from '@/components/anticraft/FeatureBento';

export function Example() {
  return (
    <FeatureBento
      title="Less scattered. More together."
      items={[
        {
          id: 'overview', eyebrow: 'ONE SHARED HOME',
          title: 'See the work, at a glance.',
          description: 'Bring projects, notes, and next steps into one calm workspace.',
          span: 'wide',
          media: <img src="/images/workspace-overview.jpg" alt="" />,
          href: '/features/workspace', linkLabel: 'Explore the workspace',
        },
        {
          id: 'sharing', eyebrow: 'BETTER TOGETHER',
          title: 'Make room for your team.',
          description: 'Share a project and keep everyone working from the same page.',
          media: <img src="/images/team-sharing.jpg" alt="" />,
        },
        {
          id: 'calendar', eyebrow: 'A CLEARER WEEK',
          title: 'Know what’s coming next.',
          description: 'Keep reviews and milestones close to the work they belong to.',
          media: <img src="/images/project-calendar.jpg" alt="" />,
        },
        {
          id: 'search', eyebrow: 'FIND YOUR FLOW',
          title: 'Less looking. More doing.',
          description: 'Find the document you need, then get back to the good part.',
          span: 'wide',
          media: <img src="/images/workspace-search.jpg" alt="" />,
          href: '/features/search', linkLabel: 'Explore search',
        },
      ]}
    />
  );
}
03

Props

PropTypeDefaultDescription
itemsFeatureBentoItem[]RequiredFeatures with unique id, title, and description. Optional fields are eyebrow, decorative ReactNode media, span, href, and linkLabel. An empty array renders nothing. DOM reading order always follows your item order.
items[].mediaReactNodeundefinedOptional decorative product preview or artwork. Media is hidden from assistive technology and rendered inert; keep meaningful information in the title and description, and keep links or controls out of artwork. Supply your own images for the example paths.
items[].eyebrowstringundefinedA short visible label above a feature title, such as ONE SHARED HOME.
items[].span'default' | 'wide' | 'tall''default'Default fills one grid cell, wide spans two columns, and tall spans two rows on the large layout. Tall resets in the two-column layout; all spans reset in the single-column layout.
items[].href / linkLabelstringundefined / 'Explore ' + titleAn optional real destination and its link text. Omitting href removes the link; the article itself remains a readable feature card rather than a pretend button.
titlestring'Small details. A better day.'The visible section heading and accessible name of the feature section.
classNamestring''Additional classes. Theme with --ac-bento-surface, --ac-bento-card, --ac-bento-media, --ac-bento-ink, --ac-bento-muted, --ac-bento-accent, --ac-bento-line, and --ac-bento-font.
04

Motion & accessibility

Considered by default.

The layout adapts to its own width: three columns by default, two below 740px, and one below 480px. Cards lift slightly on a fine pointer and show a stronger border when a contained link receives focus. Optional feature links are ordinary anchors; cards without links contain no extra keyboard stops. Reduced motion removes the hover lift and arrow movement. The demo’s small workspace views are decorative illustrations, with all essential benefits repeated in the card copy.

Use semantic content and meaningful labels in your composition. Check contrast and keyboard behavior with your own styles and content.