Back to blog

Why we picked content-collections for the blog

A short note on the engine choice for the kourier.sh marketing blog — and why we rejected Velite, Fumadocs-for-blog, and the dead options.

by Larkin
1 min read

Why content-collections

The marketing site blog is table-stakes — but the engine choice behind it is load-bearing. We evaluated three options in 2026:

  1. content-collections (chosen)
  2. Velite (rejected)
  3. fumadocs-mdx standalone (rejected for blog)

Why not Velite

Velite has arguably better DX (s.metadata(), s.isodate(), pre-computed reading time). But:

  • Single-maintainer pre-1.0
  • Turborepo / incremental build / Next.js plugin are explicitly not done on the official roadmap
  • Velite uses Zod 4 — major-version mismatch with the rest of the stack

Why not fumadocs-mdx

Fumadocs is excellent for documentation. The blog is a different surface: marketing copy, not API reference. Coupling them forces an unwanted architecture on the site.

Why content-collections

  • Sponsor-backed, multi-framework
  • Next 16 first-class since 0.2.9 (December 2025)
  • Single config file = entire engine surface → trivial to remove
  • Zod-native schema

If we ever want Velite's DX, swapping engines is a 4-8 hour migration. Documented in the docs.

Serve open models through one API.

GLM 5.2 and Qwen 3.6 35B. Two simple plans, $20/month or $50/month. No per-token metering, no lock-in.