<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Pete Beeda</title>
    <description>The latest articles on Forem by Pete Beeda (@poorman).</description>
    <link>https://forem.com/poorman</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3858785%2F87c2321a-f009-4c93-9c5b-080d252e1e3c.png</url>
      <title>Forem: Pete Beeda</title>
      <link>https://forem.com/poorman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/poorman"/>
    <language>en</language>
    <item>
      <title>Maybe WordPress Should Stop Being the Default for Modern Content Systems</title>
      <dc:creator>Pete Beeda</dc:creator>
      <pubDate>Fri, 03 Apr 2026 06:07:15 +0000</pubDate>
      <link>https://forem.com/poorman/maybe-wordpress-should-stop-being-the-default-for-modern-content-systems-1648</link>
      <guid>https://forem.com/poorman/maybe-wordpress-should-stop-being-the-default-for-modern-content-systems-1648</guid>
      <description>&lt;p&gt;WordPress is still incredible software.&lt;/p&gt;

&lt;p&gt;I also think we recommend it by reflex in a lot of situations where it is no longer the cleanest fit.&lt;/p&gt;

&lt;p&gt;That is not the same as saying WordPress is bad. It clearly is not. It powers a huge part of the web, it solved publishing for millions of people, and it still wins plenty of perfectly valid projects.&lt;/p&gt;

&lt;p&gt;But once your content has to outlive a single theme, a single frontend, or even a single site, I think "just use WordPress" often survives longer than the architecture case for it.&lt;/p&gt;

&lt;p&gt;That tension is a big part of why I built &lt;a href="https://htmless.com" rel="noopener noreferrer"&gt;HTMLess&lt;/a&gt;, an open source headless CMS.&lt;/p&gt;

&lt;p&gt;This post is intentionally opinionated because I think this is a debate worth having:&lt;/p&gt;

&lt;p&gt;WordPress is excellent at powering WordPress sites.&lt;/p&gt;

&lt;p&gt;I just do not think that automatically makes it the best foundation for API-first, multi-frontend, multi-site content architecture.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WordPress is still a good choice for theme-centric sites and teams already invested in its ecosystem.&lt;/li&gt;
&lt;li&gt;I think "just use WordPress" becomes shaky advice once content needs to be portable, API-first, preview-safe, and shared across multiple frontends or spaces.&lt;/li&gt;
&lt;li&gt;In that world, plugin stacks often become accidental architecture.&lt;/li&gt;
&lt;li&gt;I wanted a CMS where schema validation, preview boundaries, delivery caching, scoped tokens, and multi-site isolation were core design decisions, not retrofits.&lt;/li&gt;
&lt;li&gt;I borrowed a lot from WordPress. I just stopped wanting my content model to inherit WordPress's deployment and rendering assumptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My take: WordPress solves website problems better than it solves content platform problems
&lt;/h2&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;If I need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a marketing site&lt;/li&gt;
&lt;li&gt;a blog&lt;/li&gt;
&lt;li&gt;a content team that already knows WordPress&lt;/li&gt;
&lt;li&gt;theme-driven rendering&lt;/li&gt;
&lt;li&gt;a fast path to launch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then WordPress is still a very rational choice.&lt;/p&gt;

&lt;p&gt;But the problem changes when the same content needs to feed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a Next.js frontend&lt;/li&gt;
&lt;li&gt;a docs site&lt;/li&gt;
&lt;li&gt;landing pages&lt;/li&gt;
&lt;li&gt;internal tools&lt;/li&gt;
&lt;li&gt;mobile surfaces&lt;/li&gt;
&lt;li&gt;multiple client sites from one backend&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point I am not really building "a website" anymore.&lt;/p&gt;

&lt;p&gt;I am building a content platform.&lt;/p&gt;

&lt;p&gt;And I think too many teams still reach for WordPress in that scenario because it is familiar, not because it is clearly the best fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plugin stacks are not architecture
&lt;/h2&gt;

&lt;p&gt;This is the point where I started losing patience.&lt;/p&gt;

&lt;p&gt;WordPress can absolutely be stretched into modern headless use cases, especially with the &lt;a href="https://developer.wordpress.org/rest-api/reference/" rel="noopener noreferrer"&gt;REST API&lt;/a&gt;, custom post types, custom fields, the &lt;a href="https://developer.wordpress.org/block-editor/" rel="noopener noreferrer"&gt;Block Editor&lt;/a&gt;, and a lot of plugin glue.&lt;/p&gt;

&lt;p&gt;But "WordPress can do it" and "WordPress is the best foundation for it" are not the same statement.&lt;/p&gt;

&lt;p&gt;In practice, the headless WordPress stack often becomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;one plugin for structured fields&lt;/li&gt;
&lt;li&gt;one for preview behavior&lt;/li&gt;
&lt;li&gt;one for custom API responses&lt;/li&gt;
&lt;li&gt;one for permissions&lt;/li&gt;
&lt;li&gt;one for cache behavior&lt;/li&gt;
&lt;li&gt;one for SEO or schema output&lt;/li&gt;
&lt;li&gt;one more custom layer for webhooks or build triggers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At some point the answer stops being "we chose WordPress" and becomes "we assembled a fragile treaty between plugins."&lt;/p&gt;

&lt;p&gt;That sounds harsher than I mean it to, but I think a lot of teams know exactly what I am talking about.&lt;/p&gt;

&lt;h2&gt;
  
  
  If content cannot survive a frontend rewrite, it probably was never structured enough
&lt;/h2&gt;

&lt;p&gt;This is probably the most opinionated line in the whole article, but I mostly stand by it.&lt;/p&gt;

&lt;p&gt;A lot of CMS content is only "structured" until you try to move it somewhere else.&lt;/p&gt;

&lt;p&gt;Then you discover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;layout assumptions inside the content body&lt;/li&gt;
&lt;li&gt;shortcode dependencies&lt;/li&gt;
&lt;li&gt;theme-specific HTML&lt;/li&gt;
&lt;li&gt;editor output that makes sense only in one renderer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I wanted schema-first content types and block-based rich content as first-class concepts.&lt;/p&gt;

&lt;p&gt;I wanted content to behave more like data than page markup.&lt;/p&gt;

&lt;p&gt;Not because JSON is beautiful.&lt;/p&gt;

&lt;p&gt;Because frontend rewrites are normal now. Reusing content across products is normal now. Shipping to more than one surface is normal now.&lt;/p&gt;

&lt;p&gt;If the content layer breaks every time the frontend changes, the CMS is not really reducing complexity. It is just postponing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preview should not be a side quest
&lt;/h2&gt;

&lt;p&gt;I underestimated how important this was until I watched editorial workflows break around it.&lt;/p&gt;

&lt;p&gt;Editors do not care whether a preview architecture is elegant. They care whether it is trustworthy.&lt;/p&gt;

&lt;p&gt;They want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the real frontend&lt;/li&gt;
&lt;li&gt;the real draft&lt;/li&gt;
&lt;li&gt;no public leaks&lt;/li&gt;
&lt;li&gt;no weird cache bugs&lt;/li&gt;
&lt;li&gt;no mystery rules nobody remembers six months later&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I stopped wanting preview to be "some custom route plus a token plus a plugin plus hope."&lt;/p&gt;

&lt;p&gt;I wanted preview to be its own boundary.&lt;/p&gt;

&lt;p&gt;That is one of the reasons HTMLess separates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;content management&lt;/li&gt;
&lt;li&gt;published delivery&lt;/li&gt;
&lt;li&gt;draft preview&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those surfaces should not behave the same way because they are solving different problems.&lt;/p&gt;

&lt;p&gt;Public delivery wants cacheability.&lt;br&gt;
Editorial management wants private mutation.&lt;br&gt;
Preview wants temporary, tightly scoped draft access.&lt;/p&gt;

&lt;p&gt;I think blending those concerns too casually is one of the reasons a lot of CMS setups feel fine at launch and frustrating later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Headless makes security and correctness more important, not less
&lt;/h2&gt;

&lt;p&gt;Another thing that pushed me away from the default WordPress path: once the CMS becomes an API backend, the boring details become the product.&lt;/p&gt;

&lt;p&gt;I wanted the core system to assume things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;scoped API tokens&lt;/li&gt;
&lt;li&gt;short-lived preview tokens&lt;/li&gt;
&lt;li&gt;object-level authorization&lt;/li&gt;
&lt;li&gt;property-level filtering&lt;/li&gt;
&lt;li&gt;webhook signing&lt;/li&gt;
&lt;li&gt;retry behavior&lt;/li&gt;
&lt;li&gt;optimistic concurrency with &lt;code&gt;ETag&lt;/code&gt; and &lt;code&gt;If-Match&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is flashy.&lt;/p&gt;

&lt;p&gt;All of it matters.&lt;/p&gt;

&lt;p&gt;Headless CMS discussions often focus on DX and forget that API-first content systems fail in very unglamorous ways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drafts leak&lt;/li&gt;
&lt;li&gt;tokens get over-scoped&lt;/li&gt;
&lt;li&gt;builds publish stale content&lt;/li&gt;
&lt;li&gt;editors overwrite each other&lt;/li&gt;
&lt;li&gt;multi-site boundaries get fuzzy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the stuff I wanted designed in, not layered on after the first incident or awkward postmortem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-site should be a core boundary, not a heroic retrofit
&lt;/h2&gt;

&lt;p&gt;This was another big reason I built my own CMS.&lt;/p&gt;

&lt;p&gt;I work in an environment where one site is almost never the end state.&lt;/p&gt;

&lt;p&gt;Teams accumulate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;brands&lt;/li&gt;
&lt;li&gt;campaigns&lt;/li&gt;
&lt;li&gt;docs portals&lt;/li&gt;
&lt;li&gt;client spaces&lt;/li&gt;
&lt;li&gt;staging environments&lt;/li&gt;
&lt;li&gt;localized variants&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I wanted one install with isolated spaces.&lt;/p&gt;

&lt;p&gt;Yes, WordPress Multisite exists. I know.&lt;/p&gt;

&lt;p&gt;But that still was not quite the shape I wanted.&lt;/p&gt;

&lt;p&gt;I was not trying to run many WordPress sites. I was trying to run one API-first content platform that could serve many projects while keeping boundaries around content, assets, tokens, schemas, and webhooks.&lt;/p&gt;

&lt;p&gt;Retrofitting that later felt like the kind of decision teams regret only after the migration budget shows up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-hosting should be intentional or not offered at all
&lt;/h2&gt;

&lt;p&gt;This one is less provocative, but I feel strongly about it.&lt;/p&gt;

&lt;p&gt;If a product says it supports self-hosting, it should actually support self-hosting.&lt;/p&gt;

&lt;p&gt;Not in a README-fiction sense. In a "local, staging, and production all feel like the same product" sense.&lt;/p&gt;

&lt;p&gt;That is why I wanted Docker-first workflows and an open source core.&lt;/p&gt;

&lt;p&gt;I do not think everybody should self-host.&lt;/p&gt;

&lt;p&gt;I do think teams that care about owning their content infrastructure should not be punished for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The irony: WordPress still taught me most of the right lessons
&lt;/h2&gt;

&lt;p&gt;This is the part that makes the whole thing less tribal than it sounds.&lt;/p&gt;

&lt;p&gt;I did not build HTMLess because I rejected WordPress.&lt;/p&gt;

&lt;p&gt;I built it because WordPress got a lot of important things right:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drafts&lt;/li&gt;
&lt;li&gt;revisions&lt;/li&gt;
&lt;li&gt;media&lt;/li&gt;
&lt;li&gt;roles&lt;/li&gt;
&lt;li&gt;block-style editing&lt;/li&gt;
&lt;li&gt;extensibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WordPress taught the web that content tooling should work for editors, not just developers.&lt;/p&gt;

&lt;p&gt;I still believe that.&lt;/p&gt;

&lt;p&gt;What I rejected was not the editorial model.&lt;/p&gt;

&lt;p&gt;What I rejected was the assumption that the best content authoring experience has to stay tightly coupled to one rendering architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I still think WordPress wins
&lt;/h2&gt;

&lt;p&gt;To keep this honest: there are still plenty of cases where I would choose WordPress over my own CMS.&lt;/p&gt;

&lt;p&gt;I would pick WordPress if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the site is theme-centric&lt;/li&gt;
&lt;li&gt;the team already knows WordPress deeply&lt;/li&gt;
&lt;li&gt;plugin leverage is more valuable than architectural purity&lt;/li&gt;
&lt;li&gt;content portability is nice to have, not mission-critical&lt;/li&gt;
&lt;li&gt;the fastest path to launch matters more than long-term content design&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I do not think "go headless" is automatically smart.&lt;/p&gt;

&lt;p&gt;A lot of headless projects are over-engineered.&lt;/p&gt;

&lt;p&gt;But I also think "just use WordPress" gets repeated way too casually in situations where the real requirements have already moved on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built HTMLess
&lt;/h2&gt;

&lt;p&gt;I built a headless CMS because I wanted content to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;structured instead of page-shaped&lt;/li&gt;
&lt;li&gt;portable instead of theme-bound&lt;/li&gt;
&lt;li&gt;previewable without draft leakage&lt;/li&gt;
&lt;li&gt;cacheable without mixing editorial and public concerns&lt;/li&gt;
&lt;li&gt;secure by default as an API product&lt;/li&gt;
&lt;li&gt;self-hostable without ceremony&lt;/li&gt;
&lt;li&gt;usable across multiple sites from one system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;WordPress influenced a lot of that thinking.&lt;/p&gt;

&lt;p&gt;It just stopped being the final architecture I wanted to live with.&lt;/p&gt;

&lt;p&gt;If you are curious about the project that came out of this line of thinking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://htmless.com" rel="noopener noreferrer"&gt;HTMLess website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HTMLess-CMS/HTMLess" rel="noopener noreferrer"&gt;HTMLess on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/HTMLess-CMS/HTMLess/blob/main/docs/ROADMAP.md" rel="noopener noreferrer"&gt;Project roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://htmless.com/architercture" rel="noopener noreferrer"&gt;Architecture notes&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The actual question
&lt;/h2&gt;

&lt;p&gt;If you have used WordPress as a headless or API-first CMS, where did it hold up well for you, and where did it start fighting you?&lt;/p&gt;

&lt;p&gt;And if you think I am wrong, I would genuinely like to hear that too:&lt;/p&gt;

&lt;p&gt;Should WordPress still be the default recommendation for modern content systems, or are we using it by inertia more often than we want to admit?&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>opensource</category>
      <category>headless</category>
      <category>cms</category>
    </item>
  </channel>
</rss>
