Arc
ComponentsBlocksDocsPricingTry the demo
Introduction
Installation
Theming
Motion
AI and MCP
Changelog
Metrics dashboard
KPI drilldownNew
Metric explorer
Revenue explorer
MRR waterfall
Cohort retention
Usage forecast
Journey flow
Connected scatterNew
Market terminalNew
Budget varianceNew
Small multiplesNew
Line replayNew
AI chatNew
AI composer
Agent runNew
SidebarPro4
Page header
Command palette
Notification center
Empty states
Login and sign up5
OTP input
Multi-step formPro
Settings page
Security settings
Billing overview
Usage billingNew
Team members
Invite peopleNew
Team directory
Roles and permissions
API keys
Webhooks
Integrations
Plan comparison
Pricing calculatorNewPro
Usage pricingPro
Cart drawerNewPro
Checkout summaryNewPro
Invoice studio
Wallet card
Product listingNew
Product detailNew
Inbox triage
Support conversation
Support widget
File upload
Media playerPro
Week calendarNew
Availability picker
Project board
Release readiness
Hero sectionNew
Hero signupNewPro
Scroll storyNewPro
Spotlight gridNewPro
Feature bentoNewPro
Comparison tableNew
Logo marquee
Studio perspectivesPro
Stats bandNew
Changelog feed
FAQ sectionNew
Contact sectionNew
Team showcasePro
Blog gridNew
Site headerNew
Site footerNew
CTA sectionNew
Newsletter signupNew
Revenue globe
Customer galaxy
Semantic zoom
Layout morph
What’s new80 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 "@/registry/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.
PreviousKPI drilldownNextComparison table
Arc · 75 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