<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>RubyFlow</title>
    <description>The Ruby and Rails community linklog</description>
    <link>https://rubyflow.com</link>
    <atom:link href="https://rubyflow.com/rss" rel="self" type="application/rss+xml"/>
    <item>
      <title>Recreating Stimulus: how data-controller works under the hood </title>
      <description>&lt;a href="https://railsdesigner.com/recreating-stimulus-controllers/" rel="nofollow"&gt;https://railsdesigner.com/recreating-stimulus-controllers/&lt;/a&gt;  Part 1 of 2.</description>
      <pubDate>Thu, 23 Jul 2026 13:31:45 +0000</pubDate>
      <link>https://rubyflow.com/p/aieax5-recreating-stimulus-how-data-controller-works-under-the-hood-</link>
      <guid>https://rubyflow.com/p/aieax5-recreating-stimulus-how-data-controller-works-under-the-hood-</guid>
    </item>
    <item>
      <title>A brand new SEO+GEO tracker in Rails (SerpBear alternative)</title>
      <description>I am releasing SerpTrail 1.0 today, a new &lt;a href="https://serpapi.com/blog/introducing-serptrail-self-hosted-search-rank-tracker/" rel="nofollow"&gt;SEO rank tracker&lt;/a&gt; built with Rails, Hotwire, SQLite, and Kamal</description>
      <pubDate>Thu, 23 Jul 2026 08:59:57 +0000</pubDate>
      <link>https://rubyflow.com/p/44u2ou-a-brand-new-seogeo-tracker-in-rails-serpbear-alternative</link>
      <guid>https://rubyflow.com/p/44u2ou-a-brand-new-seogeo-tracker-in-rails-serpbear-alternative</guid>
    </item>
    <item>
      <title>🇳🇴 Ruby may finally fix the famous "Norway problem."</title>
      <description>🔗 &lt;a href="https://rubystacknews.com/2026/07/21/ruby-may-finally-fix-the-famous-norway-problem/" rel="nofollow"&gt;https://rubystacknews.com/2026/07/21/ruby-may-finally-fix-the-famous-norway-problem/&lt;/a&gt;</description>
      <pubDate>Wed, 22 Jul 2026 02:55:39 +0000</pubDate>
      <link>https://rubyflow.com/p/wlacxg--ruby-may-finally-fix-the-famous-norway-problem</link>
      <guid>https://rubyflow.com/p/wlacxg--ruby-may-finally-fix-the-famous-norway-problem</guid>
    </item>
    <item>
      <title>Most Rails multi-tenant apps trust developers to remember where(tenant_id: ...).</title>
      <description>&lt;a href="https://rubystacknews.com/2026/07/20/beyond-tenant_id-treating-multi-tenancy-as-a-database-invariant/" rel="nofollow"&gt;https://rubystacknews.com/2026/07/20/beyond-tenant_id-treating-multi-tenancy-as-a-database-invariant/&lt;/a&gt;</description>
      <pubDate>Tue, 21 Jul 2026 02:15:26 +0000</pubDate>
      <link>https://rubyflow.com/p/ywzdq0-most-rails-multi-tenant-apps-trust-developers-to-remember-wheretenantid-</link>
      <guid>https://rubyflow.com/p/ywzdq0-most-rails-multi-tenant-apps-trust-developers-to-remember-wheretenantid-</guid>
    </item>
    <item>
      <title>RubyConf Austria 2026 Talk Video: Frontend Ruby on Rails with Glimmer DSL for Web</title>
      <description>My RubyConf Austria 2026 talk has been published on YouTube! What if your frontend was just… Ruby? &lt;a href="https://www.youtube.com/watch?v=qTukq5AcSK0" rel="nofollow"&gt;https://www.youtube.com/watch?v=qTukq5AcSK0&lt;/a&gt;</description>
      <pubDate>Mon, 20 Jul 2026 21:09:12 +0000</pubDate>
      <link>https://rubyflow.com/p/no9n5h-rubyconf-austria-2026-talk-video-frontend-ruby-on-rails-with-glimmer-dsl-for-web</link>
      <guid>https://rubyflow.com/p/no9n5h-rubyconf-austria-2026-talk-video-frontend-ruby-on-rails-with-glimmer-dsl-for-web</guid>
    </item>
    <item>
      <title>Calling all open source maintainers working with Ruby</title>
      <description>We’re creating a shared place where Ruby users can ask questions and discuss ideas about your project: &lt;a href="https://www.rubyforum.org/t/calling-all-open-source-maintainers-working-with-ruby/553" rel="nofollow"&gt;https://www.rubyforum.org/t/calling-all-open-source-maintainers-working-with-ruby/553&lt;/a&gt;</description>
      <pubDate>Mon, 20 Jul 2026 14:25:24 +0000</pubDate>
      <link>https://rubyflow.com/p/7xl9ln-calling-all-open-source-maintainers-working-with-ruby</link>
      <guid>https://rubyflow.com/p/7xl9ln-calling-all-open-source-maintainers-working-with-ruby</guid>
    </item>
    <item>
      <title>ActiveModel Conditional Validations</title>
      <description>There are &lt;a href="https://kevinjmurphy.com/posts/activemodel-conditional-validations/" rel="nofollow"&gt;options&lt;/a&gt; to applying validations conditionally in ActiveModel. I encourage you to also consider other ways to model your rules. Hit the link to read through some options.</description>
      <pubDate>Mon, 20 Jul 2026 14:18:01 +0000</pubDate>
      <link>https://rubyflow.com/p/ij314x-activemodel-conditional-validations</link>
      <guid>https://rubyflow.com/p/ij314x-activemodel-conditional-validations</guid>
    </item>
    <item>
      <title>Audition is a linter/fixer that gets your code Ractor-ready</title>
      <description>Vibe coded a useful thing for Rubyists over the weekend. Audition is a linter/fixer that gets your code Ractor-ready: static analysis powered by Shopify’s rubydex, plus dynamic probes that actually run your code inside Ractors and report what breaks.</description>
      <pubDate>Mon, 20 Jul 2026 11:12:56 +0000</pubDate>
      <link>https://rubyflow.com/p/5skptc-audition-is-a-linterfixer-that-gets-your-code-ractor-ready</link>
      <guid>https://rubyflow.com/p/5skptc-audition-is-a-linterfixer-that-gets-your-code-ractor-ready</guid>
    </item>
    <item>
      <title>Why N+1 Queries Are a Natural Result of Lazy Loading</title>
      <description>N+1 is lazy loading repeated across a collection. This RailsRevelry article traces the per-owner association load path, the relation.loaded? versus association(:invoices).loaded? distinction, preload/eager_load/includes, why preloading doesn’t fix count or scoped reads, and strict_loading as enforcement.</description>
      <pubDate>Sun, 19 Jul 2026 06:13:32 +0000</pubDate>
      <link>https://rubyflow.com/p/ehpecs-why-n1-queries-are-a-natural-result-of-lazy-loading</link>
      <guid>https://rubyflow.com/p/ehpecs-why-n1-queries-are-a-natural-result-of-lazy-loading</guid>
    </item>
    <item>
      <title>How to deploy an existing Rails app for free</title>
      <description>&lt;a href="https://www.rubyforum.org/t/how-to-deploy-an-existing-rails-app-for-free" rel="nofollow"&gt;https://www.rubyforum.org/t/how-to-deploy-an-existing-rails-app-for-free&lt;/a&gt;</description>
      <pubDate>Thu, 16 Jul 2026 14:47:34 +0000</pubDate>
      <link>https://rubyflow.com/p/8mx37j-how-to-deploy-an-existing-rails-app-for-free</link>
      <guid>https://rubyflow.com/p/8mx37j-how-to-deploy-an-existing-rails-app-for-free</guid>
    </item>
    <item>
      <title>A Supporter Sympathizes with My Discrimination by RubyConf 2026</title>
      <description>I am thankful to the Software Engineer who shared a very supportive comment regarding my experience of discrimination by RubyConf 2026.
&lt;a href="https://andymaleh.blogspot.com/2026/07/a-supporter-sympathizes-with-my.html" rel="nofollow"&gt;https://andymaleh.blogspot.com/2026/07/a-supporter-sympathizes-with-my.html&lt;/a&gt;</description>
      <pubDate>Wed, 15 Jul 2026 22:25:14 +0000</pubDate>
      <link>https://rubyflow.com/p/6tf0za-a-supporter-sympathizes-with-my-discrimination-by-rubyconf-2026</link>
      <guid>https://rubyflow.com/p/6tf0za-a-supporter-sympathizes-with-my-discrimination-by-rubyconf-2026</guid>
    </item>
    <item>
      <title>When broadcasting a refresh is not enough: faster UX with versioned updates</title>
      <description>If you’re using Turbo broadcasts to make a page collaborative, you might have noticed that the default refresh approach adds latency: an extra round trip, a debounce delay, and a flood of simultaneous requests when many users are connected. Broadcasting a replace action with the content directly fixes most of that, but it opens up a race condition where updates can arrive out of order. Here’s how to get fast, immediate updates without sacrificing correctness: &lt;a href="https://radan.dev/articles/turbo-versioned-updates?utm_source=rubyflow&amp;amp;utm_medium=feed&amp;amp;utm_campaign=turbo-versioned-updates" rel="nofollow"&gt;When broadcasting a Turbo refresh is not enough: faster UX with versioned immediate updates&lt;/a&gt;</description>
      <pubDate>Wed, 15 Jul 2026 11:07:59 +0000</pubDate>
      <link>https://rubyflow.com/p/p1pts9-when-broadcasting-a-refresh-is-not-enough-faster-ux-with-versioned-updates</link>
      <guid>https://rubyflow.com/p/p1pts9-when-broadcasting-a-refresh-is-not-enough-faster-ux-with-versioned-updates</guid>
    </item>
    <item>
      <title>⚽ The World Cup is reaching its final stages, and Ruby developers have been building </title>
      <description>&lt;a href="https://rubystacknews.com/2026/07/14/%e2%9a%bd-world-cup-fever-hits-the-ruby-community/" rel="nofollow"&gt;https://rubystacknews.com/2026/07/14/%e2%9a%bd-world-cup-fever-hits-the-ruby-community/&lt;/a&gt;</description>
      <pubDate>Wed, 15 Jul 2026 03:01:18 +0000</pubDate>
      <link>https://rubyflow.com/p/5ymhep--the-world-cup-is-reaching-its-final-stages-and-ruby-developers-have-been-buildi</link>
      <guid>https://rubyflow.com/p/5ymhep--the-world-cup-is-reaching-its-final-stages-and-ruby-developers-have-been-buildi</guid>
    </item>
    <item>
      <title>RubyConf 2026 Is Not a Safe Environment for Everyone</title>
      <description>RubyConf 2026 is not a safe environment for everyone. They have an in-group and an out-group. If you’re in the in-group, they will treat you well and accept talk proposals by you even if you don’t have top-level skills in Software Engineering. If you’re in the out-group, it doesn’t matter if you launch rockets to the moon successfully on your own or win the approval of Matz himself, you will be excluded and discriminated against. This is no different from how the MLB (Major League Baseball) used to mistreat Afro Americans and relegate them to playing in the Negro league instead of the Major League. Telling someone who can perform at the major league level they are unaccepted as a player there, but could attend if they want is most definitely discrimination 100%.
&lt;a href="https://andymaleh.blogspot.com/2026/07/rubyconf-2026-is-not-safe-environment.html" rel="nofollow"&gt;https://andymaleh.blogspot.com/2026/07/rubyconf-2026-is-not-safe-environment.html&lt;/a&gt;</description>
      <pubDate>Tue, 14 Jul 2026 20:18:35 +0000</pubDate>
      <link>https://rubyflow.com/p/7a62ig-rubyconf-2026-is-not-a-safe-environment-for-everyone</link>
      <guid>https://rubyflow.com/p/7a62ig-rubyconf-2026-is-not-a-safe-environment-for-everyone</guid>
    </item>
    <item>
      <title>Tracking Business Metrics in Rails without a full analytics stack</title>
      <description>&lt;a href="https://trifle.io/blog/2026-07-14-tracking-business-metrics-in-rails-without-a-full-analytics-stack" rel="nofollow"&gt;https://trifle.io/blog/2026-07-14-tracking-business-metrics-in-rails-without-a-full-analytics-stack&lt;/a&gt;</description>
      <pubDate>Tue, 14 Jul 2026 12:46:48 +0000</pubDate>
      <link>https://rubyflow.com/p/wa93aq-tracking-business-metrics-in-rails-without-a-full-analytics-stack</link>
      <guid>https://rubyflow.com/p/wa93aq-tracking-business-metrics-in-rails-without-a-full-analytics-stack</guid>
    </item>
    <item>
      <title>Stoplight is looking for new contributors (junior devs welcome)</title>
      <description>Hey dear Rubyists,</description>
      <pubDate>Tue, 14 Jul 2026 07:16:20 +0000</pubDate>
      <link>https://rubyflow.com/p/mlwpm1-stoplight-is-looking-for-new-contributors-junior-devs-welcome</link>
      <guid>https://rubyflow.com/p/mlwpm1-stoplight-is-looking-for-new-contributors-junior-devs-welcome</guid>
    </item>
    <item>
      <title>data_redactor: stop secrets and personal data leaking into logs and LLM prompts</title>
      <description>If your app writes logs or sends text to an LLM, sooner or later a real credit card, email, or API key ends up in there — data_redactor strips that kind of data out of any string before it leaves your app.</description>
      <pubDate>Tue, 14 Jul 2026 06:56:27 +0000</pubDate>
      <link>https://rubyflow.com/p/tesaty-dataredactor-stop-secrets-and-personal-data-leaking-into-logs-and-llm-prompts</link>
      <guid>https://rubyflow.com/p/tesaty-dataredactor-stop-secrets-and-personal-data-leaking-into-logs-and-llm-prompts</guid>
    </item>
    <item>
      <title>Refactoring with Convergence Rules</title>
      <description>Three rules turn duplication into abstractions through tiny steps, and catch false abstractions before they ever reach the code.</description>
      <pubDate>Mon, 13 Jul 2026 18:11:15 +0000</pubDate>
      <link>https://rubyflow.com/p/pir4cy-refactoring-with-convergence-rules</link>
      <guid>https://rubyflow.com/p/pir4cy-refactoring-with-convergence-rules</guid>
    </item>
    <item>
      <title>Ruby Open-Source Innovation Process Expectation vs Reality</title>
      <description>Ruby Open-Source Innovation Process Expectation vs Reality
&lt;a href="https://andymaleh.blogspot.com/2026/07/ruby-open-source-innovation-process.html" rel="nofollow"&gt;https://andymaleh.blogspot.com/2026/07/ruby-open-source-innovation-process.html&lt;/a&gt;</description>
      <pubDate>Mon, 13 Jul 2026 16:45:43 +0000</pubDate>
      <link>https://rubyflow.com/p/wp7hll-ruby-open-source-innovation-process-expectation-vs-reality</link>
      <guid>https://rubyflow.com/p/wp7hll-ruby-open-source-innovation-process-expectation-vs-reality</guid>
    </item>
    <item>
      <title>Ruby Gotcha: Environment Variables Are Always Strings in Ruby</title>
      <description>&lt;a href="https://sarojmaharjan.com/blog/ruby-env-variables-are-strings/" rel="nofollow"&gt;https://sarojmaharjan.com/blog/ruby-env-variables-are-strings/&lt;/a&gt;</description>
      <pubDate>Mon, 13 Jul 2026 13:02:53 +0000</pubDate>
      <link>https://rubyflow.com/p/xap82o-ruby-gotcha-environment-variables-are-always-strings-in-ruby</link>
      <guid>https://rubyflow.com/p/xap82o-ruby-gotcha-environment-variables-are-always-strings-in-ruby</guid>
    </item>
    <item>
      <title>Curiosity reduced the heap size by 60%</title>
      <description>&lt;a href="https://mostlyobvio.us/2026/07/curiosity-reduced-the-heap-size-by-60/" rel="nofollow"&gt;https://mostlyobvio.us/2026/07/curiosity-reduced-the-heap-size-by-60/&lt;/a&gt;</description>
      <pubDate>Sun, 12 Jul 2026 13:41:03 +0000</pubDate>
      <link>https://rubyflow.com/p/zaadxf-curiosity-reduced-the-heap-size-by-60</link>
      <guid>https://rubyflow.com/p/zaadxf-curiosity-reduced-the-heap-size-by-60</guid>
    </item>
    <item>
      <title>Moving 300GB of Request Details Out of Postgres</title>
      <description>&lt;a href="https://www.deadbro.com/blog/moving-large-json-request-payloads-from-postgres-to-minio" rel="nofollow"&gt;https://www.deadbro.com/blog/moving-large-json-request-payloads-from-postgres-to-minio&lt;/a&gt;
Our Postgres table grew 30x in a month (10GB → 300GB). Here’s how we fixed the storage problem behind DeadBro’s request traces</description>
      <pubDate>Sun, 12 Jul 2026 13:09:51 +0000</pubDate>
      <link>https://rubyflow.com/p/ti6mqt-moving-300gb-of-request-details-out-of-postgres</link>
      <guid>https://rubyflow.com/p/ti6mqt-moving-300gb-of-request-details-out-of-postgres</guid>
    </item>
    <item>
      <title>Associations Are Query Interfaces, Not Object Properties</title>
      <description>A loaded Active Record association target answers one question, not every future association-shaped call. This RailsRevelry article explains association readers, CollectionProxy, loaded targets, scoped queries, count/existence methods, strict loading, and the debugging question: loaded for which question?</description>
      <pubDate>Sun, 12 Jul 2026 07:52:29 +0000</pubDate>
      <link>https://rubyflow.com/p/1ftxay-associations-are-query-interfaces-not-object-properties</link>
      <guid>https://rubyflow.com/p/1ftxay-associations-are-query-interfaces-not-object-properties</guid>
    </item>
    <item>
      <title>Five Rules for Taming RSpec's let Overuse Problem</title>
      <description>&lt;a href="https://toppa.com/2026/rspec-5-rules-for-using-let-effectively/" rel="nofollow"&gt;https://toppa.com/2026/rspec-5-rules-for-using-let-effectively/&lt;/a&gt;</description>
      <pubDate>Sat, 11 Jul 2026 14:20:09 +0000</pubDate>
      <link>https://rubyflow.com/p/suz56x-five-rules-for-taming-rspecs-let-overuse-problem</link>
      <guid>https://rubyflow.com/p/suz56x-five-rules-for-taming-rspecs-let-overuse-problem</guid>
    </item>
    <item>
      <title>PicoPhone: a fast native wrapper around libphonenumber</title>
      <description>I just published &lt;a href="https://rubygems.org/gems/pico_phone" rel="nofollow"&gt;pico_phone&lt;/a&gt; (&lt;a href="https://github.com/gjack/pico_phone" rel="nofollow"&gt;source&lt;/a&gt;), a thin Ruby wrapper around Google’s libphonenumber C++
  library via &lt;a href="https://github.com/ruby-rice/rice" rel="nofollow"&gt;Rice&lt;/a&gt;. It’s the same engine Android’s dialer uses, so you get accurate parsing, validation, and formatting for phone numbers from any
  country: national/international/E.164 formats, area code and local number extraction, type detection (mobile, toll-free, etc.), vanity number conversion, short-number/emergency-number lookups, and
  more.</description>
      <pubDate>Sat, 11 Jul 2026 02:25:32 +0000</pubDate>
      <link>https://rubyflow.com/p/v7lob6-picophone-a-fast-native-wrapper-around-libphonenumber</link>
      <guid>https://rubyflow.com/p/v7lob6-picophone-a-fast-native-wrapper-around-libphonenumber</guid>
    </item>
  </channel>
</rss>
