N/A

BlogPostGrid

Render responsive blog and content teaser grids from display-ready post data.

Latest articles

Render display-ready post cards while your app owns routes, dates, images, authors, and content loading.

A bright workspace with design notes and a laptop
DesignApr 23, 20268 min read

From mockup to market: a practical design process

A field guide to moving from research and wireframes into shippable Nuxt interfaces without losing product context.

Emma ThompsonEmma Thompson
Color swatches and design materials
SystemsMar 15, 2026

Color systems that survive implementation

How semantic tokens keep visual decisions portable across marketing pages, docs, and product surfaces.

UXJan 28, 20267 min read

The case for slow design in fast interfaces

Designing moments of pause can help content-heavy products feel more intentional and easier to scan.

Installation

pnpm dlx shadcn-vue@latest add "https://ui.stackhacker.io/r/blog-post-grid.json"

Usage

<script setup lang="ts">
import { BlogPostGrid, type BlogPostGridPost } from '@/components/blog-post-grid'

const posts: BlogPostGridPost[] = [
  {
    id: 'design-process',
    to: '/blog/design-process',
    title: 'From mockup to market',
    description: 'A field guide to moving from research into shippable interfaces.',
    dateLabel: 'Apr 23, 2026',
    badge: 'Design',
    readTime: '8 min read',
    image: {
      src: '/images/design-process.jpg',
      alt: 'Design notes and a laptop'
    },
    authors: [
      { name: 'Emma Thompson' }
    ]
  }
]
</script>

<template>
  <BlogPostGrid
    title="Latest articles"
    description="Render display-ready post cards while your app owns routing and formatting."
    :posts="posts"
  />
</template>

App-Owned Post Data

BlogPostGrid renders display-ready data. Your app owns fetching, sorting, slicing, localization, date formatting, route construction, image policy, and analytics.

Pass formatted strings such as Apr 23, 2026 through dateLabel. The component does not call new Date(), generate routes from slugs, import global post data, or install icon/button/avatar dependencies.

Use to for internal Nuxt routes and href for external links. For target="_blank", the component adds rel="noopener noreferrer" unless you provide a custom rel value.

Examples

Featured first post

Latest articles

Render display-ready post cards while your app owns routes, dates, images, authors, and content loading.

A bright workspace with design notes and a laptop
DesignApr 23, 20268 min read

From mockup to market: a practical design process

A field guide to moving from research and wireframes into shippable Nuxt interfaces without losing product context.

Emma ThompsonEmma Thompson
Color swatches and design materials
SystemsMar 15, 2026

Color systems that survive implementation

How semantic tokens keep visual decisions portable across marketing pages, docs, and product surfaces.

UXJan 28, 20267 min read

The case for slow design in fast interfaces

Designing moments of pause can help content-heavy products feel more intentional and easier to scan.

API Reference

Props

PropTypeDefaultDescription
titlestringOptional section title.
descriptionstringOptional supporting section copy.
postsBlogPostGridPost[] | null[]Display-ready post data supplied by your app.
featuredFirstbooleantrueFeature the first card on medium and larger screens.
classstringAdditional CSS classes for the section.

Types

interface BlogPostGridImage {
  src: string
  alt?: string
}

interface BlogPostGridAuthor {
  name: string
  avatar?: BlogPostGridImage
}

interface BlogPostGridPost {
  id?: string
  to?: string
  href?: string
  target?: HTMLAnchorElement['target']
  rel?: string
  title: string
  description?: string
  dateLabel?: string
  badge?: string
  readTime?: string
  image?: BlogPostGridImage
  authors?: BlogPostGridAuthor[]
}