Search

Search components and blocks

Sign in

Blog Blocks

Editorial sections for articles, posts and updates.

Blog Section

Open page

A blog grid with capsule category tabs. The tabs reuse the motion Tabs component with a sliding pill; switching category filters the grid with a layout animation, so remaining cards glide into their new slots while others scale out and new ones spring in. Cover photos fade in from a blur as they load, zoom slowly on hover, and each card lifts with a spring while its arrow nudges forward.

pnpm dlx shadcn@latest add @ditherui/blog-section

From the blog

Notes on design, engineering and shipping.

Designing motion that feels inevitable
Design6 min

Designing motion that feels inevitable

Springs, easing and the small details that make an interface feel alive instead of animated.

Sep 28Read
How we built a shared-layout tab bar
Engineering8 min

How we built a shared-layout tab bar

A walkthrough of layoutId, spring tuning and why the pill never teleports.

Sep 21Read
Shipping agents your users can actually trust
AI7 min

Shipping agents your users can actually trust

Progress, approvals and honest status lines: the UI patterns behind reliable AI agents.

Sep 14Read
Roadmap: what is landing this quarter
Product4 min

Roadmap: what is landing this quarter

New blocks, a faster docs site and a handful of templates you have been asking for.

Sep 09Read
Color systems that survive dark mode
Design5 min

Color systems that survive dark mode

Tokens first, hex never. How we keep every component themeable from one stylesheet.

Aug 30Read
Streaming UI without the jank
Engineering9 min

Streaming UI without the jank

Batching state, stable keys and cheap animations for long-running generations.

Aug 22Read

Install

$ pnpm dlx shadcn@latest add @ditherui/blog-section

Props

className / ...section propsReact.ComponentProps<"section">—

Featured Blog

ProOpen page

One story takes the spotlight: a full-bleed cover with a slow settle-in zoom, a pulsing Featured tag and a staggered text reveal. The rest wait in a strip of numbered cards below. Click any of them and it is promoted into the spotlight with a blur crossfade, while the previous feature drops into the strip with a spring.

pnpm dlx shadcn@latest add @ditherui/featured-blog
Making space for work that matters
FeaturedDesign · 6 min read

Making space for work that matters

JCJamie ChenSep 24, 2026
Read story

Props

className / ...section propsReact.ComponentProps<"section">—

Article Feed

ProOpen page

A reading-list feed: author line, bold headline, a two-line standfirst and a thumbnail, split by hairlines. Like and Save are live: the heart pops with a spring while its count rolls to the new number, and the bookmark drops into place and feeds a badge on the Saved tab. Switching between the underline tabs blurs the current list out and the next one in, its rows resolving one after another (the same reveal plays on first render), un-saving on the Saved tab slides the story out, and hovering a row dims the rest so you can focus on one.

pnpm dlx shadcn@latest add @ditherui/article-feed
MKMira Kapoor· Aug 23

How I prepared for 50 engineering interviews and landed the offer

The study loop, the mistakes, and the one habit that actually moved the needle.

4
How I prepared for 50 engineering interviews and landed the offer
NBNoah Brandt· Apr 6

Design systems are dead. Long live design tokens

Why shipping a component library is not the same as shipping a system.

362
Design systems are dead. Long live design tokens
SASofia Alvarez· Sep 1

What should programmers do while the AI writes the code?

Hint: not start another coding loop.

87
What should programmers do while the AI writes the code?
ECEthan Cole· Sep 17

Motion is a feature, not a finish

Treating animation as part of the interaction model instead of a coat of paint.

41
Motion is a feature, not a finish

Props

className / ...div propsReact.ComponentProps<"div">—

Blog Reader

ProOpen page

A blog grid that opens into a full article page. Click a card and its cover grows into the article hero with a shared-layout transition, the headline and paragraphs resolve in one after another. Back returns to the grid. Posts carry their own body, so swap in your CMS data.

pnpm dlx shadcn@latest add @ditherui/blog-reader

From the blog

Click a story to read it.

Props

postsPost[]four sample posts
classNamestring—

Suggested components