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:
- content-collections (chosen)
- Velite (rejected)
- 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.