
The Future of Design Systems in 2025
Jan 15, 2025
Exploring emerging trends in design systems, from AI-assisted theming to cross-platform consistency.
Blog post grid with featured card and smaller cards layout. Includes category filters and separate mobile tile layout. Data sourced from Sanity CMS.
Showing with mock data. Images would come from Sanity CMS.

Jan 15, 2025
Exploring emerging trends in design systems, from AI-assisted theming to cross-platform consistency.

Jan 10, 2025
A deep dive into creating WCAG-compliant UI components with proper keyboard navigation and screen reader support.

Jan 5, 2025
How to apply animation principles to create delightful, performant web experiences.

Jan 15, 2025
Design Systems, Trends
Exploring emerging trends in design systems, from AI-assisted theming to cross-platform consistency.

Jan 10, 2025
Accessibility, Development
A deep dive into creating WCAG-compliant UI components with proper keyboard navigation and screen reader support.

Jan 5, 2025
Animation, UX
How to apply animation principles to create delightful, performant web experiences.
posts
BlogPost[] (required)Array of blog post data from Sanity CMS.
title
string (default: "Latest articles")Section heading. Set to empty string to hide.
subtitle
string (optional)Description text below heading.
showViewAll
boolean (default: false)Whether to show "View all posts" button.
maxCols
2 | 3 (default: 3)Maximum columns on desktop.
noPadding
boolean (default: false)Remove section padding for embedding in other layouts.
Featured Card
First post displayed larger with horizontal layout. Uses .card-featured class with gradient background.
Grid Cards (2-3 columns)
Remaining posts in responsive grid. Uses .card-blog class for consistent styling.
Category Filters
Badge filter pills using filter/filterActive variants
Tile Layout
Compact horizontal tiles with thumbnail and text. Uses the shared .card-tile class.
Swipeable Filters
Horizontal scroll for category pills on mobile
.card-blog
Gradient from accent-6 to surface-deep.card-blog:hover
Intensified gradient with accent border.card-featured
Larger gradient for hero-style display.card-tile
Shared mobile compact tile (also used by case-study tiles)// Query for blog posts
const query = `
*[_type == "blogPost"] | order(publishedAt desc) {
_id,
title,
slug,
publishedAt,
excerpt,
mainImage,
tags
}
`
interface BlogPost {
_id: string
title: string
slug: { current: string }
publishedAt: string
excerpt?: string
mainImage?: SanityImage
tags?: string[]
}import { CategoryFilters } from '@/components/ui/CategoryFilters'
// Gets unique categories from posts
<CategoryFilters
categories={['All', 'Design', 'Development', 'Strategy']}
activeCategory={activeCategory}
onCategoryChange={setActiveCategory}
/>import { BlogGrid } from '@/components/sections/BlogGrid'
import { CategoryFilters } from '@/components/ui/CategoryFilters'
export default async function BlogPage() {
const posts = await getBlogPosts()
return (
<main>
<CategoryFilters {...filterProps} />
<BlogGrid posts={posts} />
</main>
)
}
// With custom options
<BlogGrid
posts={posts}
showViewAll={true}
maxCols={2}
title="Related Articles"
/>import { BlogGrid } from '@/components/sections/BlogGrid'
import { FeaturedBlogCard } from '@/components/sections/FeaturedBlogCard'
import { CategoryFilters } from '@/components/ui/CategoryFilters'src/components/sections/BlogGrid.tsxsrc/components/sections/FeaturedBlogCard.tsxsrc/components/sections/CategoryFilters.tsxsanity/schemas/blogPost.ts