Blog Hub
All blog posts organized in grid layout with thumbnails and excerpts. Perfect for content marketing.
Collection pages that organize related content beautifully. Think category pages, content hubs, and archives—all with grid layouts and schema markup.
Hub layout displays collections of related content in an attractive card grid. Each hub page introduces the category with a description, then showcases child pages with thumbnails and excerpts. Perfect for organizing blog categories, service collections, and content libraries.
Hub layout is for collection pages - blog category pages, service collections, documentation hubs. It displays child pages in an attractive card grid.
---
// src/pages/services.astro
import Layout from '@theme/layouts/Layout.astro';
import Hero from '@theme/components/sections/Hero.astro';
import CardGrid from '@theme/components/ui/CardGrid.astro';
import IconCard from '@theme/components/ui/IconCard.astro';
import { getCollection } from 'astro:content';
const title = 'Our Services';
const description = 'Professional services for your business';
// Fetch all services from content collection
const services = await getCollection('services');
---
<Layout title={title} description={description}>
<Hero
variant="centered"
heading="Our Services"
description="Quality solutions for every business need"
/>
<section class="py-16 bg-white dark:bg-slate-950">
<div class="container mx-auto px-4">
<CardGrid columns={3}>
{services.map((service) => (
<IconCard
icon={service.data.icon}
title={service.data.title}
description={service.data.description}
href={`/services/${service.slug}/`}
ctaText="Learn more"
/>
))}
</CardGrid>
</div>
</section>
</Layout> ---
// src/pages/blog/index.astro
import Layout from '@theme/layouts/Layout.astro';
import Hero from '@theme/components/sections/Hero.astro';
import CardGrid from '@theme/components/ui/CardGrid.astro';
import BlogCard from '@theme/components/ui/BlogCard.astro';
import { getCollection } from 'astro:content';
const title = 'Blog - Latest Articles';
const description = 'Tips, guides, and insights';
// Fetch all blog posts
const allPosts = await getCollection('blog');
// Sort by publish date (newest first)
const posts = allPosts.sort(
(a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf()
);
---
<Layout title={title} description={description}>
<Hero
variant="centered"
heading="Latest Articles"
description="Tips and insights for growing your business"
/>
<section class="py-16 bg-white dark:bg-slate-950">
<div class="container mx-auto px-4">
<CardGrid columns={3}>
{posts.map((post) => (
<BlogCard
title={post.data.title}
description={post.data.description}
publishDate={post.data.publishDate}
category={post.data.category}
thumbnail={post.data.thumbnail}
href={`/blog/${post.slug}/`}
/>
))}
</CardGrid>
</div>
</section>
</Layout> All blog posts organized in grid layout with thumbnails and excerpts. Perfect for content marketing.
Collection of CMS guides and tutorials organized by topic. Easy navigation for users.
Master every content format with guides on blog posts, pages, and documentation.
Complete local SEO resources covering citations, Google My Business, and optimization strategies.
Visually appealing card grid layout
CollectionPage schema markup
Highlight key items with badges
Adapts to all screen sizes
Each layout is optimized for specific content types. Choose the right one for your pages.