Hi. I’m Gray. This is my blog, containing web development tutorials about subjects that are niche and which I haven’t found much other web material about. If you find it useful at all, drop a comment in the post.

I’ve got a infrequently updated portfolio you can peruse, or maybe you’d like to check out my stand alone site on Best Practices for WordPress/Web development‘.

Ghost of Festivals Past: How a Subdomain Migration Broke My Media Library (and How I Fixed It)

The Mistake When archiving the Portland Winter Light Festival website to a new subdomain (2026.pdxwlf.com), I performed a standard database migration (Search & Replace) to update the URLs. I assumed that since my media lived in an AWS S3 bucket via WP Offload Media, the links would just follow the new domain. The Problem Everything…

Details

Things I Used to Believe About Website Performance Optimization May No Longer Be True

Evolving Front-End Best Practices, WordPress Realities, and a Case Study on Script Versioning Failures For much of my career as a WordPress developer, I approached front-end performance optimization with a familiar set of “best practices”: minimize everything, combine everything, strip everything, and let the browser load as little as possible. If a setting promised leaner…

Details

Fixing Vimeo Autoplay Issues in Chrome: The Parameter Conflict Problem

If you’re struggling with Vimeo videos that won’t autoplay in Chrome despite being muted, you’re not alone. This is a common issue that stems from conflicting parameters in Vimeo embed codes, combined with Chrome’s strict autoplay policies. I thought I understood it, but certain stakeholders of my client were still getting only the first still…

Details

WordPress Database Maintenance: Fixing Corrupted Primary Keys and AUTO_INCREMENT Issues

Introduction Database performance is critical for WordPress sites, especially as they grow in content and traffic. While attempting to optimize my WordPress database using the Index WP MySQL For Speed plugin, I encountered a serious underlying issue that prevented the optimization from proceeding: multiple rows in the wp_options table sharing the same option_id value of…

Details