Why We Left WordPress — and Never Looked Back
BY MARA CHEN · Jul 2, 2026 · 6 MIN READ
Every agency origin story starts with a mess. Ours was a WordPress multisite running 47 active plugins, a custom theme nobody fully understood, and a staging server that had failed its backups silently for three months.
The cracks
We ran a publishing product on WordPress for six years. The editorial team filed the same complaints every quarter: the admin was slow, media handling ate entire afternoons, and pasting from Google Docs produced markup that looked fine — until it didn't.
The engineering side was worse. Every core update was a lottery: would any of the 47 plugins break this time? Two hadn't been maintained in four years and carried known XSS advisories. Our security posture was built on trust in strangers.
What we actually needed
We wrote our requirements down honestly:
- A content model defined in code and versioned in git
- One runtime for the CMS and our app (we're a Node.js team)
- Access control we can review like any other pull request
- An admin panel our editors don't hate
Payload ticked all four on day one:
export const Posts: CollectionConfig = {
slug: 'posts',
admin: { useAsTitle: 'title' },
fields: [
{ name: 'title', type: 'text', required: true },
{ name: 'content', type: 'richText', required: true },
{ name: 'publishedDate', type: 'date' },
],
}That's a real file from our production repo. It replaced a theme's functions.php, a custom post type registered by a plugin, and a database migration — in about thirty lines of typed config.
The migration itself
We moved six years of content — roughly 8,000 posts and 40,000 media records — in three weeks. The ETL scripts were plain Node.js talking to both databases, with checksums before and after every batch.
The result
The editorial complaints stopped. The patch treadmill stopped. And our CMS code went from "don't touch it" to "review it in a pull request".
We became the migration agency we wished had existed when we were stuck. This blog is the field manual we wish we'd had.
Want this kind of thinking applied to your stack?
We migrate teams from WordPress, Drupal, and other legacy CMS platforms to Payload — and we publish our playbook as we go.
START A CONVERSATION