Skip to content
The right answer, until it isn't.

WordPress

Nearly every site we ship runs on WordPress. We've tried Payload, Sanity, and a handful of other modern CMSes. None of them survive contact with year-three maintenance. WordPress does.

Version 6.5+
Used since 15 years
On projects 2

What it is

WordPress is the content management system that powers about 43% of every website on the internet, from Spotify Newsroom and TechCrunch to roughly half a billion smaller sites you've never heard of. It's free, open source, and has been continuously developed since 2003.

What it actually does: you write content (pages, posts, products) in an admin panel. WordPress turns that content into a public-facing website. The look and feel comes from a theme. Extra functionality comes from plugins. Everything's editable without a developer once it's built.

How we use it

Custom theme + custom plugin. Always.

We build every WordPress site from two files: a custom theme and a custom plugin. The theme handles how the site looks. The plugin handles everything else: custom post types, fields, lead pipelines, integrations, anything that should survive a theme swap.

This is not the default WordPress workflow. The default is to install a pre-built theme, stack ten plugins on top, and call it a day. That's how 90% of WordPress sites get built. It's also why most WordPress sites are slow, ugly, and impossible to maintain three years in.

The file structure

Every site we ship looks like this:

themes/outerwave/
  style.css                  <- theme header
  functions.php              <- enqueues, theme support
  assets/css/
    tokens.css               <- all design tokens
    global.css               <- resets, body, utilities
  components/
    nav/nav.php + nav.css
    hero/hero.php + hero.css
    (one folder per UI piece)
  inc/
    enqueue-component.php    <- on-demand component CSS loader

plugins/outerwave/
  outerwave.php              <- plugin bootstrap
  includes/
    cpts.php                 <- custom post types
    fields/                  <- MetaBox field groups
    leads.php                <- lead pipeline + Salesforce sync

Components are reusable. Drop the navigation onto a new page in one line. Need a new section type? Make a folder, ship it. The whole site is composable.

No page builders. None.

The page builder market is a parade of bad ideas dressed up as productivity:

  • Elementor. Generates DOM trees so deeply nested they crash Lighthouse. Every paragraph wraps in five divs. Drag-and-drop has a real cost.
  • Divi. Same problem, slower. Locks your content inside Divi shortcodes; switch themes and your pages turn to gibberish.
  • WPBakery / Visual Composer. The shortcode soup approach. Your content becomes [vc_row][vc_column][vc_column_text] on every line. Migration cost: rewrite everything.
  • Bricks. Newer, faster than the rest, but still produces builder-locked content. Better trade-off, still a trade-off.
  • BeTheme's Muffin Builder. The most aggressively bad builder we've ever inherited. JSON blobs jammed into postmeta, breaks every time the theme updates, impossible to edit anywhere except the visual editor. We've rebuilt three sites from Muffin Builder. We will not build a new one.

Custom-coded means: everything on the page is there on purpose. Page weight is what we chose. There's no builder in the loop generating wrappers. Lighthouse hits 100 because the code is actually small.

Not a ThemeForest template

Buying a $59 theme on ThemeForest looks like a shortcut. It isn't. You inherit:

  • 30,000 lines of CSS, 80% of it for features you don't use
  • 15 bundled plugins that exist to demo features in the theme preview
  • A "look" that 4,000 other sites are also using
  • Theme support that ends the day the author moves on to v2
  • No way to change anything fundamental without forking the theme into an unmaintainable mess

Our themes are written for one client. Every file is necessary. The CSS file is 40KB, not 800KB. When something needs to change, it's editable in five minutes by anyone who reads PHP, including the next developer your client hires.

What you get

  • You own your content. No SaaS lock-in. No monthly platform fee. No vendor that gets acquired and shuts down.
  • Edit pages, blog posts, and pricing yourself. No developer needed for content changes.
  • Portable. Your site moves to any host with a database in an afternoon.
  • 35,000+ plugins if you ever need to bolt on something new.
  • The largest developer pool on earth. Easy to hand off if we ever stop working together.

Where we don't use it

WordPress isn't always the right answer. The clearest cases where we reach for something else:

Astro

For static brochure sites under 10 pages where the content rarely changes. A freelancer's site, a single-product launch page, a restaurant menu. No need for an admin panel, no logins, no comments. Astro generates pre-rendered HTML, deploys to Cloudflare Pages or Netlify for $0-5/month, and loads instantly because there's nothing to load.

We also reach for Astro for internal tools and standalone calculators. Interfaces where WordPress's content-management layer is overhead, not value.

The ones we tried and stopped reaching for

Modern headless CMSes (Payload, Sanity, Strapi, Contentful) solve real problems WordPress doesn't. Better APIs, better content modeling, better developer ergonomics. We've shipped on Payload and Sanity. They're good products.

The problem is year three. A WordPress site we built in 2018 still gets security patches, plugins still update, and the next developer can read the codebase without learning a stack. A 2018 Sanity site needs a SaaS subscription that's been through three pricing changes and a Node version that's gone EOL. Modern CMSes age faster than WordPress does.

WordPress is boring. That's the feature.

Want a site built with WordPress the way we build it?

Quick call, real estimate within a business day. No sales pitch.