ChatGPT has empowered me to create a site with more advanced features than I imagined possible. I have a lot of work ahead of me to build this system. Because of that, most of my time lately has been spent on technical tasks and planning. In fact, only about 10% of my time over the past month has gone into actual site content.
To better manage this, I decided to create a separate site specifically to document my development work. You’re reading that site now. Here’s how I set it up.
The Server Setup
My main website runs on a Virtual Private Server (VPS) hosted by Akamai, which acquired Linode. Their VPS instances are still referred to as “linodes.” I use the lowest-tier plan, called a Nanode, which costs $5 per month. It gives me full root access to install and configure everything from the operating system up.

My VPS runs Debian Linux and uses a LAMP stack:
Linux, Apache, MySQL (MariaDB), and PHP—the standard foundation for hosting WordPress.
Creating a Subdomain for the Dev Site
To run a second WordPress instance, I created a subdomain:dev.stationaryreality.com

Since I use Cloudflare to proxy my traffic and manage DNS, I had to log into my Cloudflare dashboard and add an A record pointing dev
to the IP address of my VPS. The DNS update propagated almost instantly.
Setting Up Apache for the Subdomain
Next, I created a new directory under my Apache root to hold the files for the subdomain. After fixing permissions and file ownership, I added a temporary index.html
file to test it.
However, it wasn’t displaying. I realized I needed to create a new Apache virtual host configuration to properly serve the subdomain’s content.

Once I set that up and restarted Apache, the index page appeared.
Configuring HTTPS with Let’s Encrypt
At first, the site displayed a security warning—no HTTPS certificate was available for the new subdomain.

Because Cloudflare was forcing HTTPS, I temporarily disabled that setting.

Then, I used Let’s Encrypt to request a free SSL certificate. This process required the site to be accessible over port 80 so that Let’s Encrypt could run its domain verification challenge. Of Course, it failed again!

I knew immediately, with help from certbot’s “Likely firewall problem” message, that Linodes cloud firewall prevents all IP addresses except for Cloudflare’s and my own from accessing the website directly, so I had to disable this firewall for less than a minute to allow this to validation to occur.

After verification, HTTPS was enabled and working correctly. I re-enabled forced HTTPS both in Cloudflare and in my browser settings.
Installing WordPress
With the subdomain now live and secure, I used wget
to download the latest version of WordPress. After extracting the files, I configured the wp-config.php
file with:
- A new database name
- MySQL user credentials
- WordPress’s salt keys (generated from WordPress.org’s salt generator)

I then visited the site in my browser and completed the WordPress setup process. Here’s what the default install looked like:

Cloning the Look and Migrating Content
After setup, I adjusted basic settings and copied over some of the content from my GitHub Pages project. I had to:
- Convert images to 1200 × 628 px, optimized for WordPress
- Install the Author theme
- Copy the child theme from my main site for consistent layout and structure
- Swap in a black-and-white logo to differentiate this dev site
- Add links back to the main site, and vice versa
Why I Built This Dev Site
This setup is necessary because, over the next few months, I’ll be:
- Upgrading site-wide image formats to WebP
- Renaming images consistently
- Tagging content components for future aggregation
I plan to use WordPress taxonomies and ACF (Advanced Custom Fields) to generate user-driven content views, where clicking a tag dynamically assembles related material into unique pages.
Some of these tag clusters will eventually warrant more curated, static representations—giving users multiple pathways through the content beyond the default narrative.
A More Connected View of Content
By enabling readers to explore content outside linear chapters, I hope to surface interconnected ideas through multiple lenses:
- Historical context
- Themes and concepts
- Philosophy and theology
- Networks of people, books, artists, and movements
This layered view reveals how ideas evolve and spread—sometimes overtly, sometimes through subtle influence and artistic expression. These connections help highlight how concepts that may seem abstract are, in fact, deeply embedded in reality—accessible to those who understand the esoteric layers of philosophy, theology, and human creativity.