Skip to main content

Best Boilerplate with Blog Built-In: T3 Stack vs AstroWind vs Makerkit

·StarterPick Team
blogcontent marketingseosaas boilerplatecomparison

Content Marketing Is Your Growth Engine

For most SaaS products, organic search is the most sustainable growth channel. And organic search requires content — blog posts, guides, comparisons, tutorials. The question isn't whether you need a blog, it's how your boilerplate handles it.

Three starters approach blogging differently: T3 Stack uses MDX with content collections, AstroWind uses Astro Content Collections with near-zero JavaScript, and Makerkit uses a plugin-based blog with MDX support.

The right choice depends on whether content is your primary growth strategy (AstroWind) or a secondary feature of your SaaS app (T3/Makerkit).

TL;DR

AstroWind (free, Astro) has the best blogging experience — content collections with typed schemas, near-zero JavaScript, perfect Lighthouse scores, and built-in RSS/sitemap/OG images. Makerkit ($249+, Next.js) provides a clean blog plugin with MDX, categories, and SEO metadata integrated into your SaaS app. T3 Stack (free, Next.js) supports MDX but requires manual blog setup — maximum flexibility, minimum built-in features. Choose AstroWind for content-first sites. Choose Makerkit for SaaS with integrated blog. Choose T3 for maximum customization.

Key Takeaways

  • AstroWind's blog is the fastest — near-zero JavaScript means perfect Lighthouse scores and instant page loads.
  • Makerkit's blog integrates with your SaaS — same auth, same design system, same deployment. AstroWind is a separate site.
  • T3 Stack gives you MDX foundations but you build the blog features yourself — category pages, RSS feed, OG images, sitemap.
  • Content collections with typed schemas (Astro, Velite) catch frontmatter errors at build time. Manual MDX setups catch them in production.
  • RSS and sitemap generation are crucial for SEO — AstroWind includes both. T3 requires manual setup.
  • For serious content marketing, consider using Astro for the blog and your SaaS boilerplate for the app — best of both worlds.

Blog Feature Comparison

FeatureT3 StackAstroWindMakerkit
Blog included⚠️ MDX foundations✅ Full blog system✅ Blog plugin
Content formatMDXMarkdown/MDXMDX
Typed schemas❌ Manual✅ Content Collections✅ Plugin schemas
Categories/tags❌ Manual✅ Built-in✅ Built-in
Author pages⚠️ Basic
Pagination❌ Manual✅ Built-in✅ Built-in
Related posts⚠️ Basic
Reading time
Table of contents⚠️ Manual
RSS feed❌ Manual✅ Automatic⚠️ Manual
Sitemap⚠️ next-sitemap✅ Automatic✅ Plugin
OG images❌ Manual✅ Auto-generated✅ Configured
Search⚠️ Client-side
Syntax highlighting✅ MDX plugin✅ Shiki✅ MDX plugin
Dark mode
Draft posts

AstroWind: Content-First Architecture

AstroWind treats blogging as a first-class concern. Posts are markdown files with typed frontmatter:

---
title: "How We Reduced Bundle Size by 60%"
description: "A practical guide to JavaScript bundle optimization..."
publishDate: 2026-03-08
image: ~/assets/images/bundle-optimization.jpg
category: Engineering
tags: [performance, webpack, optimization]
author: Jane Developer
draft: false
---

Your blog content here...

The content collection schema validates every post at build time:

const blogCollection = defineCollection({
  type: 'content',
  schema: z.object({
    title: z.string().max(80),
    description: z.string().max(160),
    publishDate: z.date(),
    image: image().optional(),
    category: z.enum(['Engineering', 'Product', 'Business']),
    tags: z.array(z.string()),
    author: z.string(),
    draft: z.boolean().default(false),
  }),
});

If a post has a typo in the category field or missing required metadata, the build fails — not production.

Performance

AstroWind blog posts ship ~5-15 KB of JavaScript. A typical blog post page:

  • HTML: ~20 KB (complete article)
  • CSS: ~15 KB (Tailwind)
  • JS: ~5 KB (mobile menu, theme toggle)
  • Total: ~40 KB

Compared to T3/Makerkit blog posts:

  • HTML: ~15 KB (hydration markers + content)
  • CSS: ~15 KB (Tailwind)
  • JS: ~80-120 KB (React runtime + hydration)
  • Total: ~110-150 KB

AstroWind pages load 2-3x faster.

Makerkit: Blog as Part of Your SaaS

Makerkit's blog lives within your Next.js application. Same design system, same navigation, same deployment. Posts are MDX files in your project:

content/
├── blog/
│   ├── how-we-reduced-bundle-size.mdx
│   ├── announcing-v2.mdx
│   └── customer-success-story.mdx

The advantage: your blog shares auth with your app. You can have gated content (blog posts visible only to logged-in users), personalized CTAs, and seamless navigation between blog and product.

The tradeoff: your blog loads React's runtime. Lighthouse Performance scores drop from 98-100 (AstroWind) to 85-95 (Makerkit).

T3 Stack: Build Your Own Blog

T3 Stack includes MDX support through @next/mdx or contentlayer (now velite), but you build the blog features yourself:

// You write this
export default function BlogPost({ post }: { post: Post }) {
  return (
    <article>
      <h1>{post.title}</h1>
      <time>{post.date}</time>
      <MDXContent components={mdxComponents} />
    </article>
  );
}

// And this
export function generateStaticParams() {
  return allPosts.map(post => ({ slug: post.slug }));
}

// And the RSS feed, and the sitemap, and the OG images...

Maximum flexibility. Maximum work. If you enjoy building blog infrastructure, T3 gives you full control. If you want to write posts and ship, AstroWind or Makerkit save hours.


SEO Capabilities

FeatureT3 StackAstroWindMakerkit
Meta title/description✅ Metadata API✅ Built-in✅ Plugin
Canonical URLs⚠️ Manual✅ Automatic✅ Automatic
JSON-LD structured data❌ Manual✅ Article schema✅ Plugin
Open Graph images❌ Manual✅ Auto-generated✅ Configured
Twitter cards❌ Manual✅ Built-in✅ Built-in
Sitemap⚠️ next-sitemap pkg✅ @astrojs/sitemap✅ Plugin
RSS feed❌ Manual✅ @astrojs/rss⚠️ Manual
Robots.txt⚠️ Manual✅ Configured✅ Plugin
Internal linking❌ Manual✅ Related posts⚠️ Manual
Page speed (Lighthouse)85-9598-10088-95

For SEO-driven content marketing, AstroWind's out-of-the-box SEO features are unmatched. Every blog post automatically gets structured data, OG images, canonical URLs, and inclusion in the sitemap and RSS feed.


When to Choose Each

Choose AstroWind If:

  • Content marketing is your primary growth strategy — you'll publish 4+ posts per month
  • Page speed matters for SEO — Google uses Core Web Vitals as a ranking factor
  • You want zero-config blogging — categories, tags, RSS, sitemap, OG images all built-in
  • Your blog and app are separate — blog drives traffic, app handles users (different concerns)

Choose Makerkit If:

  • Blog is part of your SaaS — same design, same auth, same navigation
  • You need gated content — blog posts visible only to subscribers or logged-in users
  • Moderate publishing frequency — 2-4 posts per month
  • You want one codebase — blog and app deploy together

Choose T3 Stack If:

  • You want full control over every aspect of your blog's implementation
  • Blog is a secondary feature — a few announcement posts, not a content engine
  • You'll build custom features — interactive MDX components, embedded demos, custom layouts
  • You enjoy building infrastructure — RSS, sitemap, OG image generation are fun challenges

The Best of Both Worlds

Many successful SaaS products use Astro for the blog and Next.js (T3/Makerkit) for the app:

www.example.com/blog  → AstroWind (perfect SEO, zero JS)
app.example.com       → T3/Makerkit (full SaaS functionality)

The blog drives organic traffic. CTAs link to the app for signup. Different tools for different jobs.


Compare blog features across 50+ boilerplates on StarterPick — find the right content foundation for your growth strategy.

Check out this boilerplate

View AstroWind on StarterPick →

Comments