Blog List

Blog index with category chips and a gliding pill, a wide featured post, and cards with gradient or image covers, excerpt, author avatar, read time and an en-US date that lift on hover; filtering reflows the grid with shared layout and Load more appends the next page with a stagger, falling back to `onLoadMore` for server pagination.

Preview

Blog List preview width

Install

Add it with the shadcn CLI, or copy the source manually.

$ bunx --bun shadcn add @karaui/blog-list
@karaui not found? Add it to components.json
{
  "registries": {
    "@karaui": "https://karaui.kamisama-v0.my.id/r/{name}.json"
  }
}

@karaui is in shadcn's public registry directory, so the latest CLI needs no setup. On an older CLI, merge this into the existing file once and every @karaui/… install resolves.

API Reference

posts
BlogPost[]
—
categories?
string[]

Chip order. Default: categories in order of first appearance.

—
category?
string

Controlled category; `"all"` shows everything.

—
defaultCategory?
string
all
onCategoryChange?
((category: string) => void)
—
pageSize?
number

Posts revealed per "Load more". Default 6.

6
onLoadMore?
(() => void | Promise<void>)

Fetch more posts when the local ones run out. Append them to `posts`; the button shows a spinner until the promise settles.

—
hasMore?
boolean

Whether `onLoadMore` can return more. Default false.

false
onPostClick?
((post: BlogPost) => void)

Called for posts without `href`.

—
allLabel?
string

Label of the everything chip. Default "All".

All
locale?
string

Default "en-US".

en-US
className?
string
—

Keep in mind

Some components on this site are inspired by or recreated from existing work across the web. I'm not here to take credit; just to learn, experiment, and sometimes push things a bit further. If something looks familiar and I forgot to mention you, reach out and I'll fix that right away.

Updated