Ship's Log
Why Payload CMS (and Not the Obvious Choices)
Every CMS decision is a bet on how much control you’re willing to give up. Contentful is polished but you’re renting the engine room. Sanity is flexible but GROQ is its own language to learn. WordPress is… WordPress.
Why Payload
Payload is TypeScript all the way down. Collections are code. Access control is code. Hooks are code. There’s no proprietary query language, no vendor lock-in on hosting, and the admin UI is good enough that non-developers can actually use it.
The multi-tenant angle
This was the decider. Payload’s access control made tenant isolation trivial. Every collection gets a tenant field, every query filters by it, and the hooks auto-assign tenant on create. We didn’t need a plugin or a hack. It’s just how the system works when you build it that way.
What we’d change
The Lexical rich text editor is powerful but the learning curve is steep. If you’re used to Slate or ProseMirror, prepare for some head-scratching. The docs are getting better but there are still corners where you’re reading source code to figure out what’s going on.