Why we picked content-collections for the blog
A short note on the engine choice for the DeesseJS marketing blog — and why we rejected Velite, Fumadocs-for-blog, and the dead options.
by David Pereira
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 buyers.
Why content-collections
- Sponsor-backed, multi-framework
- Same engine supastarter ships (validation by the closest competitor)
- Next 16 first-class since
0.2.9(December 2025) - Single config file = entire engine surface → trivial delete-test
- Zod-native schema
If a buyer wants Velite's DX, swapping engines is a 4-8 hour migration. Documented in the docs.
Build on the template your agents run on.
Auth, billing, jobs, storage, notifications, API — every surface your agents need, wired from day one. 14-day money-back guarantee.