Arc
ComponentsBlocksDocsPricingTry the demo
Get Pro
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboardPro
KPI drilldownPro
Metric explorerPro
Revenue explorerPro
MRR waterfallPro
Cohort retentionPro
Usage forecastPro
Journey flowPro
Uptime statusPro
Pivot builderNewPro
Choropleth explorerPro
Connected scatterPro
Horizon chartPro
Account healthPro
Market terminalPro
Budget variancePro
Small multiplesPro
Line replayPro
AI chatPro
AI composerPro
AI answerPro
Model pickerPro
Model arenaPro
Prompt studioPro
Document extractionPro
Agent memoryPro
AI side panelPro
AI inline editPro
Research runPro
AI insight cardPro
Catch upPro
AI feature launchPro
AI search barPro
AI setup wizardPro
Call insightsPro
Lead scoringPro
Agent runPro
Agent tasksPro
Agent approvalsPro
Agent routinesPro
Agent orchestratorPro
MCP serversPro
Knowledge basePro
Eval suitePro
Agent builderPro
Agent galleryPro
SidebarPro4
Page header
Command palette
Notification center
Selection toolbarPro
Empty states
Search resultsPro
Login and sign up5, free and Pro variants
Onboarding illustrationPro
OTP input
Multi-step formPro
Two-factor setupPro
Magic linkPro
Settings pagePro
Settings commandPro
Security settingsPro
Billing overviewPro
Usage billingPro
Cancel flowPro
Onboarding surveyPro
Spend alertPro
Team membersPro
Invite peoplePro
Team directoryPro
Roles and permissionsPro
Profile pagePro
API keysPro
WebhooksPro
IntegrationsPro
Environment variablesPro
Domain verifyPro
Webhook testerPro
Plan comparison
Pricing calculatorPro
Usage pricingPro
Cart drawerPro
Checkout summaryPro
Live checkoutPro
Seat managerPro
Credit top-upPro
Invoice studioPro
Wallet cardPro
Delivery trackerPro
Product listingPro
Product detailPro
Seat mapPro
Activity feedPro
Inbox triagePro
Support conversationPro
Support widgetPro
Help centerPro
Feature votingPro
File upload
Media playerPro
Week calendarPro
Availability pickerPro
Project boardPro
Gantt timelineNewPro
Release readinessPro
Kanban boardPro
Feedback boardPro
Smart schedulerPro
Task breakdownPro
Goal trackerPro
Hero section
Hero signupPro
Scroll storyPro
Spotlight gridPro
Feature bentoPro
Comparison table
Logo marquee
Studio perspectivesPro
Stats band
Changelog feed
FAQ section
Contact section
Team showcasePro
Blog grid
Site header
Site footer
CTA section
Newsletter signup
Activity terrainPro
Revenue globePro
Customer galaxyPro
Semantic zoomPro
Layout morphPro
Exploded viewPro
What’s new4 new
BlocksBlog grid

Blog grid

A blog index with a featured post, category filter, post cards, pagination and an in-place reader.

$pnpm dlx shadcn@latest add @uiarc/blog-grid
Live block · sample data

When to use

  • A marketing site blog or journal index.
  • Resource hubs with a few categories and a featured story.

When not to use

  • Use changelog-page for release notes with versions.
  • Use a data table for large archives that need sorting and search.

Installation

Add Blog grid with the shadcn CLI, or copy the source by hand.

$pnpm dlx shadcn@latest add @uiarc/blog-gridpnpm dlx shadcn@latest add @uiarc/blog-grid

Adds the block and its local dependencies, and installs motion, lucide-react. First time? Add the @uiarc registry to components.json, or use the full URL:

Usage

Use this as the index of a blog, journal or news page. Load posts from your CMS into blog-grid-data.ts or the posts prop, pass getHref to link each card to its article route, and keep category and page in your URL through the controlled props.

example.tsx
1import { BlogGrid } from "@/components/arc/blocks/blog-grid/blog-grid";2 3export function BlogIndex({ posts }: { posts: BlogPost[] }) {4  return (5    <BlogGrid6      posts={posts}7      categories={["Product", "Design", "Engineering", "Company"]}8      getHref={post => `/blog/${post.id}`}9    />10  );11}
Built fromAvatarPagination

API reference

2 parts. The first is the root.

BlogGrid

A blog index: title, category filter with a gliding highlight, a large featured post, a responsive card grid and pagination. Without getHref, cards open an in-place reader whose image morphs out of the card.

PropTypeDefaultDescription
postsBlogPost[]sample postsPosts to list. Sorted newest first by date.
categoriesstring[]–Filter labels in order. "All" is added in front.
titlestring"Journal"Section heading.
descriptionstring–Line under the heading. Pass an empty string to hide it.
categorystring–Active category, or "All" (controlled).
defaultCategorystring"All"Initial category when uncontrolled.
onCategoryChange(category: string) => void–Called when a filter is picked. The page resets to 1.
pagenumber–One based page (controlled).
defaultPagenumber1Initial page when uncontrolled.
onPageChange(page: number) => void–Called from the page numbers and the previous and next buttons.
pageSizenumber6Cards per page below the featured post.
showFeaturedbooleantrueShows the post marked featured (or the newest) of the current filter as a large card on page one.
getHref(post: BlogPost) => string–Link for each post. When set, cards are plain links and the in-place reader is off.
onPostOpen(post: BlogPost) => void–Called when a post opens, for analytics or routing.
classNamestring–Extra class on the section.

BlogPost

One post.

PropTypeDefaultDescription
idRequiredstring–Stable id, also the fallback hash link.
titleRequiredstring–Card and reader title.
excerptRequiredstring–Two line summary on cards, the lead paragraph in the reader.
categoryRequiredstring–Must match one of categories to be filterable.
dateRequiredstring–ISO date (YYYY-MM-DD).
readTimeRequirednumber–Minutes to read.
authorRequired{ name: string; avatar?: string; role?: string }–Byline.
image{ src: string; alt: string }–Cover image. Cards crop it to 3:2.
bodystring[]–Paragraphs for the in-place reader.
featuredboolean–Prefer this post for the featured slot.

Keyboard interactions

Tab
Moves through filters, cards, and pagination.
Enter
Opens the focused post, or picks the focused filter or page.
Space
Picks the focused filter or page.

Accessibility

  • Filters are buttons with aria-pressed; pagination is a nav with aria-current on the active page.
  • Each card is one link with the title, excerpt and byline as its content, so screen readers announce it once.
  • The reader moves focus to its back button, and closing returns focus to the card you opened.
  • Images carry real alt text; author avatars are decorative.

Motion

  • The filter and page highlights glide on the morph spring.
  • Filtering crossfades the grid with a short rise; paging slides it in the direction of travel.
  • Opening a post morphs the card image into the reader hero, and back on close.
  • Card images zoom 3% on hover (fine pointers only).
  • Reduced motion swaps travel and morphs for plain fades.

Responsive behavior

  • Three columns above 900px, two to 540px, then one.
  • The featured post stacks its image above the text below 680px.
  • Filters scroll sideways on phones; Previous and Next collapse to arrows.

Performance

  • Only one page of cards renders at a time; images below the fold load lazily.
  • Transitions animate transform and opacity only.

Notes for AI

Give your coding assistant the Markdown reference instead of screenshots.

  • Choose this for a blog, journal, news or resources index.
  • Pass getHref for real article routes; leave it out for a self-contained demo or a small site that reads posts in place.
  • Drive category and page from the URL with the controlled props so the index is linkable.
/components/blocks/blog-grid/markdown

The full library index for assistants is at /llms.txt.

Related

Changelog feedBlockRelease notes you can filter, open in place, and scroll through month by month.Hero sectionBlockThree full screen SaaS heroes: a live dashboard rising from the bottom edge over a drifting mesh, a workflow graph that routes sample events node by node, and editorial type over a mesh gradient.PaginationComponentMove through a long collection with clear bounds.

More like this in Pro

Explore Pro
Team showcaseProBlockAn image led team introduction with profiles that open in place.Selection toolbarProBlockA contextual batch action surface that appears when items are selected.Multi-step formProBlockA guided form that presents one decision at a time and preserves progress.
PreviousKPI drilldownNextComparison table
Arc · 134 block pagesllms.txt

On this page

  • Preview
  • When to use
  • When not to use
  • Installation
  • Usage
  • API reference
  • Keyboard
  • Accessibility
  • Motion
  • Responsive behavior
  • Performance
  • Notes for AI
  • Related
View as Markdown

Journal

Product news, design notes and engineering deep dives from the team.

A bright living room with timber beams, arched windows, and cream sofas

Design·Sep 18, 2026

The case for quiet software

Why we removed half the colors from our interface and people started finishing work faster.

Jasmine Brooks7 min read
A white tiled building facade with curved balconies

Engineering·Sep 12, 2026

How offline sync actually works

Conflict free replicated data, explained with the bugs we hit on the way to shipping it.

Daniel Kim9 min read
Terracotta rooftops of Lisbon running down to the river

Company·Sep 4, 2026

What we learned from a week in Lisbon

Forty people, one shared roadmap, and no slides allowed. Notes from our autumn offsite.

Sofia Ramirez4 min read
A home office with a wooden desk and deep green walls

Product·Aug 28, 2026

Shared views are here

Save a filter, name it, and share it with your team. Everyone sees the same thing, always current.

Emma Collins3 min read
Curved stainless steel panels of the Walt Disney Concert Hall against a blue sky

Design·Aug 21, 2026

Choosing a type scale you will not regret

Seven sizes, two weights, and the rules we use to keep them that way as the product grows.

Jasmine Brooks6 min read
Layered mountain ridges under a warm evening sky

Engineering·Aug 14, 2026

Making search ten times faster

A new query planner, a smarter index, and one very embarrassing N plus one we found along the way.

Marcus Johnson11 min read
A sunroom with a round dining table, plants, and windows on three sides

Company·Aug 6, 2026

The rituals that keep a remote team close

Written standups, demo Fridays and the one meeting we will never cancel.

Nathan Cole5 min read