Features
Bento feature grid
Features of unequal weight in a bento layout: one large card, two tall, two small. Built with BentoGrid and Card.
Live demo
Full width · the frame has its own viewport, so the breakpoints are real
What it uses
Imports
import { Badge, BentoGrid, Card, Container, Heading, Section, Stack, Text } from '@the_viveksingh/vivek-ui'The block
This is the file that renders the demo above, read at build time. Copy it into your project, change the words, and it runs — the only thing it needs is @the_viveksingh/vivek-ui and its stylesheet.
import {
Badge,
BentoGrid,
Card,
Container,
Heading,
Section,
Stack,
Text,
} from '@the_viveksingh/vivek-ui'
function Tile({ title, body, badge }: { title: string; body: string; badge?: string }) {
return (
<Card padding="lg" style={{ blockSize: '100%' }}>
<Stack gap={2}>
{badge ? (
<Badge size="sm" variant="soft">
{badge}
</Badge>
) : null}
<Heading level={3} size="sm">
{title}
</Heading>
<Text size="sm" tone="muted">
{body}
</Text>
</Stack>
</Card>
)
}
export default function FeaturesBento() {
return (
<Section>
<Container>
<Section.Header
eyebrow="Platform"
title="One tool, the whole loop"
description="Plan, build, review and measure without leaving the tab."
/>
<BentoGrid cols={{ base: 1, md: 3 }} rowHeight="11rem" gap={4}>
<BentoGrid.Item colSpan={{ base: 1, md: 2 }} rowSpan={2}>
<Tile
badge="New"
title="Review that keeps up"
body="Every pull request gets a summary, the risky files first, and a checklist generated from your own conventions. Reviewers read less and catch more."
/>
</BentoGrid.Item>
<BentoGrid.Item>
<Tile
title="Plan"
body="Issues, cycles and roadmaps in the same keyboard-first interface."
/>
</BentoGrid.Item>
<BentoGrid.Item>
<Tile
title="Measure"
body="Cycle time, review latency and deploy frequency, per team."
/>
</BentoGrid.Item>
<BentoGrid.Item colSpan={{ base: 1, md: 3 }}>
<Tile
title="Integrates with what you have"
body="GitHub, GitLab, Slack, Linear, Jira, PagerDuty — two-way, and a webhook for everything else."
/>
</BentoGrid.Item>
</BentoGrid>
</Container>
</Section>
)
}