<feed xmlns="http://www.w3.org/2005/Atom"> <id>https://www.juanvasquez.dev/</id><title>JuanVqz's Blog</title><subtitle>Personal blog by Juan Vásquez (@JuanVqz) — a software developer sharing lessons learned, technical insights, and reflections on the craft of building software.</subtitle> <updated>2026-04-09T01:00:19-06:00</updated> <author> <name>Juan Vásquez</name> <uri>https://www.juanvasquez.dev/</uri> </author><link rel="self" type="application/atom+xml" href="https://www.juanvasquez.dev/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://www.juanvasquez.dev/"/> <generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator> <rights> © 2026 Juan Vásquez </rights> <icon>/assets/img/favicons/favicon.ico</icon> <logo>/assets/img/favicons/favicon-96x96.png</logo> <entry><title>Upgrading Rails From 5.2 to 8.1: Seven Years of Incremental Progress</title><link href="https://www.juanvasquez.dev/blog/upgrading-rails-from-5-to-8-seven-years/" rel="alternate" type="text/html" title="Upgrading Rails From 5.2 to 8.1: Seven Years of Incremental Progress" /><published>2026-04-07T09:00:00-06:00</published> <updated>2026-04-07T09:00:00-06:00</updated> <id>https://www.juanvasquez.dev/blog/upgrading-rails-from-5-to-8-seven-years/</id> <content type="text/html" src="https://www.juanvasquez.dev/blog/upgrading-rails-from-5-to-8-seven-years/" /> <author> <name>Juan Vásquez</name> </author> <category term="development" /> <summary>The Timeline I started the Doctors app — the clinical assistance system I’ve been writing about recently — in October 2018 on Rails 5.2.1 with Ruby 2.5.1. Today it runs Rails 8.1 on Ruby 3.4.8. That’s every major Rails version — 5.2, 6.0, 6.1, 7.0, 7.1, 7.2, 8.0, 8.1 — across seven years. Here’s the full upgrade history, pulled straight from git: Date Rails Ruby ...</summary> </entry> <entry><title>Migrating a Rails App from Heroku to Railway</title><link href="https://www.juanvasquez.dev/blog/migrating-from-heroku-to-railway/" rel="alternate" type="text/html" title="Migrating a Rails App from Heroku to Railway" /><published>2026-03-31T00:00:00-06:00</published> <updated>2026-03-31T00:00:00-06:00</updated> <id>https://www.juanvasquez.dev/blog/migrating-from-heroku-to-railway/</id> <content type="text/html" src="https://www.juanvasquez.dev/blog/migrating-from-heroku-to-railway/" /> <author> <name>Juan Vásquez</name> </author> <category term="devops" /> <summary>Last weekend I migrated my Doctors App from Heroku to Railway. It’s a multi-tenant Rails app where each hospital gets its own subdomain — one.doctors.com, two.doctors.com, and so on. Five hospitals, around 25,000 appointments, 9,700+ patients. Not huge, but not trivial either. Here’s how it went, including the part where I accidentally broke the database. The setup I already had a Railway ...</summary> </entry> <entry><title>From Turbo Streams to Turbo Morph: Simplifying Real-Time Rails</title><link href="https://www.juanvasquez.dev/blog/from-turbo-streams-to-turbo-morph-in-rails/" rel="alternate" type="text/html" title="From Turbo Streams to Turbo Morph: Simplifying Real-Time Rails" /><published>2026-03-19T08:00:00-06:00</published> <updated>2026-03-19T08:00:00-06:00</updated> <id>https://www.juanvasquez.dev/blog/from-turbo-streams-to-turbo-morph-in-rails/</id> <content type="text/html" src="https://www.juanvasquez.dev/blog/from-turbo-streams-to-turbo-morph-in-rails/" /> <author> <name>Juan Vásquez</name> </author> <category term="development" /> <summary>The Setup I’m building a multitenant order management system for cafes and restaurants. Orders come in, the kitchen sees a live queue, waiters track item status — all updating in real time across multiple screens. The natural first choice in Rails? Turbo Streams — targeted DOM updates over WebSocket. Replace this partial, append to that list, remove that element. It worked. Until it didn’t. ...</summary> </entry> <entry><title>The S3 Compatibility Trap: A Cloudflare R2 + Ruby SDK Gotcha</title><link href="https://www.juanvasquez.dev/blog/cloudflare-r2-rails-activestorage/" rel="alternate" type="text/html" title="The S3 Compatibility Trap: A Cloudflare R2 + Ruby SDK Gotcha" /><published>2026-02-19T11:00:00-06:00</published> <updated>2026-02-19T11:00:00-06:00</updated> <id>https://www.juanvasquez.dev/blog/cloudflare-r2-rails-activestorage/</id> <content type="text/html" src="https://www.juanvasquez.dev/blog/cloudflare-r2-rails-activestorage/" /> <author> <name>Juan Vásquez</name> </author> <category term="development" /> <summary>Why even consider R2? There are plenty of good reasons to use AWS S3 in a Rails application, and for most teams it works perfectly well. However, one concern that comes up frequently is cost over time, especially when it comes to egress (data transferred out of the service). If your application serves many files—images, PDFs, backups, etc.—those costs can grow quickly. Because of that, I rec...</summary> </entry> <entry><title>MySQL on Linux</title><link href="https://www.juanvasquez.dev/blog/mysql-on-linux/" rel="alternate" type="text/html" title="MySQL on Linux" /><published>2024-04-19T08:00:00-06:00</published> <updated>2026-02-20T08:00:00-06:00</updated> <id>https://www.juanvasquez.dev/blog/mysql-on-linux/</id> <content type="text/html" src="https://www.juanvasquez.dev/blog/mysql-on-linux/" /> <author> <name>Juan Vásquez</name> </author> <category term="linux" /> <summary>Install MySQL on Linux MySQL is one of the most popular open-source relational database management systems. In this guide, we’ll walk you through the steps to install MySQL on Linux. Prerequisites Before you begin, make sure you have: A Linux-based operating system A user account with sudo privileges Step 1: Update Package List Update the package list to ensure you have the latest ...</summary> </entry> </feed>
