Switching from WordPress to a custom CMS

Monument Valley, Arizona-Utah, United States

If you’ve been a long-time reader of my blog, I bet you never thought you’d see the day with a post titled anything like this one.

I’ve moved this blog from WordPress to a custom CMS.

Before getting into an explanation, I want to make it clear that I am not leaving the WordPress community in any way. I love WordPress. I’m still doing big things at Theme Hybrid. I will continue writing about WordPress here on this blog and being a WordPress evangelist for what I hope is many, many years to come.

This was a deeply personal decision for me and what I thought was best for my personal blog.

I wasn’t sure if I wanted to write this post. The WordPress community means everything to me. Even the thought of not running my blog on the platform that has given so much to me is frightening and feels wrong in some ways. Part of that is because I’m so deeply loyal to the project. Part of it is because WordPress has been a security blanket for so long that it’s been hard for me to step outside my bubble.

However, it’s time for me to explore something new.

What’s new with the site?

A redesign of JustinTadlock.com with simple colors. The page has an off-white background. The post content in the screenshot has a large featured image followed by text.

It has a new coat of paint. A redesign was long overdue. Frankly, I was tired of seeing my last WordPress theme.

I decided to keep it simple for now. Many items don’t have CSS rules yet. It’s very much a work in progress. I’m sure there are minor issues (and a few major ones) that need to be cleaned. But, that’s half the fun of this project.

Overall, I knew I wanted to keep the design centered on the content. Everything else should take a backseat to the words on the screen. If you’re here, then I assume you’re here to read what I have written and not get distracted with bells-and-whistles.

Home-brewed CMS

I’ve teased a custom CMS to a select few people on Slack and Facebook. I haven’t talked about it much publicly.

I’ve been building the system on the weekends and whenever I had free time. Aside from a few Symfony components and Parsedown, I’ve built most of this system from scratch. It’s been an adventure.

At some point in the future, I’ll likely open it to the public. I’m looking for a few packages that are MIT-licensed to handle some features rather than the GPL. I’d rather avoid the viral nature of the GPL.

Plus, this system is nowhere near ready for release. It’s alpha-level software at best.

Comments are gone

As I mentioned in the previous post, I’ve discontinued the commenting system. I could’ve easily integrated something like Disqus, but that’s not something I’m particularly interested in at the moment.

I haven’t worked out how to show all the old comments just yet, but I’d like to make that happen in the future. There’s some good stuff there.

I also plan on exploring the use of Webmentions at some point.

Era archives

One new feature I added to the site is an “era” taxonomy. After blogging for over 15 years, I decided to break my content down into distinct eras. These are periods of time in my life where major shifts happened.

I thought this would be a fun way to always go back and look at the things I’ve written based on the time period. Here’s a quick list of the current eras:

These probably won’t mean much to most people. It’s mostly just for me when I’m feeling a bit nostalgic.

Archive pages

I’ve decided against paginated archives. I find it a bit annoying looking through something like the WordPress topic only to find 10 post excerpts with tons of pages to scroll through.

Instead, most archive pages show a full list of posts. That way, you can quickly scan everything to find what you’re looking for.

Or, if you’re like me, hit Ctrl + F on your keyboard and do a quick search on the page for a keyword.

Merged tags and categories

I’ve merged my tags into the category taxonomy (what I’ve always called “topics”). Having two separate methods of grouping my blog posts never made much sense to me, so I decided to just have a single taxonomy.

Feel free to check out all of the topics on the topics archive.

Why I moved from WordPress

The simple answer is that it no longer felt like the best system for my personal blog.

This is not going to be a post where I bash WP. While I have my share of complaints about WordPress, most of those things played little-to-no part in my decision to try something different.

Editing content

Some folks may be wondering if the upcoming WordPress 5.0 editor (currently the Gutenberg plugin) played a part in this decision, given the timing.

The answer is no.

Outside of a short aside post or quick gallery, I haven’t used the WordPress editor for writing posts in several years. I do all of my writing in a Markdown editor offline.

Dealing with WP’s post editor in general played a role in my decision, but this is not directly tied to Gutenberg. The last time I checked, pasting Markdown into Gutenberg was quite a nice experience.

This is more about my workflow. I write posts in Markdown files. It makes sense that the system I use recognizes that Markdown is my primary method for publishing.


In my last post, The Final Comments, I went in depth about why I was shutting down comments. This was a decision I made some time ago. Making that decision meant that I was no longer reliant on WordPress. Comments and a few other features were the main reasons I’ve continued using the platform these last few years.

For so long, I held onto this notion that I needed to have comments on my blog posts. In some ways, this was an addiction, a way to gauge popularity. Similar to Facebook and Twitter “likes,” I had become accustomed to getting at least a few comments whenever I’d publish something. Commenting, in many respects, was just as much a part of the identity of this site as the content itself.

A couple of years ago, I read something along the lines of comments not belonging to the site owner. I can’t remember the article name or link now, but it shifted my perspective. With things like the European GDPR (General Data Protection Regulation) and similar legislation likely coming from other countries in the future, the idea that these comments aren’t really mine to control is becoming more of a reality.

The point I’m getting to is that the most important thing to me is the content that I write. That’s why I started this blog back in 2003.

I also think commenting/discussion systems need to evolve to the point where the user has more control and into a standardized system across the entire Web. I’m not sure what that might look like, but it’s a topic for another day.


This is going to be a complaint about WordPress and Web sites in general.

Out of the box, WP is a lot slower than it has to be. While there are people who submit patches to fix performance problems here and there, I don’t see a lot of talk throughout the community about making WordPress leaner.

It’s 2018 and my WordPress-based site is slower than what I had in 2003 (and in 2005 when I started using WordPress). We live in a time when we should be serving the fastest Web sites in history, but Web pages are growing in size with no thought to user experience.

Install XYZ caching plugin with 500 config options should not be the go-to response for running speedy Web sites.

I wanted to try my hand at making this site load faster. Then, take what I learn from that experience and apply it back into the work that I do with WordPress. This should be an interesting and fun journey.

PHP code from this decade

Okay. So, yeah, that heading is a bit of a dig at WP.

While I can build WordPress plugins and themes in whatever version of PHP I want, those plugins and themes must still interact with code that was written for PHP 5.2, which was released in 2006.

Building something from the ground up that approached things from a purely OOP perspective with more modern coding practices has been fun. I’ve learned a ton of cool stuff and am still learning.

My own edification

I like tinkering with things and breaking them. To be constantly working on, breaking, and fixing my personal blog is fun for me.

With WordPress, things just sort of work — that’s a good thing seeing as how it runs over 30% of the Web.

Ever since I made the switch to WordPress in 2005, each year, I’ve had fewer and fewer things to tinker with here. I miss that excitement a bit. WordPress is a mature and stable project. I long for the thrill of the bleeding edge.

I want to continue learning, and one of the best ways for me to do that is to experiment with new things.

What the future holds

I may be running WordPress again in a month or a year. I don’t know.

It’s just content. I can move it around anytime and anywhere.

What I do know is that I’m eager to go on this new venture with JustinTadlock.com. These last couple of weeks that I’ve spent wrapping up things enough to push the new site live has been some of the most fun I’ve had in Web dev in years. It feels like the early days with a new frontier to explore.

Few things excite me more, and I hope that you, dear reader, continue down this journey with me.