Blog
Updates on what I'm building, technical learnings, and insights from my engineering journey.
- LLM Failed to convert a WordPress website to Static HTML/CSS
A journey through the hidden complexity of WordPress migrations, LLM limitations, and why sometimes the 'simple' solution isn't actually simpler.
building-in-public engineering wordpress static-sites - Rails Upgrade Series: From Rails 4.2 to Rails 8.0
A complete guide to upgrading a legacy Rails application from version 4.2 to 8.0, covering test infrastructure, Zeitwerk migration, gem compatibility, and lessons learned across 8 phases.
building-in-public engineering rails rails-upgrade legacy-code - Rails Upgrade Phase Five: Rails 6.0 to 6.1
Navigating the upgrade from Rails 6.0 to 6.1, dealing with Sprockets 4 incompatibilities, cattr_accessor changes, and Sass deprecations.
building-in-public engineering rails-upgrade ruby - Rails Upgrade Phase Six: Rails 6.1 to 7.0
Navigating Zeitwerk timing issues, Airbrake gem incompatibilities, and fixture path changes in the Rails 7.0 upgrade.
building-in-public engineering rails-upgrade ruby - Rails Upgrade Phase Seven: Rails 7.0 to 7.1
Navigating PaperTrail compatibility, Zeitwerk's stricter autoloading, ActionController::Parameters enforcement, and secrets.yml deprecation in Rails 7.1.
building-in-public engineering rails-upgrade ruby - Rails Upgrade Phase Eight: Rails 7.1 to 8.0 - The Final Milestone
Completing the Rails upgrade journey from 4.2 to 8.0: navigating Ruby 3.2 requirements, PaperTrail updates, Minitest incompatibilities, controller test state changes, and Devise lazy loading.
building-in-public engineering rails-upgrade ruby - Rails Upgrade Phase Four: Rails 6 Upgrade, Surviving Zeitwerk, Apple Silicon, and Ruby 3
A detailed account of upgrading a Rails 5.2 app to 6.0 and Ruby 3.1, navigating Zeitwerk autoloading, Apple Silicon compilation issues, and test infrastructure challenges.
building-in-public engineering rails ruby upgrade - Adding Stripe Subscriptions to a Phoenix/LiveView App: Lessons from CloudNori
A deep dive into integrating Stripe subscription billing with Phoenix/Elixir, including webhook handling, rate limiting, and the mistakes I made along the way.
building-in-public engineering elixir phoenix liveview stripe - Rails Upgrade Phase Two, Three, :Rails Upgrade, The Hidden Costs of Rails 5.2
Ten production-breaking changes we hit upgrading from Rails 5.0 to 5.2, from belongs_to requirements to DataTables incompatibilities
building-in-public engineering rails rails-upgrade - Rails Upgrade Phase One: of Upgrading a Legacy Rails App: Test Coverage First
How we improved test coverage from 30% to 80% before upgrading a Rails 4.2 application, and why that foundation made all the difference.
building-in-public engineering rails testing legacy-code - Building in Public: Starting a New Chapter
Launching a new portfolio site and committing to building projects in public. Here's what I'm working on and why.
meta projects building-in-public - Migrating My Portfolio from Static HTML to Astro
How I rebuilt my engineering portfolio using Astro, content collections, and modern tooling - while learning what matters in a developer site.
building-in-public engineering astro web-development - How I Built an AI Agent to Automatically Write My Engineering Blog Posts
Here's how I built an AI-driven workflow to automatically generate developer documentation without interrupting coding flow.
engineering meta ai automation - Lidger: From Rails + React to Phoenix LiveView
Why I rebuilt my personal dashboard from a separate Rails API and React frontend into a unified Phoenix LiveView application, and how it's transformed my development speed.
elixir phoenix liveview rails react architecture lidger