Building Accessible Documentation
Learn how to create documentation that works for everyone, including users with disabilities. We'll cover WCAG guidelines, semantic HTML, and testing strategies.
A flexible blog section component designed to showcase articles, posts, and content in various layouts. Perfect for documentation sites, company blogs, and content-heavy pages with responsive design and customizable display options.
import BlogSection from "@/components/blog/BlogSection.astro"
const posts = [
{
title: "Getting Started with Documentation",
excerpt: "Learn how to create beautiful documentation sites with modern tools and best practices.",
date: "2024-01-15",
author: "Jane Smith",
tags: ["Tutorial"],
readTime: "5 min read"
},
];
// ... or these are typically attained via Astro Content Collections.
<BlogSection
title="Latest Articles"
tagline="From our blog"
description="Stay updated with the latest insights, tutorials, and best practices."
posts={posts}
layout="grid"
/>
Learn how to create documentation that works for everyone, including users with disabilities. We'll cover WCAG guidelines, semantic HTML, and testing strategies.
Explore how to create consistent, scalable design systems that improve both user experience and development workflow.
Speed up your documentation sites with these proven optimization techniques and modern web performance best practices.
We've just released a comprehensive component library with over 50 pre-built components for faster development.
Our new search algorithm provides more accurate results and better performance across all documentation sites.
Explore how artificial intelligence is revolutionizing the way we create, maintain, and optimize documentation. From automated content generation to intelligent user assistance, discover the tools and techniques that are shaping the future of technical writing.
Meet the amazing developers who contribute to our open source projects and help make documentation better for everyone.
Essential guidelines for creating clear, concise, and effective technical documentation that users actually want to read.
Prop | Type | Default | Description |
---|---|---|---|
title | string | Default title | Main heading for the blog section |
tagline | string | 'Latest insights' | Small tagline above the title |
description | string | Default description | Descriptive text below the title |
posts | BlogPost[] | [] | Array of blog post objects |
layout | 'grid' | 'list' | 'featured' | 'grid' | Layout style for displaying posts |
showExcerpts | boolean | true | Whether to show post excerpts |
showTags | boolean | true | Whether to show post tags |
showAuthors | boolean | true | Whether to show post authors |
showReadTime | boolean | true | Whether to show estimated read time |
className | string | '' | Additional CSS classes |
interface BlogPost {
title: string; // Post title (required)
date: string; // Publication date in ISO format (required)
author: string; // Post author name (required)
excerpt?: string; // Post excerpt/summary
tags?: string[]; // Post tags
image?: string; // Featured image URL
readTime?: string; // Estimated read time
}
Perfect for showcasing multiple posts with equal visual weight:
<BlogSection layout="grid" posts={posts} />
Ideal for chronological content display:
<BlogSection layout="list" posts={posts} />
Best for highlighting important content:
<BlogSection layout="featured" posts={posts} />
Control what information is shown for each post:
<BlogSection
posts={posts}
showExcerpts={true}
showCategories={true}
showAuthors={false}
showReadTime={true}
/>
Use the slot to add custom content like CTAs or navigation:
<BlogSection title="Latest Articles" posts={posts}>
<a href="/docs-site-kickstarter/blog" class="blog-cta">
View All Articles →
</a>
</BlogSection>
Dates are automatically formatted using the browser’s locale:
// Input: "2024-01-15"
// Output: "January 15, 2024"
---
// In your Astro page
import { getCollection } from 'astro:content';
import BlogSection from '@/components/block/BlogSection.astro';
const posts = await getCollection('blog');
const formattedPosts = posts.map(post => ({
title: post.data.title,
excerpt: post.data.excerpt,
date: post.data.date,
author: post.data.author,
image: post.data.image,
tags: post.data.tags,
readTime: post.data.readTime
}));
---
<BlogSection posts={formattedPosts} />
// Fetch from headless CMS
const posts = await fetch('/api/posts').then(res => res.json());
<BlogSection posts={posts} layout="featured" />