<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jackson Pires</title>
    <description>The latest articles on DEV Community by Jackson Pires (@jackson_pires).</description>
    <link>https://dev.to/jackson_pires</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2771341%2F2abf5803-7cb4-40a2-855d-7bca483cc13e.jpg</url>
      <title>DEV Community: Jackson Pires</title>
      <link>https://dev.to/jackson_pires</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jackson_pires"/>
    <language>en</language>
    <item>
      <title>🇺🇸 How I built my Proxmox homelab by talking to Claude</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 07 Oct 2026 13:59:52 +0000</pubDate>
      <link>https://dev.to/videosdeti/how-i-built-my-proxmox-homelab-by-talking-to-claude-1lnn</link>
      <guid>https://dev.to/videosdeti/how-i-built-my-proxmox-homelab-by-talking-to-claude-1lnn</guid>
      <description>&lt;p&gt;&lt;em&gt;One week, a server forgotten in a corner, and not a single line of configuration typed by hand.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I had a mini PC running Proxmox VE. In practice, it was one of those projects you start full of excitement and abandon halfway: installed on an old network, with a 4 TB NVMe full of experiment volumes I no longer remembered, a 1.4 TB USB drive holding an abandoned Bitcoin VM, and a Windows VM I used now and then without really knowing how it was set up.&lt;/p&gt;

&lt;p&gt;This time I tried something different. Instead of spending weekends reading forums, mounting disks and editing config files, I decided to do everything &lt;strong&gt;by talking to Claude Code&lt;/strong&gt;. I described what I wanted in plain Portuguese, and it did the rest over SSH: it inspected, planned, executed, tested and documented.&lt;/p&gt;

&lt;p&gt;This post is the story of how that went.&lt;/p&gt;




&lt;h2&gt;
  
  
  Chapter 1: first, understand the house
&lt;/h2&gt;

&lt;p&gt;The first thing Claude did was not change anything. It &lt;strong&gt;looked&lt;/strong&gt;. It logged into the server over SSH and took a full inventory: hardware, Proxmox version, disks, network, VMs and containers. And it stored everything in a place that became the backbone of the project: a &lt;strong&gt;knowledge bundle&lt;/strong&gt; in markdown using the OKF (Open Knowledge Format), one file per topic, versioned alongside everything else. To manage these documents we used the &lt;a href="https://okfgem.com" rel="noopener noreferrer"&gt;OKF gem&lt;/a&gt;, a gem that helps you create, validate and maintain OKF documents. I recommend it to anyone who wants documentation that humans and AI agents read from the same source.&lt;/p&gt;

&lt;p&gt;Right away it found six problems I didn't even know I had:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The server &lt;strong&gt;couldn't resolve names&lt;/strong&gt;. DNS still pointed to the old network's router (10.0.0.1), which is why &lt;code&gt;apt update&lt;/code&gt; hung.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/etc/hosts&lt;/code&gt; claimed the server had an IP address that no longer existed.&lt;/li&gt;
&lt;li&gt;The Pi-hole container had a gateway outside its subnet.&lt;/li&gt;
&lt;li&gt;Proxmox's &lt;em&gt;enterprise&lt;/em&gt; repositories were enabled without a subscription.&lt;/li&gt;
&lt;li&gt;And ~3.6 TB of disk sat &lt;strong&gt;outside Proxmox&lt;/strong&gt;, in orphaned volumes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In one afternoon, DNS and &lt;code&gt;/etc/hosts&lt;/code&gt; were fixed, the repositories were switched to the free ones and the system was upgraded (182 packages and a reboot). Every fix was verified and recorded in the bundle, with a dated log.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What struck me: Claude doesn't guess. Before wiping the NVMe, it showed me &lt;strong&gt;what was inside&lt;/strong&gt; each volume (old Docker and Transmission containers, an entire Umbrel VM) and waited for me to say it could all go.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Chapter 2: the disks
&lt;/h2&gt;

&lt;p&gt;With my approval, the 4 TB Kingston NVMe was wiped and turned into a 3.57 TB &lt;code&gt;lvmthin&lt;/code&gt; storage called &lt;code&gt;vmdata&lt;/code&gt;. All VMs and containers were migrated to it.&lt;/p&gt;

&lt;p&gt;The Windows VM put up a fight. After the migration its disk ended up 100% allocated, because &lt;code&gt;discard&lt;/code&gt; wasn't enabled. Claude turned it on and tried the normal route (a Windows &lt;em&gt;retrim&lt;/em&gt;), which &lt;strong&gt;didn't work&lt;/strong&gt; with that version of the VirtIO driver. Instead of giving up, it did an &lt;em&gt;offline&lt;/em&gt; round-trip copy through the other storage, and the disk dropped from &lt;strong&gt;100% to 28.65%&lt;/strong&gt; usage.&lt;/p&gt;

&lt;p&gt;I just watched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 3: an Ubuntu VM I could actually use
&lt;/h2&gt;

&lt;p&gt;I had created an Ubuntu 26.04 VM and asked for two things: a static IP and remote desktop access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The static IP&lt;/strong&gt; seemed trivial. Claude configured NetworkManager and, while testing, noticed the VM now had &lt;strong&gt;two IPs&lt;/strong&gt;: the installer's config file was still keeping DHCP on underneath. Once fixed, the VM answered only on &lt;code&gt;192.168.0.103&lt;/code&gt;. I picked the 103 ending because that's its ID in Proxmox, which makes it easy to remember.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RDP&lt;/strong&gt; turned into a little saga:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Claude enabled GNOME's &lt;em&gt;Remote Login&lt;/em&gt;. From my Mac, &lt;strong&gt;Microsoft's Windows App got stuck&lt;/strong&gt; on "Securing connection".&lt;/li&gt;
&lt;li&gt;Reading the server logs, it found that authentication worked, but during the hand-off to the session, Microsoft's Mac client re-sent the wrong credentials. It's a known bug.&lt;/li&gt;
&lt;li&gt;We switched to &lt;strong&gt;FreeRDP&lt;/strong&gt;, which also failed, this time &lt;strong&gt;before even leaving the Mac&lt;/strong&gt;. macOS blocks non-Apple binaries from reaching the local network, and they don't even show up in the permissions list.&lt;/li&gt;
&lt;li&gt;The fix was an &lt;strong&gt;SSH tunnel&lt;/strong&gt;: FreeRDP connects to &lt;code&gt;localhost&lt;/code&gt;, and the tunnel carries it to the VM.&lt;/li&gt;
&lt;li&gt;So I wouldn't have to remember commands, Claude wrote an &lt;code&gt;rdp-ubuntu&lt;/code&gt; script (opens the tunnel, pulls the password from the macOS Keychain, connects, and tears everything down on exit) and then an &lt;strong&gt;app with an icon&lt;/strong&gt; in the Applications folder.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Today I click an icon and I'm in Ubuntu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 4: the USB drive becomes a torrent server
&lt;/h2&gt;

&lt;p&gt;I asked for the 1.4 TB USB drive to be used only for torrent downloads, with a web interface. The first thing Claude noticed: the drive was plugged into a &lt;strong&gt;USB 2.0 port&lt;/strong&gt;. I moved it, Claude measured the read speed (117 MB/s at the start of the disk), and we moved on.&lt;/p&gt;

&lt;p&gt;Here something came up that I wouldn't have planned for on my own: &lt;strong&gt;the drive can be unplugged&lt;/strong&gt;. So the whole design was built around that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The drive is passed through to the VM as a &lt;strong&gt;USB device&lt;/strong&gt;, not as a disk, so the VM boots even without it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;qBittorrent&lt;/strong&gt; only runs while the drive is mounted. If the drive goes away, it stops on its own, and nothing is ever written to the system disk.&lt;/li&gt;
&lt;li&gt;An &lt;code&gt;ejetar-torrents&lt;/code&gt; ("eject torrents") command stops everything safely before you pull the cable.&lt;/li&gt;
&lt;li&gt;When the drive is plugged back in, it mounts and qBittorrent comes back by itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We tested all of it: a real download with a verified checksum, a simulated unplug, a replug, and booting with and without the drive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 5: getting to the files from anywhere
&lt;/h2&gt;

&lt;p&gt;I wanted to upload, download and delete files from the web, and also see the folders directly in the Finder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the web&lt;/strong&gt;, the plan was File Browser. Claude installed it and, when the service started, read the warning the program itself printed: &lt;strong&gt;the project had been archived&lt;/strong&gt; a month earlier, with unpatched security flaws. One of them deleted folders when an upload failed. Claude stopped, explained the risk and offered me three actively maintained alternatives. I chose &lt;strong&gt;copyparty&lt;/strong&gt;, which was validated with a &lt;strong&gt;6 GB&lt;/strong&gt; upload and download, checksum verified, resume-after-interruption and all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the Finder&lt;/strong&gt;, in came &lt;strong&gt;Samba&lt;/strong&gt;. The server shows up on its own in the Mac's sidebar. And then came the tensest moment of the week: in the middle of the 6 GB copy test, &lt;strong&gt;the entire server dropped off the network&lt;/strong&gt;. I had to power-cycle it with the button.&lt;/p&gt;

&lt;p&gt;When it came back, Claude read the logs and found the cause within minutes: the mini PC's &lt;strong&gt;Intel I219 network card&lt;/strong&gt; had hung (&lt;code&gt;Detected Hardware Unit Hang&lt;/code&gt;), a known bug in that chip under heavy traffic. The fix was to turn off two of the card's offloads (TSO/GSO). For good measure, it set up a &lt;strong&gt;watchdog&lt;/strong&gt; that resets the card automatically if it ever hangs again. The same 6 GB test then passed without a single hang.&lt;/p&gt;

&lt;p&gt;The same day it found another subtle problem: &lt;code&gt;ejetar-torrents&lt;/code&gt; sometimes &lt;strong&gt;re-mounted the drive on its own&lt;/strong&gt; right after unmounting it. The cause was an interaction between systemd and &lt;code&gt;fstab&lt;/code&gt;, triggered by a timer that runs every 10 minutes. One option (&lt;code&gt;noauto&lt;/code&gt;) fixed it for good.&lt;/p&gt;

&lt;h2&gt;
  
  
  Chapter 6: one dashboard to see it all
&lt;/h2&gt;

&lt;p&gt;To wrap up the server side, I asked for a &lt;strong&gt;dashboard&lt;/strong&gt;. Claude installed &lt;strong&gt;Glance&lt;/strong&gt; at &lt;code&gt;http://192.168.0.103&lt;/code&gt;, no port needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;icons and status for every service;&lt;/li&gt;
&lt;li&gt;disk usage, CPU and RAM for the VM;&lt;/li&gt;
&lt;li&gt;torrent speeds;&lt;/li&gt;
&lt;li&gt;a summary of the &lt;strong&gt;Proxmox host&lt;/strong&gt;, with CPU, RAM and the state of each VM, read through a &lt;strong&gt;read-only&lt;/strong&gt; token. It tested that the token can't shut anything down.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F45vczea0k8qyk6wu2ry0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F45vczea0k8qyk6wu2ry0.png" alt=" " width="327" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the test with the drive ejected, the dashboard showed "13 GB of 128 GB" for the USB drive. It was reading the empty folder on the system disk. Claude didn't accept the wrong number: it wrote a small collector that reports the real state, and now the dashboard shows &lt;strong&gt;"● HD desconectado"&lt;/strong&gt; ("drive disconnected") when that's the case.&lt;/p&gt;

&lt;h2&gt;
  
  
  The method behind the magic
&lt;/h2&gt;

&lt;p&gt;Looking back, what made this work wasn't Claude "knowing Linux". It was the &lt;strong&gt;way of working&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Plan before executing.&lt;/strong&gt; Every larger task started with a plan saved in &lt;code&gt;plan/yyyy-mm-dd.md&lt;/code&gt;, with decisions, reasons and a checkbox for each phase. I approved it and followed progress there.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test everything, for real.&lt;/strong&gt; Nothing was called done without a test: checksums on 6 GB files, simulated unplugs, reboots with and without the drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation as code.&lt;/strong&gt; The knowledge bundle (&lt;code&gt;configuration/&lt;/code&gt;), in OKF format, is updated with every change and validated automatically with the &lt;a href="https://okfgem.com" rel="noopener noreferrer"&gt;OKF gem&lt;/a&gt;, which checks the documents' structure and flags broken links and stale indexes. Any future session starts out knowing what has already been done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask before anything irreversible.&lt;/strong&gt; Wiping a disk, formatting the drive, deleting files: always with the exact list of what would be affected and my confirmation. When a request of mine was ambiguous and matched more than one thing, it asked which one before deleting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets stay out of the chat.&lt;/strong&gt; Passwords were generated and stored in the Mac's Keychain, and handed to services without ever appearing on screen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What went wrong (and why it gave me more confidence)
&lt;/h2&gt;

&lt;p&gt;It wasn't all perfect, and I think this is the most important part of the post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The server outage&lt;/strong&gt; was caused by one of Claude's own tests. The difference is that it diagnosed, fixed and hardened against the problem right after.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It got dates wrong&lt;/strong&gt; in the documentation once and corrected them when it noticed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hasty conclusion:&lt;/strong&gt; the first time the drive re-mounted itself right after being ejected, Claude put it down to a side effect of the previous test, because it couldn't reproduce it. When it happened again, &lt;strong&gt;it went back to it on its own&lt;/strong&gt;, admitted the explanation had been wrong, cross-checked the timestamps against the logs and found the real cause (the 10-minute timer and &lt;code&gt;fstab&lt;/code&gt;). Its first method for simulating a drive unplug also didn't actually work; it noticed and switched to one that did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Early on, I pasted a password into the chat.&lt;/strong&gt; Claude used it, but recommended I change it. I did, and since then everything goes through the Keychain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An assistant that never makes mistakes is one I'd have no way to evaluate. One that &lt;strong&gt;finds its own mistakes, explains them and documents how to avoid them&lt;/strong&gt; is one I'll let touch my server.&lt;/p&gt;

&lt;h2&gt;
  
  
  By the numbers
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 server&lt;/strong&gt; cleaned up: DNS, repositories, upgrade, and 4 TB of NVMe reclaimed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 new services&lt;/strong&gt; on the Ubuntu VM (RDP, qBittorrent, copyparty, Samba, Glance and the dashboard's status collector), plus the network-card watchdog on the host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 hardware and software problems&lt;/strong&gt; I didn't know about: the USB 2.0 port, the network card that hung, and the drive's phantom re-mount.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 documentation bundle&lt;/strong&gt;, &lt;strong&gt;4 execution plans&lt;/strong&gt;, and &lt;strong&gt;zero config files&lt;/strong&gt; edited by me.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I didn't stop understanding my server. Quite the opposite: today it's &lt;strong&gt;better documented than anything I've ever set up on my own&lt;/strong&gt;. The difference is that I spent the week deciding &lt;em&gt;what&lt;/em&gt; I wanted, not fighting over &lt;em&gt;how&lt;/em&gt; to do it.&lt;/p&gt;

&lt;p&gt;If you have a homelab gathering dust for lack of time, my advice is: open a terminal, connect Claude to your server, and start by asking it to &lt;strong&gt;look and document&lt;/strong&gt; before changing anything. The rest comes from the conversation.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>devops</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>🇧🇷 Como montei meu homelab Proxmox conversando com o Claude</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 07 Oct 2026 13:56:19 +0000</pubDate>
      <link>https://dev.to/videosdeti/como-montei-meu-homelab-proxmox-conversando-com-o-claude-29m3</link>
      <guid>https://dev.to/videosdeti/como-montei-meu-homelab-proxmox-conversando-com-o-claude-29m3</guid>
      <description>&lt;p&gt;&lt;em&gt;Uma semana, um servidor esquecido num canto e nenhuma linha de configuração digitada à mão.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Eu tinha um mini PC rodando Proxmox VE. Na prática, ele era um daqueles projetos que a gente começa empolgado e larga pela metade: instalado numa rede antiga, com um NVMe de 4 TB cheio de volumes de experimentos que eu nem lembrava mais, um HD USB de 1,4 TB guardando uma VM de Bitcoin abandonada e uma VM do Windows que eu usava de vez em quando, sem saber direito como estava configurada.&lt;/p&gt;

&lt;p&gt;A ideia desta vez foi diferente. Em vez de passar fins de semana lendo fóruns, montando discos e editando arquivos de configuração, resolvi fazer tudo &lt;strong&gt;conversando com o Claude Code&lt;/strong&gt;. Eu descrevia o que queria em português, e ele fazia o resto por SSH: inspecionava, planejava, executava, testava e documentava.&lt;/p&gt;

&lt;p&gt;Este post conta como foi.&lt;/p&gt;




&lt;h2&gt;
  
  
  Capítulo 1: primeiro, entender a casa
&lt;/h2&gt;

&lt;p&gt;A primeira coisa que o Claude fez não foi mudar nada. Foi &lt;strong&gt;olhar&lt;/strong&gt;. Entrou no servidor por SSH e fez um inventário completo: hardware, versão do Proxmox, discos, rede, VMs e containers. E guardou tudo num lugar que virou a espinha dorsal do projeto: um &lt;strong&gt;bundle de conhecimento&lt;/strong&gt; em markdown no formato OKF (Open Knowledge Format), com um arquivo por assunto, versionado junto com o resto. Para gerenciar esses documentos usamos a &lt;a href="https://okfgem.com" rel="noopener noreferrer"&gt;OKF gem&lt;/a&gt;, uma gem que ajuda a criar, validar e manter documentos OKF. Recomendo o uso para quem quer uma documentação que humanos e agentes de IA leiam da mesma fonte.&lt;/p&gt;

&lt;p&gt;Logo de cara ele achou seis problemas que eu nem sabia que tinha:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O servidor &lt;strong&gt;não resolvia nomes&lt;/strong&gt;. O DNS ainda apontava para o roteador da rede antiga (10.0.0.1), e por isso o &lt;code&gt;apt update&lt;/code&gt; travava.&lt;/li&gt;
&lt;li&gt;O &lt;code&gt;/etc/hosts&lt;/code&gt; dizia que o servidor tinha um IP que não existia mais.&lt;/li&gt;
&lt;li&gt;O container do Pi-hole tinha um gateway fora da sub-rede.&lt;/li&gt;
&lt;li&gt;Os repositórios &lt;em&gt;enterprise&lt;/em&gt; do Proxmox estavam ativos sem assinatura.&lt;/li&gt;
&lt;li&gt;E ~3,6 TB de disco estavam &lt;strong&gt;fora do Proxmox&lt;/strong&gt;, em volumes órfãos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em uma tarde, o DNS e o &lt;code&gt;/etc/hosts&lt;/code&gt; foram corrigidos, os repositórios trocados pelos gratuitos e o sistema atualizado (182 pacotes e um reboot). Cada correção foi conferida e registrada no bundle, com um log datado.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O que me chamou atenção: o Claude não "chuta". Antes de apagar o NVMe, ele me mostrou &lt;strong&gt;o que havia dentro&lt;/strong&gt; de cada volume (containers antigos de Docker e Transmission, uma VM Umbrel inteira) e esperou eu dizer que podia descartar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Capítulo 2: os discos
&lt;/h2&gt;

&lt;p&gt;Com a minha autorização, o NVMe Kingston de 4 TB foi apagado e virou um storage &lt;code&gt;lvmthin&lt;/code&gt; de 3,57 TB chamado &lt;code&gt;vmdata&lt;/code&gt;. Todas as VMs e containers foram migrados para ele.&lt;/p&gt;

&lt;p&gt;A VM do Windows deu trabalho. Depois da migração, o disco dela ficou 100% alocado, porque não tinha &lt;code&gt;discard&lt;/code&gt; habilitado. O Claude ativou o recurso e tentou o caminho normal (o &lt;em&gt;retrim&lt;/em&gt; do Windows), que &lt;strong&gt;não funcionou&lt;/strong&gt; com aquela versão do driver VirtIO. Em vez de desistir, ele fez uma cópia &lt;em&gt;offline&lt;/em&gt; de ida e volta pelo outro storage, e o disco caiu de &lt;strong&gt;100% para 28,65%&lt;/strong&gt; de ocupação.&lt;/p&gt;

&lt;p&gt;Eu só acompanhei.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capítulo 3: uma VM Ubuntu que eu pudesse usar de verdade
&lt;/h2&gt;

&lt;p&gt;Eu tinha criado uma VM com Ubuntu 26.04 e pedi duas coisas: IP fixo e acesso remoto pela área de trabalho.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O IP fixo&lt;/strong&gt; parecia trivial. O Claude configurou o NetworkManager e, ao testar, percebeu que a VM tinha ficado com &lt;strong&gt;dois IPs&lt;/strong&gt;: o arquivo do instalador mantinha o DHCP ligado por baixo. Corrigido, a VM passou a responder só no &lt;code&gt;192.168.0.103&lt;/code&gt;. Escolhi o final 103 porque é o ID dela no Proxmox, e assim fica fácil lembrar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O RDP&lt;/strong&gt; foi uma pequena saga:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;O Claude ativou o &lt;em&gt;Login Remoto&lt;/em&gt; do GNOME. Do meu Mac, o &lt;strong&gt;Windows App da Microsoft ficava travado&lt;/strong&gt; em "Securing connection".&lt;/li&gt;
&lt;li&gt;Lendo os logs do servidor, ele descobriu que a autenticação funcionava, mas, no redirecionamento para a sessão, o cliente da Microsoft no Mac reenviava as credenciais erradas. É um bug conhecido.&lt;/li&gt;
&lt;li&gt;Trocamos para o &lt;strong&gt;FreeRDP&lt;/strong&gt;, que também falhou, desta vez &lt;strong&gt;antes de sair do Mac&lt;/strong&gt;. O macOS bloqueia binários fora da Apple de acessar a rede local, e eles nem aparecem na lista de permissões.&lt;/li&gt;
&lt;li&gt;A solução foi um &lt;strong&gt;túnel SSH&lt;/strong&gt;: o FreeRDP conecta em &lt;code&gt;localhost&lt;/code&gt;, e o túnel leva até a VM.&lt;/li&gt;
&lt;li&gt;Para não depender de comando, o Claude criou um script &lt;code&gt;rdp-ubuntu&lt;/code&gt; (abre o túnel, busca a senha no Chaveiro do macOS, conecta e fecha tudo ao sair) e depois um &lt;strong&gt;app com ícone&lt;/strong&gt; na pasta Aplicativos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hoje eu clico num ícone e estou no Ubuntu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capítulo 4: o HD USB vira servidor de torrents
&lt;/h2&gt;

&lt;p&gt;Pedi que o HD USB de 1,4 TB fosse usado só para downloads de torrent, com interface web. A primeira coisa que o Claude notou: o HD estava numa &lt;strong&gt;porta USB 2.0&lt;/strong&gt;. Troquei de porta, ele mediu a leitura (117 MB/s no início do disco) e seguimos.&lt;/p&gt;

&lt;p&gt;Aqui apareceu algo que eu não teria planejado sozinho: &lt;strong&gt;o HD pode ser desplugado&lt;/strong&gt;. Então o desenho inteiro foi pensado para isso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O HD é repassado para a VM como &lt;strong&gt;dispositivo USB&lt;/strong&gt;, e não como disco. Assim a VM liga mesmo sem ele.&lt;/li&gt;
&lt;li&gt;O &lt;strong&gt;qBittorrent&lt;/strong&gt; só roda com o HD montado. Se o HD sai, ele para sozinho, e nada é gravado no disco do sistema.&lt;/li&gt;
&lt;li&gt;Um comando &lt;code&gt;ejetar-torrents&lt;/code&gt; para tudo com segurança antes de tirar o cabo.&lt;/li&gt;
&lt;li&gt;Ao replugar, o HD monta e o qBittorrent volta sozinho.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Testamos tudo: download real com checksum conferido, desplugue simulado, replugue e boot com e sem o HD.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capítulo 5: acessar os arquivos de qualquer jeito
&lt;/h2&gt;

&lt;p&gt;Eu queria enviar, baixar e apagar arquivos pela web e também ver as pastas direto no Finder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pela web&lt;/strong&gt;, o plano era o File Browser. O Claude instalou e, ao subir o serviço, leu o aviso que o próprio programa imprimia: &lt;strong&gt;o projeto tinha sido arquivado&lt;/strong&gt; um mês antes, com falhas de segurança sem correção. Uma delas apagava pastas quando um upload falhava. Ele parou, me explicou o risco e me deu três alternativas ativas. Escolhi o &lt;strong&gt;copyparty&lt;/strong&gt;, que foi validado com um upload e um download de &lt;strong&gt;6 GB&lt;/strong&gt;, checksum conferido, retomada no meio e tudo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No Finder&lt;/strong&gt;, entrou o &lt;strong&gt;Samba&lt;/strong&gt;. O servidor aparece sozinho na barra lateral do Mac. E aí veio o momento mais tenso da semana: no meio do teste de cópia de 6 GB, &lt;strong&gt;o servidor inteiro sumiu da rede&lt;/strong&gt;. Tive que desligar e ligar no botão.&lt;/p&gt;

&lt;p&gt;Quando ele voltou, o Claude leu os logs e achou a causa em minutos: a &lt;strong&gt;placa de rede Intel I219&lt;/strong&gt; do mini PC tinha travado (&lt;code&gt;Detected Hardware Unit Hang&lt;/code&gt;), um bug conhecido desse chip sob tráfego pesado. A correção foi desligar duas otimizações da placa (TSO/GSO). Para garantir, ele criou um &lt;strong&gt;vigia&lt;/strong&gt; que reseta a placa sozinho se ela travar de novo. O mesmo teste de 6 GB passou depois sem nenhum travamento.&lt;/p&gt;

&lt;p&gt;No mesmo dia ele achou mais um problema sutil: o &lt;code&gt;ejetar-torrents&lt;/code&gt; às vezes &lt;strong&gt;remontava o HD sozinho&lt;/strong&gt; logo depois de desmontar. A causa era uma interação do systemd com o &lt;code&gt;fstab&lt;/code&gt;, disparada por um timer que roda a cada 10 minutos. Uma opção (&lt;code&gt;noauto&lt;/code&gt;) resolveu de vez.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capítulo 6: um painel para ver tudo
&lt;/h2&gt;

&lt;p&gt;Para fechar a parte do servidor, pedi um &lt;strong&gt;dashboard&lt;/strong&gt;. O Claude instalou o &lt;strong&gt;Glance&lt;/strong&gt; em &lt;code&gt;http://192.168.0.103&lt;/code&gt;, sem porta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ícones e status de cada serviço;&lt;/li&gt;
&lt;li&gt;ocupação dos discos, CPU e RAM da VM;&lt;/li&gt;
&lt;li&gt;velocidade dos torrents;&lt;/li&gt;
&lt;li&gt;um resumo do &lt;strong&gt;host Proxmox&lt;/strong&gt;, com CPU, RAM e estado de cada VM, lido por um token &lt;strong&gt;só de leitura&lt;/strong&gt;. Ele testou que o token não consegue desligar nada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsbbw2iub1afb5ckma0r6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsbbw2iub1afb5ckma0r6.png" alt=" " width="327" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No teste com o HD ejetado, o painel mostrou "13 GB de 128 GB" no lugar do HD. Estava lendo a pasta vazia no disco do sistema. O Claude não aceitou o número errado: criou um pequeno coletor que informa o estado real, e agora o painel mostra &lt;strong&gt;"● HD desconectado"&lt;/strong&gt; quando é o caso.&lt;/p&gt;

&lt;h2&gt;
  
  
  O método por trás da mágica
&lt;/h2&gt;

&lt;p&gt;Olhando para trás, o que fez isso funcionar não foi o Claude "saber Linux". Foi o &lt;strong&gt;jeito de trabalhar&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Planejar antes de executar.&lt;/strong&gt; Toda tarefa maior começava com um plano gravado em &lt;code&gt;plan/aaaa-mm-dd.md&lt;/code&gt;, com decisões, motivos e caixinhas de cada fase. Eu aprovava e acompanhava o andamento ali.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Testar tudo, de verdade.&lt;/strong&gt; Nada era dado como pronto sem teste: checksums de arquivos de 6 GB, desplugues simulados, reinícios com e sem o HD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentar como código.&lt;/strong&gt; O bundle de conhecimento (&lt;code&gt;configuration/&lt;/code&gt;), no formato OKF, é atualizado a cada mudança e validado automaticamente com a &lt;a href="https://okfgem.com" rel="noopener noreferrer"&gt;OKF gem&lt;/a&gt;, que confere a estrutura dos documentos e aponta links quebrados e índices desatualizados. Qualquer sessão futura começa sabendo o que já foi feito.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perguntar antes do irreversível.&lt;/strong&gt; Apagar um disco, formatar o HD, remover arquivos: sempre com a lista exata do que seria afetado e a minha confirmação. Quando um pedido meu era ambíguo e casava com mais de uma coisa, ele perguntava qual antes de apagar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segredos fora da conversa.&lt;/strong&gt; Senhas geradas e guardadas no Chaveiro do Mac, passadas aos serviços sem aparecer na tela.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que deu errado (e por que isso me deu mais confiança)
&lt;/h2&gt;

&lt;p&gt;Não foi tudo perfeito, e eu acho que essa é a parte mais importante deste post:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A queda do servidor&lt;/strong&gt; foi provocada por um teste do próprio Claude. A diferença é que ele diagnosticou, corrigiu e blindou o problema em seguida.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ele errou datas&lt;/strong&gt; na documentação uma vez e corrigiu ao perceber.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uma conclusão apressada:&lt;/strong&gt; a primeira vez que o HD remontou sozinho logo depois de ejetar, o Claude atribuiu o caso a um efeito colateral do teste anterior, porque não conseguiu reproduzir. Quando aconteceu de novo, &lt;strong&gt;ele mesmo voltou ao assunto&lt;/strong&gt;, admitiu que a explicação estava errada, cruzou os horários com os logs e achou a causa real (o timer de 10 minutos e o &lt;code&gt;fstab&lt;/code&gt;). O primeiro método dele para simular o desplugue do HD também não funcionava, e ele percebeu e trocou por um que funcionava.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No começo eu colei uma senha na conversa.&lt;/strong&gt; O Claude usou, mas recomendou trocá-la. Troquei, e desde então tudo passa pelo Chaveiro.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um assistente que nunca erra eu não teria como avaliar. Um que &lt;strong&gt;encontra os próprios erros, explica e documenta como evitar&lt;/strong&gt; é um que eu deixo mexer no meu servidor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Em números
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 servidor&lt;/strong&gt; saneado: DNS, repositórios, atualização e 4 TB de NVMe recuperados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 serviços&lt;/strong&gt; novos na VM Ubuntu (RDP, qBittorrent, copyparty, Samba, Glance e o coletor de status do painel), mais o vigia da placa de rede no host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 problemas de hardware e software&lt;/strong&gt; que eu não conhecia: a porta USB 2.0, a placa de rede que travava e a remontagem fantasma do HD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;1 bundle de documentação&lt;/strong&gt;, &lt;strong&gt;4 planos&lt;/strong&gt; de execução e &lt;strong&gt;zero arquivos&lt;/strong&gt; de configuração editados por mim.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Eu não deixei de entender o meu servidor. Pelo contrário: hoje ele está &lt;strong&gt;mais bem documentado do que qualquer coisa que eu já montei sozinho&lt;/strong&gt;. A diferença é que eu passei a semana decidindo &lt;em&gt;o que&lt;/em&gt; queria, e não brigando com &lt;em&gt;como&lt;/em&gt; fazer.&lt;/p&gt;

&lt;p&gt;Se você tem um homelab parado por falta de tempo, a minha dica é: abra um terminal, conecte o Claude ao seu servidor e comece pedindo para ele &lt;strong&gt;olhar e documentar&lt;/strong&gt; antes de mudar qualquer coisa. O resto vem conversando.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>claude</category>
      <category>devops</category>
    </item>
    <item>
      <title>🇺🇸 Why You Should Adopt RubyUI in Your Rails Projects (and How Three Gems Can Accelerate Your Journey)</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Sat, 25 Jul 2026 23:31:11 +0000</pubDate>
      <link>https://dev.to/videosdeti/why-you-should-adopt-rubyui-in-your-rails-projects-and-how-three-gems-can-accelerate-your-4hn6</link>
      <guid>https://dev.to/videosdeti/why-you-should-adopt-rubyui-in-your-rails-projects-and-how-three-gems-can-accelerate-your-4hn6</guid>
      <description>&lt;p&gt;Over the past few years, the Ruby on Rails ecosystem has seen a resurgence of server-side UI development. Thanks to projects like &lt;strong&gt;Phlex&lt;/strong&gt;, &lt;strong&gt;Hotwire&lt;/strong&gt;, and &lt;strong&gt;RubyUI&lt;/strong&gt;, it's now possible to build modern, responsive, and highly productive applications without relying on large JavaScript frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RubyUI&lt;/strong&gt; provides a beautiful collection of components built on top of Phlex and Tailwind CSS, offering an experience similar to what shadcn/ui brought to the React ecosystem—but fully embracing the Rails way.&lt;/p&gt;

&lt;p&gt;Like any relatively new technology, however, adopting RubyUI comes with a learning curve. You need to understand how components work, learn their APIs, and discover the best patterns for building real-world applications.&lt;/p&gt;

&lt;p&gt;That's exactly why I created three open-source gems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ruby_ui_converter&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruby_ui_admin&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each one solves a different problem, and together they make adopting RubyUI significantly easier.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Choose RubyUI?
&lt;/h1&gt;

&lt;p&gt;There are many reasons to adopt RubyUI in your next Rails project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ruby-first Components
&lt;/h2&gt;

&lt;p&gt;Instead of maintaining large ERB templates filled with HTML, you build your UI using Ruby components, making your codebase cleaner, easier to maintain, and more reusable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Organization
&lt;/h2&gt;

&lt;p&gt;Each component has a single responsibility, making your application easier to understand, test, and evolve over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Seamless Hotwire Integration
&lt;/h2&gt;

&lt;p&gt;RubyUI was designed to work naturally with Hotwire and Stimulus, allowing you to build highly interactive interfaces while keeping rendering on the server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Modern Design
&lt;/h2&gt;

&lt;p&gt;RubyUI ships with a polished set of components, so you can create professional-looking applications without reinventing common UI elements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster Development
&lt;/h2&gt;

&lt;p&gt;Once you're familiar with the ecosystem, building new screens becomes dramatically faster than writing everything manually.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Real Challenge Isn't Installing RubyUI
&lt;/h1&gt;

&lt;p&gt;Installing RubyUI only takes a few minutes.&lt;/p&gt;

&lt;p&gt;The real challenge starts when you begin building an actual application.&lt;/p&gt;

&lt;p&gt;Questions like these quickly appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do I migrate my existing views?&lt;/li&gt;
&lt;li&gt;What's the best way to structure components?&lt;/li&gt;
&lt;li&gt;How do I build a complete CRUD interface?&lt;/li&gt;
&lt;li&gt;How can I create an admin panel?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These three gems were built to answer exactly those questions.&lt;/p&gt;




&lt;h1&gt;
  
  
  ruby_ui_converter
&lt;/h1&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest obstacles when adopting RubyUI is migrating an existing Rails application.&lt;/p&gt;

&lt;p&gt;Most projects already contain hundreds—or even thousands—of &lt;code&gt;.erb&lt;/code&gt; templates.&lt;/p&gt;

&lt;p&gt;Rewriting every view manually would be incredibly time-consuming.&lt;/p&gt;

&lt;p&gt;That's where &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; comes in.&lt;/p&gt;

&lt;p&gt;Instead of converting HTML, the gem converts &lt;strong&gt;existing ERB templates into RubyUI components&lt;/strong&gt;, dramatically reducing the amount of repetitive work involved in migrating a project.&lt;/p&gt;

&lt;p&gt;If you're modernizing an existing Rails application, this tool can save you countless hours.&lt;/p&gt;




&lt;h1&gt;
  
  
  ruby_ui_scaffold
&lt;/h1&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you've learned the basics of RubyUI, another question naturally arises:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;How do I build a complete application with it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most examples available online showcase individual components.&lt;/p&gt;

&lt;p&gt;Real-world applications, however, need much more:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;resource listings;&lt;/li&gt;
&lt;li&gt;forms;&lt;/li&gt;
&lt;li&gt;pagination;&lt;/li&gt;
&lt;li&gt;filters;&lt;/li&gt;
&lt;li&gt;navigation;&lt;/li&gt;
&lt;li&gt;full CRUD operations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's exactly what &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt; provides.&lt;/p&gt;

&lt;p&gt;It generates complete CRUD interfaces using RubyUI, giving you both a solid starting point for new projects and practical examples of how components work together.&lt;/p&gt;

&lt;p&gt;Whether you're learning RubyUI or bootstrapping a new application, it can significantly increase your productivity.&lt;/p&gt;




&lt;h1&gt;
  
  
  ruby_ui_admin
&lt;/h1&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_admin" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_admin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After generating a few CRUDs, another need usually emerges:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What if there were an admin interface built entirely on top of RubyUI?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That question led to the creation of &lt;strong&gt;ruby_ui_admin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The goal is simple: provide a modern administrative foundation built with RubyUI.&lt;/p&gt;

&lt;p&gt;Instead of recreating the same infrastructure for every project, you get a ready-to-use admin layout that includes elements such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;admin layout;&lt;/li&gt;
&lt;li&gt;sidebar;&lt;/li&gt;
&lt;li&gt;header;&lt;/li&gt;
&lt;li&gt;navigation;&lt;/li&gt;
&lt;li&gt;common pages;&lt;/li&gt;
&lt;li&gt;reusable UI components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows you to focus on your application's business logic instead of rebuilding the same administrative interface over and over again.&lt;/p&gt;




&lt;h1&gt;
  
  
  Three Gems, One Ecosystem
&lt;/h1&gt;

&lt;p&gt;Although each gem addresses a different challenge, they complement one another perfectly.&lt;/p&gt;

&lt;p&gt;A typical workflow might look like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; to migrate existing ERB templates.&lt;/li&gt;
&lt;li&gt;Generate new CRUD interfaces with &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Organize everything inside an admin dashboard powered by &lt;strong&gt;ruby_ui_admin&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Together, they dramatically reduce the time required to start and scale a RubyUI-based Rails application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Spend Less Time Learning, More Time Building
&lt;/h1&gt;

&lt;p&gt;Every new library comes with a learning curve.&lt;/p&gt;

&lt;p&gt;You have to read documentation, understand component APIs, and experiment with different patterns before becoming productive.&lt;/p&gt;

&lt;p&gt;These gems shorten that journey.&lt;/p&gt;

&lt;p&gt;Instead of starting from a blank page every time, you work with practical examples, reusable structures, and tools that automate repetitive tasks.&lt;/p&gt;

&lt;p&gt;The result is a much smoother adoption of RubyUI and a far more enjoyable development experience.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;RubyUI is quickly becoming one of the most exciting options for building modern user interfaces in Ruby on Rails with Phlex and Hotwire.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;ruby_ui_converter&lt;/strong&gt;, &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;, and &lt;strong&gt;ruby_ui_admin&lt;/strong&gt; gems were created to make that journey even easier.&lt;/p&gt;

&lt;p&gt;Each one solves a specific challenge:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ruby_ui_converter&lt;/strong&gt; helps migrate existing ERB templates into RubyUI components.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt; accelerates CRUD development while serving as a learning tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ruby_ui_admin&lt;/strong&gt; provides a ready-made foundation for modern administrative interfaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're planning to adopt RubyUI in your next Rails project, these three gems can save you many hours of repetitive work and help you unlock the full potential of the RubyUI ecosystem from day one.&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Repositories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ruby_ui_converter — &lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ruby_ui_scaffold — &lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ruby_ui_admin — &lt;a href="https://github.com/jacksonpires/ruby_ui_admin" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_admin&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>softwaredevelopment</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🇧🇷 Por que adotar RubyUI em seus projetos Rails (e como três gems podem acelerar essa jornada)</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Sat, 25 Jul 2026 23:30:06 +0000</pubDate>
      <link>https://dev.to/videosdeti/por-que-adotar-rubyui-em-seus-projetos-rails-e-como-tres-gems-podem-acelerar-essa-jornada-25l8</link>
      <guid>https://dev.to/videosdeti/por-que-adotar-rubyui-em-seus-projetos-rails-e-como-tres-gems-podem-acelerar-essa-jornada-25l8</guid>
      <description>&lt;p&gt;Nos últimos anos, o ecossistema Ruby on Rails voltou a mostrar toda a sua força no desenvolvimento de interfaces server-side. Com ferramentas como &lt;strong&gt;Phlex&lt;/strong&gt;, &lt;strong&gt;Hotwire&lt;/strong&gt; e &lt;strong&gt;RubyUI&lt;/strong&gt;, tornou-se possível criar aplicações modernas, reativas e altamente produtivas sem depender de frameworks JavaScript complexos.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;RubyUI&lt;/strong&gt; oferece uma biblioteca de componentes construída sobre Phlex e Tailwind CSS, proporcionando uma experiência semelhante ao que o shadcn/ui representa para o ecossistema React, mas totalmente integrada à filosofia do Rails.&lt;/p&gt;

&lt;p&gt;Entretanto, como toda tecnologia relativamente nova, existe uma curva de aprendizado. É preciso entender como os componentes funcionam, aprender sua API e descobrir boas práticas para estruturar aplicações reais.&lt;/p&gt;

&lt;p&gt;Foi justamente pensando nesses desafios que nasceram três gems open source:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ruby_ui_converter&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ruby_ui_admin&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada uma resolve um problema específico e, juntas, tornam a adoção do RubyUI muito mais simples.&lt;/p&gt;




&lt;h1&gt;
  
  
  Por que escolher RubyUI?
&lt;/h1&gt;

&lt;p&gt;Existem vários motivos para adotar RubyUI em uma aplicação Rails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Componentes escritos em Ruby
&lt;/h2&gt;

&lt;p&gt;Ao invés de misturar grandes blocos de HTML e ERB, você passa a construir interfaces utilizando componentes Ruby, tornando o código muito mais organizado e reutilizável.&lt;/p&gt;

&lt;h2&gt;
  
  
  Melhor organização
&lt;/h2&gt;

&lt;p&gt;Cada componente possui sua própria responsabilidade, facilitando manutenção, testes e evolução da aplicação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Excelente integração com Hotwire
&lt;/h2&gt;

&lt;p&gt;RubyUI foi pensado para trabalhar em conjunto com Hotwire e Stimulus, permitindo criar interfaces extremamente responsivas sem abrir mão da renderização server-side.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interface moderna
&lt;/h2&gt;

&lt;p&gt;Você obtém componentes com aparência moderna e consistente sem precisar construir tudo do zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Produtividade
&lt;/h2&gt;

&lt;p&gt;Depois que você domina o ecossistema, criar novas telas passa a ser significativamente mais rápido do que construir toda a interface manualmente.&lt;/p&gt;




&lt;h1&gt;
  
  
  O verdadeiro desafio não é usar RubyUI
&lt;/h1&gt;

&lt;p&gt;Na prática, instalar RubyUI leva apenas alguns minutos.&lt;/p&gt;

&lt;p&gt;O desafio aparece quando você começa a desenvolver uma aplicação real.&lt;/p&gt;

&lt;p&gt;Perguntas como estas são bastante comuns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Como converter telas existentes?&lt;/li&gt;
&lt;li&gt;Como escrever componentes corretamente?&lt;/li&gt;
&lt;li&gt;Como montar um CRUD completo?&lt;/li&gt;
&lt;li&gt;Como construir um painel administrativo?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Foi exatamente para responder essas perguntas que essas três gems foram criadas.&lt;/p&gt;




&lt;h1&gt;
  
  
  ruby_ui_converter
&lt;/h1&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Uma das maiores dificuldades ao adotar RubyUI é migrar aplicações Rails já existentes.&lt;/p&gt;

&lt;p&gt;Normalmente elas possuem centenas (ou milhares) de templates &lt;code&gt;.erb&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Reescrever tudo manualmente seria um trabalho enorme.&lt;/p&gt;

&lt;p&gt;O &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; nasceu justamente para reduzir esse esforço.&lt;/p&gt;

&lt;p&gt;A gem converte &lt;strong&gt;templates ERB em componentes RubyUI&lt;/strong&gt;, acelerando o processo de migração e eliminando boa parte do trabalho repetitivo.&lt;/p&gt;

&lt;p&gt;Isso é especialmente útil quando você deseja modernizar uma aplicação sem precisar reescrever cada tela manualmente.&lt;/p&gt;




&lt;h1&gt;
  
  
  ruby_ui_scaffold
&lt;/h1&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois de aprender alguns componentes, surge uma nova necessidade:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Como construir uma aplicação inteira utilizando RubyUI?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A maioria dos exemplos disponíveis mostra apenas componentes isolados.&lt;/p&gt;

&lt;p&gt;Na prática, aplicações possuem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;listagens;&lt;/li&gt;
&lt;li&gt;formulários;&lt;/li&gt;
&lt;li&gt;paginação;&lt;/li&gt;
&lt;li&gt;filtros;&lt;/li&gt;
&lt;li&gt;navegação;&lt;/li&gt;
&lt;li&gt;ações CRUD.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt; gera exatamente esse tipo de estrutura.&lt;/p&gt;

&lt;p&gt;Em poucos minutos você possui um CRUD completo utilizando RubyUI, seguindo boas práticas e servindo como excelente material de estudo.&lt;/p&gt;

&lt;p&gt;Além de acelerar novos projetos, ele também ajuda quem está aprendendo a entender como os componentes trabalham em conjunto.&lt;/p&gt;




&lt;h1&gt;
  
  
  ruby_ui_admin
&lt;/h1&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_admin" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_admin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois de criar alguns CRUDs, normalmente surge outra necessidade:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E se existisse um painel administrativo inteiro baseado em RubyUI?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Foi dessa ideia que nasceu o &lt;strong&gt;ruby_ui_admin&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A proposta é fornecer uma base moderna para aplicações administrativas utilizando RubyUI.&lt;/p&gt;

&lt;p&gt;Em vez de começar cada projeto do zero, você passa a contar com uma estrutura pronta contendo elementos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;layout administrativo;&lt;/li&gt;
&lt;li&gt;sidebar;&lt;/li&gt;
&lt;li&gt;header;&lt;/li&gt;
&lt;li&gt;navegação;&lt;/li&gt;
&lt;li&gt;páginas padrão;&lt;/li&gt;
&lt;li&gt;componentes reutilizáveis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assim, você pode concentrar seus esforços na regra de negócio da aplicação, em vez de gastar tempo recriando a infraestrutura visual de cada projeto.&lt;/p&gt;




&lt;h1&gt;
  
  
  Um ecossistema pensado para trabalhar em conjunto
&lt;/h1&gt;

&lt;p&gt;Embora cada gem resolva um problema diferente, elas se complementam perfeitamente.&lt;/p&gt;

&lt;p&gt;Um fluxo bastante natural seria:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Utilizar o &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; para migrar templates ERB existentes.&lt;/li&gt;
&lt;li&gt;Gerar novos CRUDs utilizando o &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Organizar toda a aplicação dentro de um painel administrativo criado com o &lt;strong&gt;ruby_ui_admin&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esse fluxo reduz significativamente o tempo necessário para iniciar um novo projeto utilizando RubyUI.&lt;/p&gt;




&lt;h1&gt;
  
  
  Menos tempo aprendendo, mais tempo construindo
&lt;/h1&gt;

&lt;p&gt;Aprender uma nova biblioteca sempre exige investimento.&lt;/p&gt;

&lt;p&gt;Você precisa entender a documentação, conhecer os componentes e descobrir quais padrões funcionam melhor.&lt;/p&gt;

&lt;p&gt;Essas três gems reduzem bastante essa curva de aprendizado.&lt;/p&gt;

&lt;p&gt;Em vez de começar sempre do zero, você passa a trabalhar com exemplos reais, estruturas prontas e ferramentas que automatizam tarefas repetitivas.&lt;/p&gt;

&lt;p&gt;O resultado é uma adoção muito mais rápida do RubyUI e uma experiência de desenvolvimento muito mais produtiva.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusão
&lt;/h1&gt;

&lt;p&gt;RubyUI vem se consolidando como uma excelente opção para quem deseja construir interfaces modernas utilizando Ruby on Rails, Phlex e Hotwire.&lt;/p&gt;

&lt;p&gt;As gems &lt;strong&gt;ruby_ui_converter&lt;/strong&gt;, &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt; e &lt;strong&gt;ruby_ui_admin&lt;/strong&gt; surgiram para facilitar ainda mais essa jornada.&lt;/p&gt;

&lt;p&gt;Cada uma resolve um problema específico:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ruby_ui_converter&lt;/strong&gt; ajuda na migração de templates ERB para componentes RubyUI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt; acelera a criação de CRUDs completos e serve como ferramenta de aprendizado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ruby_ui_admin&lt;/strong&gt; oferece uma base pronta para construção de painéis administrativos modernos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Se você pretende adotar RubyUI em seus próximos projetos, essas três gems podem economizar muitas horas de trabalho e permitir que você aproveite todo o potencial desse ecossistema desde o primeiro dia.&lt;/p&gt;




&lt;h2&gt;
  
  
  Repositórios
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;ruby_ui_converter — &lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ruby_ui_scaffold — &lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;ruby_ui_admin — &lt;a href="https://github.com/jacksonpires/ruby_ui_admin" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_admin&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>frontend</category>
      <category>rails</category>
      <category>ruby</category>
      <category>webdev</category>
    </item>
    <item>
      <title>🇺🇸 What if there was an admin interface built on top of RubyUI? That's how RubyUI Admin was born.</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Fri, 17 Jul 2026 23:53:27 +0000</pubDate>
      <link>https://dev.to/videosdeti/what-if-there-was-an-admin-interface-built-on-top-of-rubyui-thats-how-rubyui-admin-was-born-5ch7</link>
      <guid>https://dev.to/videosdeti/what-if-there-was-an-admin-interface-built-on-top-of-rubyui-thats-how-rubyui-admin-was-born-5ch7</guid>
      <description>&lt;p&gt;We're living in an exciting time for software development.&lt;/p&gt;

&lt;p&gt;With AI, generating code, exploring ideas, and building new projects has never been easier. The old excuse of &lt;em&gt;"that would take too much time"&lt;/em&gt; doesn't really hold anymore.&lt;/p&gt;

&lt;p&gt;If there's a tool you've always wanted but it doesn't exist yet, this is probably the best time to build it.&lt;/p&gt;

&lt;p&gt;That's exactly how &lt;strong&gt;RubyUI Admin&lt;/strong&gt; came to life.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_admin/" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_admin/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For quite some time I've admired projects like Avo and the developer experience they provide for building Rails admin interfaces. At the same time, I was using &lt;strong&gt;RubyUI&lt;/strong&gt;, powered by &lt;strong&gt;Phlex&lt;/strong&gt;, more and more in my own applications.&lt;/p&gt;

&lt;p&gt;Eventually a simple question came to mind:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What if there was an admin dashboard entirely built with RubyUI?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of waiting for someone else to build it, I decided to create it myself.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is RubyUI Admin?
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;RubyUI Admin&lt;/strong&gt; is a Rails engine that turns your Active Record models into a complete administration panel.&lt;/p&gt;

&lt;p&gt;With very little configuration, you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Complete CRUD&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Filters&lt;/li&gt;
&lt;li&gt;Named scopes&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Custom actions&lt;/li&gt;
&lt;li&gt;Bulk actions&lt;/li&gt;
&lt;li&gt;Authorization&lt;/li&gt;
&lt;li&gt;Built-in i18n (English and Brazilian Portuguese)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything is rendered server-side using &lt;strong&gt;RubyUI + Phlex&lt;/strong&gt;, with progressive enhancements powered by &lt;strong&gt;Hotwire (Turbo + Stimulus)&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Your admin becomes part of your application
&lt;/h1&gt;

&lt;p&gt;One of the project's main architectural decisions was to avoid creating yet another isolated UI framework.&lt;/p&gt;

&lt;p&gt;Instead, RubyUI Admin renders your application's own RubyUI components.&lt;/p&gt;

&lt;p&gt;That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the admin follows your application's design system;&lt;/li&gt;
&lt;li&gt;changes to your components are immediately reflected in the admin;&lt;/li&gt;
&lt;li&gt;there's no duplicated UI library to maintain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result is an administration panel that truly feels like part of your application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Server-rendered by default
&lt;/h1&gt;

&lt;p&gt;Following the philosophy that has always made Rails productive, RubyUI Admin embraces server-side rendering.&lt;/p&gt;

&lt;p&gt;JavaScript is only there to enhance the experience.&lt;/p&gt;

&lt;p&gt;Everything continues to work even without JavaScript.&lt;/p&gt;

&lt;p&gt;Turbo and Stimulus simply improve interactions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dialogs&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;li&gt;tabs&lt;/li&gt;
&lt;li&gt;clickable rows&lt;/li&gt;
&lt;li&gt;small interface enhancements&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Documentation inside your application
&lt;/h1&gt;

&lt;p&gt;One feature I'm particularly proud of is the built-in documentation.&lt;/p&gt;

&lt;p&gt;After mounting the engine, simply visit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/admin/docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The gem serves its own documentation as HTML directly inside your application.&lt;/p&gt;

&lt;p&gt;No need to leave your admin panel or search through external documentation while you're developing.&lt;/p&gt;

&lt;p&gt;It's enabled by default during development and can also be exposed in production behind your application's authentication.&lt;/p&gt;




&lt;h1&gt;
  
  
  Current features
&lt;/h1&gt;

&lt;p&gt;RubyUI Admin already includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Full CRUD&lt;/li&gt;
&lt;li&gt;Configurable resources&lt;/li&gt;
&lt;li&gt;Rich field catalog&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Filters&lt;/li&gt;
&lt;li&gt;Named scopes&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Metric cards&lt;/li&gt;
&lt;li&gt;Custom actions&lt;/li&gt;
&lt;li&gt;Bulk actions&lt;/li&gt;
&lt;li&gt;Authorization with Action Policy&lt;/li&gt;
&lt;li&gt;Internationalization&lt;/li&gt;
&lt;li&gt;Multiple generators&lt;/li&gt;
&lt;li&gt;Ruby-based customization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it's still growing.&lt;/p&gt;

&lt;p&gt;Future versions are expected to include advanced association management and additional index view types.&lt;/p&gt;




&lt;h1&gt;
  
  
  Project philosophy
&lt;/h1&gt;

&lt;p&gt;A few principles guided the project from day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything is Ruby
&lt;/h2&gt;

&lt;p&gt;Resources, policies, filters, dashboards, and actions are just Ruby classes.&lt;/p&gt;

&lt;p&gt;Nothing is hidden behind magic.&lt;/p&gt;

&lt;p&gt;Whenever you need to customize something, you simply extend or override it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Progressive enhancement
&lt;/h2&gt;

&lt;p&gt;The primary goal is to deliver a fully functional application before adding JavaScript.&lt;/p&gt;

&lt;p&gt;This keeps the project robust, maintainable, and closely aligned with modern Rails philosophy.&lt;/p&gt;




&lt;h2&gt;
  
  
  One Design System
&lt;/h2&gt;

&lt;p&gt;Since the admin uses your own RubyUI components, your application maintains a single source of truth for its UI.&lt;/p&gt;

&lt;p&gt;Buttons, dialogs, tables, cards, and every other component are shared across both your application and your admin interface.&lt;/p&gt;




&lt;h1&gt;
  
  
  Getting started
&lt;/h1&gt;

&lt;p&gt;Installing RubyUI Admin is straightforward.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"ruby_ui_admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then mount the engine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;mount_ruby_ui_admin&lt;/span&gt; &lt;span class="ss"&gt;at: &lt;/span&gt;&lt;span class="s2"&gt;"/admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure authentication and authorization, create your resources, and you're ready to go.&lt;/p&gt;




&lt;h1&gt;
  
  
  Just getting started
&lt;/h1&gt;

&lt;p&gt;RubyUI Admin is already usable today, but this is only the beginning.&lt;/p&gt;

&lt;p&gt;My goal is to build a modern admin solution for Rails applications using RubyUI, while staying true to the Rails, Hotwire, and Phlex ecosystem.&lt;/p&gt;

&lt;p&gt;If you're already using RubyUI, I'd love for you to give it a try.&lt;/p&gt;

&lt;p&gt;Feedback, issues, ideas, and contributions are always welcome.&lt;/p&gt;

&lt;p&gt;I hope this is only the beginning.&lt;/p&gt;

&lt;p&gt;A special thanks to &lt;a href="https://github.com/italomourati" rel="noopener noreferrer"&gt;Ítalo Moura&lt;/a&gt; for helping me test the gem.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ruby</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🇧🇷 E se existisse uma interface admin baseada na RubyUI? Assim nasceu a RubyUI Admin.</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Fri, 17 Jul 2026 23:51:35 +0000</pubDate>
      <link>https://dev.to/videosdeti/e-se-existisse-uma-interface-admin-baseada-na-rubyui-assim-nasceu-a-rubyui-admin-5fe4</link>
      <guid>https://dev.to/videosdeti/e-se-existisse-uma-interface-admin-baseada-na-rubyui-assim-nasceu-a-rubyui-admin-5fe4</guid>
      <description>&lt;p&gt;Vivemos um momento curioso no desenvolvimento de software.&lt;/p&gt;

&lt;p&gt;Com IA, gerar código, estruturar projetos e até explorar novas ideias nunca foi tão rápido. Aquela desculpa de &lt;em&gt;"isso daria muito trabalho"&lt;/em&gt; simplesmente deixou de existir. Se existe uma ferramenta que você gostaria de usar e ela ainda não existe, talvez este seja o melhor momento para criá-la.&lt;/p&gt;

&lt;p&gt;Foi exatamente assim que nasceu a &lt;strong&gt;RubyUI Admin&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_admin/" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_admin/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Durante algum tempo acompanhei projetos como o Avo e sempre gostei da experiência de construir interfaces administrativas modernas para aplicações Rails. Ao mesmo tempo, comecei a utilizar cada vez mais a &lt;strong&gt;RubyUI&lt;/strong&gt;, baseada em &lt;strong&gt;Phlex&lt;/strong&gt;, para desenvolver interfaces server-side utilizando componentes Ruby.&lt;/p&gt;

&lt;p&gt;Então surgiu a pergunta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;E se existisse uma interface administrativa totalmente construída sobre a RubyUI?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A resposta foi criar a minha própria.&lt;/p&gt;




&lt;h1&gt;
  
  
  O que é a RubyUI Admin?
&lt;/h1&gt;

&lt;p&gt;A &lt;strong&gt;RubyUI Admin&lt;/strong&gt; é uma engine para Ruby on Rails que transforma seus modelos Active Record em uma interface administrativa completa.&lt;/p&gt;

&lt;p&gt;Com poucos arquivos você já possui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRUD completo&lt;/li&gt;
&lt;li&gt;Paginação&lt;/li&gt;
&lt;li&gt;Filtros&lt;/li&gt;
&lt;li&gt;Scopes&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Ações customizadas&lt;/li&gt;
&lt;li&gt;Ações em lote&lt;/li&gt;
&lt;li&gt;Autorização&lt;/li&gt;
&lt;li&gt;Internacionalização (EN e PT-BR)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo isso renderizado no servidor utilizando &lt;strong&gt;RubyUI + Phlex&lt;/strong&gt;, com melhorias progressivas através de &lt;strong&gt;Hotwire (Turbo + Stimulus)&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  A interface faz parte da sua aplicação
&lt;/h1&gt;

&lt;p&gt;Uma das decisões de arquitetura mais importantes do projeto foi não criar mais um framework visual isolado.&lt;/p&gt;

&lt;p&gt;Em vez disso, a RubyUI Admin utiliza os próprios componentes RubyUI da aplicação hospedeira.&lt;/p&gt;

&lt;p&gt;Isso significa que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o admin acompanha o mesmo Design System da aplicação;&lt;/li&gt;
&lt;li&gt;qualquer customização feita em um componente é refletida automaticamente no admin;&lt;/li&gt;
&lt;li&gt;não existe uma cópia dos componentes para manter sincronizada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na prática, o painel administrativo deixa de parecer um produto separado e passa a fazer parte da aplicação.&lt;/p&gt;




&lt;h1&gt;
  
  
  Server-side first
&lt;/h1&gt;

&lt;p&gt;Assim como Rails sempre incentivou, a RubyUI Admin aposta em renderização no servidor.&lt;/p&gt;

&lt;p&gt;JavaScript existe apenas para melhorar a experiência.&lt;/p&gt;

&lt;p&gt;Sem JavaScript a aplicação continua funcionando normalmente.&lt;/p&gt;

&lt;p&gt;Turbo e Stimulus entram apenas para tornar algumas interações mais agradáveis, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;modais;&lt;/li&gt;
&lt;li&gt;notificações;&lt;/li&gt;
&lt;li&gt;abas;&lt;/li&gt;
&lt;li&gt;linhas clicáveis;&lt;/li&gt;
&lt;li&gt;pequenas interações da interface.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Documentação dentro da própria aplicação
&lt;/h1&gt;

&lt;p&gt;Uma funcionalidade que gosto bastante é que a própria gem serve sua documentação.&lt;/p&gt;

&lt;p&gt;Depois de montar a engine, basta acessar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/admin/docs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Toda a documentação é renderizada como HTML dentro da própria aplicação.&lt;/p&gt;

&lt;p&gt;Isso significa que você pode consultar exemplos sem precisar abrir outra aba do navegador.&lt;/p&gt;

&lt;p&gt;Durante o desenvolvimento ela já vem habilitada e, se desejar, também pode ser disponibilizada em produção protegida pela autenticação da aplicação.&lt;/p&gt;




&lt;h1&gt;
  
  
  Recursos disponíveis
&lt;/h1&gt;

&lt;p&gt;Hoje a RubyUI Admin já oferece:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CRUD completo&lt;/li&gt;
&lt;li&gt;Recursos configuráveis&lt;/li&gt;
&lt;li&gt;Catálogo completo de campos&lt;/li&gt;
&lt;li&gt;Paginação&lt;/li&gt;
&lt;li&gt;Filtros&lt;/li&gt;
&lt;li&gt;Scopes&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Cards de métricas&lt;/li&gt;
&lt;li&gt;Ações customizadas&lt;/li&gt;
&lt;li&gt;Ações em lote&lt;/li&gt;
&lt;li&gt;Policies utilizando Action Policy&lt;/li&gt;
&lt;li&gt;Internacionalização&lt;/li&gt;
&lt;li&gt;Diversos generators&lt;/li&gt;
&lt;li&gt;Customização através de classes Ruby&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;E o projeto continua evoluindo.&lt;/p&gt;

&lt;p&gt;Algumas funcionalidades planejadas para versões futuras incluem gerenciamento avançado de associações e novos formatos de visualização.&lt;/p&gt;




&lt;h1&gt;
  
  
  Filosofia do projeto
&lt;/h1&gt;

&lt;p&gt;Desde o início alguns princípios guiaram o desenvolvimento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tudo é Ruby
&lt;/h2&gt;

&lt;p&gt;Recursos, policies, filtros, dashboards e ações são apenas classes Ruby.&lt;/p&gt;

&lt;p&gt;Nada fica escondido.&lt;/p&gt;

&lt;p&gt;Quando você precisar personalizar algum comportamento, basta sobrescrever ou estender o que desejar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Progressivamente aprimorado
&lt;/h2&gt;

&lt;p&gt;O foco sempre foi entregar uma aplicação funcional antes de adicionar JavaScript.&lt;/p&gt;

&lt;p&gt;Essa abordagem deixa a aplicação mais robusta, simples de manter e muito alinhada com a filosofia atual do Rails.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sem reinventar seu Design System
&lt;/h2&gt;

&lt;p&gt;Ao utilizar RubyUI, a aplicação inteira compartilha os mesmos componentes.&lt;/p&gt;

&lt;p&gt;Você mantém apenas uma implementação de botões, tabelas, diálogos, cards e demais elementos visuais.&lt;/p&gt;




&lt;h1&gt;
  
  
  Instalação
&lt;/h1&gt;

&lt;p&gt;Adicionar a gem é bastante simples.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"ruby_ui_admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois monte a engine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;mount_ruby_ui_admin&lt;/span&gt; &lt;span class="ss"&gt;at: &lt;/span&gt;&lt;span class="s2"&gt;"/admin"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure a autenticação e autorização e você já pode começar a criar seus recursos.&lt;/p&gt;




&lt;h1&gt;
  
  
  Ainda está no começo
&lt;/h1&gt;

&lt;p&gt;Apesar de já ser perfeitamente utilizável, a RubyUI Admin ainda está em evolução.&lt;/p&gt;

&lt;p&gt;Meu objetivo é construir uma alternativa moderna para aplicações Rails que utilizam RubyUI, mantendo toda a experiência alinhada ao ecossistema Rails, Hotwire e Phlex.&lt;/p&gt;

&lt;p&gt;Se você utiliza RubyUI, acredito que vale a pena experimentar.&lt;/p&gt;

&lt;p&gt;Toda contribuição, feedback e sugestões são muito bem-vindos.&lt;/p&gt;

&lt;p&gt;Espero que esse seja apenas o começo.&lt;/p&gt;

&lt;p&gt;Um agradecimento especial a &lt;a href="https://github.com/italomourati" rel="noopener noreferrer"&gt;Ítalo Moura&lt;/a&gt; que me ajudou com os testes da gem.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>ruby</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🇧🇷 Continuando a jornada com RubyUI: apresentando o ruby_ui_converter</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Sun, 14 Jun 2026 19:09:05 +0000</pubDate>
      <link>https://dev.to/videosdeti/continuando-a-jornada-com-rubyui-apresentando-o-rubyuiconverter-4mj4</link>
      <guid>https://dev.to/videosdeti/continuando-a-jornada-com-rubyui-apresentando-o-rubyuiconverter-4mj4</guid>
      <description>&lt;p&gt;Recentemente publiquei uma gem chamada &lt;strong&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;ruby_ui_scaffold&lt;/a&gt;&lt;/strong&gt;, um gerador de scaffolds para Rails pensado para quem quer construir aplicações modernas utilizando &lt;strong&gt;Phlex&lt;/strong&gt; e &lt;strong&gt;RubyUI&lt;/strong&gt; desde o início do projeto.&lt;/p&gt;

&lt;p&gt;A proposta dela era bastante simples:&lt;/p&gt;

&lt;p&gt;Em vez de usar o scaffold tradicional do Rails gerando views em &lt;code&gt;.erb&lt;/code&gt;, a ideia era criar aplicações já preparadas para uma arquitetura baseada em componentes Ruby, utilizando Phlex e os componentes do RubyUI.&lt;/p&gt;

&lt;p&gt;Mas logo percebi uma questão importante.&lt;/p&gt;

&lt;p&gt;E quem já possui uma aplicação Rails existente?&lt;/p&gt;

&lt;h2&gt;
  
  
  O problema das aplicações legadas
&lt;/h2&gt;

&lt;p&gt;O &lt;code&gt;ruby_ui_scaffold&lt;/code&gt; resolve muito bem o cenário de &lt;strong&gt;novos projetos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com ele, você consegue gerar CRUDs completos com controllers, formulários, tabelas, componentes visuais e toda a estrutura baseada em Phlex desde o primeiro dia.&lt;/p&gt;

&lt;p&gt;Mas a realidade é que grande parte da comunidade Rails trabalha em aplicações já existentes.&lt;/p&gt;

&lt;p&gt;Aplicações que possuem anos de evolução e centenas de arquivos como estes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/products/index.html.erb
app/views/users/show.html.erb
app/views/orders/_form.html.erb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E nesse cenário surge uma pergunta natural:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como migrar uma aplicação já existente para Phlex + RubyUI sem precisar reescrever manualmente toda a camada de views?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Foi exatamente essa pergunta que me levou a criar a próxima gem dessa jornada.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apresentando o ruby_ui_converter
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se o &lt;code&gt;ruby_ui_scaffold&lt;/code&gt; foi criado para ajudar no desenvolvimento de &lt;strong&gt;novas aplicações Rails&lt;/strong&gt;, o &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; nasce como sua continuação natural.&lt;/p&gt;

&lt;p&gt;A proposta é simples:&lt;/p&gt;

&lt;p&gt;Permitir que aplicações Rails já existentes possam migrar gradualmente seus templates &lt;code&gt;.erb&lt;/code&gt; para componentes baseados em Phlex e RubyUI.&lt;/p&gt;

&lt;p&gt;Em outras palavras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_scaffold&lt;/code&gt; → cria aplicações novas já utilizando a stack moderna&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_converter&lt;/code&gt; → ajuda aplicações existentes a fazer essa transição&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Transformando ERB em componentes Ruby automaticamente
&lt;/h2&gt;

&lt;p&gt;A gem percorre uma pasta de views Rails e converte automaticamente arquivos &lt;code&gt;.erb&lt;/code&gt; em componentes Ruby.&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;ruby_ui_converter convert app/views/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Resultado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/users/index.html.erb → app/views/users/index.rb
app/views/users/_user.html.erb → app/views/users/user.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A ideia é eliminar o trabalho repetitivo que normalmente existiria nesse processo de migração.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conversão inteligente para Phlex e RubyUI
&lt;/h2&gt;

&lt;p&gt;O objetivo não era simplesmente transformar HTML em Ruby.&lt;/p&gt;

&lt;p&gt;A gem entende padrões comuns do Rails e gera código compatível com Phlex e com componentes RubyUI.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;p&gt;Um template tradicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dashboard_path&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;vira automaticamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;href: &lt;/span&gt;&lt;span class="n"&gt;dashboard_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Partials como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s2"&gt;"form"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;são convertidos para componentes Ruby:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="no"&gt;Views&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Products&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E até estruturas mais complexas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;form_with&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collection_select&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;checkboxes&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;condicionais (&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;unless&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;loops (&lt;code&gt;each&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;helpers Rails (&lt;code&gt;dom_id&lt;/code&gt;, &lt;code&gt;button_to&lt;/code&gt;, &lt;code&gt;content_for&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;são analisadas e convertidas automaticamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  Migração gradual, sem reescrever tudo
&lt;/h2&gt;

&lt;p&gt;Esse era um requisito importante para mim durante o desenvolvimento.&lt;/p&gt;

&lt;p&gt;A gem &lt;strong&gt;não modifica os arquivos ERB originais&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ela gera os novos arquivos Ruby lado a lado.&lt;/p&gt;

&lt;p&gt;Isso permite um processo de migração incremental:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;converter apenas uma pasta por vez&lt;/li&gt;
&lt;li&gt;revisar o código gerado&lt;/li&gt;
&lt;li&gt;testar cada tela individualmente&lt;/li&gt;
&lt;li&gt;manter partes da aplicação ainda usando ERB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sem precisar fazer uma migração radical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Construindo um ecossistema em torno de RubyUI
&lt;/h2&gt;

&lt;p&gt;Minha ideia com essas gems nunca foi lançar ferramentas isoladas.&lt;/p&gt;

&lt;p&gt;O objetivo é construir ferramentas que ajudem a tornar o uso de Phlex e RubyUI cada vez mais acessível dentro do ecossistema Rails.&lt;/p&gt;

&lt;p&gt;Hoje essa jornada começa com duas peças complementares:&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_scaffold
&lt;/h3&gt;

&lt;p&gt;Para novos projetos.&lt;/p&gt;

&lt;p&gt;Cria CRUDs completos utilizando Phlex + RubyUI desde o início.&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_converter
&lt;/h3&gt;

&lt;p&gt;Para aplicações existentes.&lt;/p&gt;

&lt;p&gt;Ajuda a migrar views tradicionais em ERB para componentes Ruby.&lt;/p&gt;

&lt;h2&gt;
  
  
  O objetivo final
&lt;/h2&gt;

&lt;p&gt;Tenho explorado bastante a ideia de trazer uma experiência mais moderna de desenvolvimento frontend para aplicações Rails, mas sem abandonar aquilo que sempre gostei no ecossistema Ruby:&lt;/p&gt;

&lt;p&gt;Escrever código simples.&lt;/p&gt;

&lt;p&gt;Manter produtividade alta.&lt;/p&gt;

&lt;p&gt;Continuar trabalhando majoritariamente em Ruby.&lt;/p&gt;

&lt;p&gt;Essas gems fazem parte exatamente dessa visão.&lt;/p&gt;

&lt;p&gt;Acredito que nos próximos anos veremos cada vez mais aplicações Rails adotando abordagens baseadas em componentes, e quero contribuir para tornar essa transição mais simples.&lt;/p&gt;

&lt;p&gt;Se você trabalha com Rails e tem curiosidade em explorar o mundo do Phlex e RubyUI, talvez essas ferramentas possam ajudar nessa jornada.&lt;/p&gt;

&lt;p&gt;E isso é só o começo :)&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🇺🇸 Continuing the RubyUI Journey: Introducing ruby_ui_converter</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Sun, 14 Jun 2026 19:07:39 +0000</pubDate>
      <link>https://dev.to/videosdeti/continuing-the-rubyui-journey-introducing-rubyuiconverter-1kpg</link>
      <guid>https://dev.to/videosdeti/continuing-the-rubyui-journey-introducing-rubyuiconverter-1kpg</guid>
      <description>&lt;p&gt;Recently, I released a gem called &lt;strong&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;ruby_ui_scaffold&lt;/a&gt;&lt;/strong&gt;, a Rails scaffold generator designed for developers who want to build modern applications using &lt;strong&gt;Phlex&lt;/strong&gt; and &lt;strong&gt;RubyUI&lt;/strong&gt; from day one.&lt;/p&gt;

&lt;p&gt;The idea behind it was simple:&lt;/p&gt;

&lt;p&gt;Instead of relying on the traditional Rails scaffold that generates &lt;code&gt;.erb&lt;/code&gt; templates, the goal was to create applications already structured around a Ruby component-based architecture powered by Phlex and RubyUI.&lt;/p&gt;

&lt;p&gt;But shortly after releasing it, I realized an important question remained unanswered.&lt;/p&gt;

&lt;p&gt;What about existing Rails applications?&lt;/p&gt;

&lt;h2&gt;
  
  
  The challenge of legacy applications
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ruby_ui_scaffold&lt;/code&gt; works extremely well for &lt;strong&gt;new projects&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It allows developers to generate complete CRUD interfaces with controllers, forms, tables, and UI components entirely built with Phlex and RubyUI.&lt;/p&gt;

&lt;p&gt;But the reality is that a huge part of the Rails community works on existing applications.&lt;/p&gt;

&lt;p&gt;Applications that have evolved for years and contain hundreds of files like these:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/products/index.html.erb
app/views/users/show.html.erb
app/views/orders/_form.html.erb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And naturally, this leads to an important question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do you migrate an existing Rails application to Phlex + RubyUI without manually rewriting the entire view layer?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question led me to build the next step in this journey.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing ruby_ui_converter
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_converter" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_converter&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If &lt;code&gt;ruby_ui_scaffold&lt;/code&gt; was created to help developers build &lt;strong&gt;new Rails applications&lt;/strong&gt; using a modern stack, &lt;strong&gt;ruby_ui_converter&lt;/strong&gt; is its natural continuation.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Allow existing Rails applications to gradually migrate their &lt;code&gt;.erb&lt;/code&gt; templates into Phlex and RubyUI components.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_scaffold&lt;/code&gt; → helps build new applications with the modern stack from the beginning&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ruby_ui_converter&lt;/code&gt; → helps existing applications transition to that stack&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Automatically converting ERB into Ruby components
&lt;/h2&gt;

&lt;p&gt;The gem recursively scans Rails view folders and automatically converts &lt;code&gt;.erb&lt;/code&gt; templates into Ruby component files.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bundle &lt;span class="nb"&gt;exec &lt;/span&gt;ruby_ui_converter convert app/views/users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;app/views/users/index.html.erb → app/views/users/index.rb
app/views/users/_user.html.erb → app/views/users/user.rb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The entire idea is to eliminate the repetitive work that usually comes with large migrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intelligent conversion for Phlex and RubyUI
&lt;/h2&gt;

&lt;p&gt;The goal was never to simply transform HTML into Ruby syntax.&lt;/p&gt;

&lt;p&gt;The gem understands common Rails patterns and generates code compatible with both Phlex and RubyUI.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A traditional Rails template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;link_to&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dashboard_path&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;gets automatically converted into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Link&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;href: &lt;/span&gt;&lt;span class="n"&gt;dashboard_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"Dashboard"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Partials like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="s2"&gt;"form"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;become Ruby components:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;render&lt;/span&gt; &lt;span class="no"&gt;Views&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Products&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Form&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;product: &lt;/span&gt;&lt;span class="vi"&gt;@product&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It also understands more complex structures like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;form_with&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;collection_select&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;checkboxes&lt;/li&gt;
&lt;li&gt;conditionals (&lt;code&gt;if&lt;/code&gt;, &lt;code&gt;unless&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;loops (&lt;code&gt;each&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Rails helpers (&lt;code&gt;dom_id&lt;/code&gt;, &lt;code&gt;button_to&lt;/code&gt;, &lt;code&gt;content_for&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and converts them automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gradual migration without rewriting everything
&lt;/h2&gt;

&lt;p&gt;This was one of the most important requirements during development.&lt;/p&gt;

&lt;p&gt;The gem &lt;strong&gt;does not modify the original ERB files&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead, it generates Ruby files alongside them.&lt;/p&gt;

&lt;p&gt;This makes incremental migration possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;convert one folder at a time&lt;/li&gt;
&lt;li&gt;review generated code&lt;/li&gt;
&lt;li&gt;test each screen individually&lt;/li&gt;
&lt;li&gt;keep parts of the application running on ERB&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no need for a risky “big bang” migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building an ecosystem around RubyUI
&lt;/h2&gt;

&lt;p&gt;My goal with these gems has never been to release isolated tools.&lt;/p&gt;

&lt;p&gt;The bigger idea is to create tools that make adopting Phlex and RubyUI easier inside the Rails ecosystem.&lt;/p&gt;

&lt;p&gt;Right now, that journey starts with two complementary pieces.&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_scaffold
&lt;/h3&gt;

&lt;p&gt;Built for new projects.&lt;/p&gt;

&lt;p&gt;Generate complete CRUD applications using Phlex + RubyUI from the very beginning.&lt;/p&gt;

&lt;h3&gt;
  
  
  ruby_ui_converter
&lt;/h3&gt;

&lt;p&gt;Built for existing applications.&lt;/p&gt;

&lt;p&gt;Help legacy Rails apps migrate traditional ERB views into Ruby components.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bigger vision
&lt;/h2&gt;

&lt;p&gt;I’ve been spending a lot of time exploring ways to bring a more modern frontend development experience into Rails applications without losing what I have always loved about the Ruby ecosystem.&lt;/p&gt;

&lt;p&gt;Writing simple code.&lt;/p&gt;

&lt;p&gt;Maintaining high productivity.&lt;/p&gt;

&lt;p&gt;Continuing to work primarily in Ruby.&lt;/p&gt;

&lt;p&gt;These gems are part of that vision.&lt;/p&gt;

&lt;p&gt;I believe that over the next few years, we’ll see more Rails applications adopting component-based architectures, and I want to help make that transition easier.&lt;/p&gt;

&lt;p&gt;If you work with Rails and are curious about exploring the world of Phlex and RubyUI, I hope these tools can help you on that journey.&lt;/p&gt;

&lt;p&gt;And this is only the beginning :)&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>showdev</category>
      <category>ui</category>
    </item>
    <item>
      <title>🇺🇸 Learning RubyUI Through Real Applications with `ruby_ui_scaffold`</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 10 Jun 2026 13:01:57 +0000</pubDate>
      <link>https://dev.to/videosdeti/learning-rubyui-through-real-applications-with-rubyuiscaffold-4mdh</link>
      <guid>https://dev.to/videosdeti/learning-rubyui-through-real-applications-with-rubyuiscaffold-4mdh</guid>
      <description>&lt;p&gt;Building CRUD applications in Ruby on Rails has never been difficult. The challenge begins when we want to create modern, reusable, component-based interfaces without ending up with a mix of ERB templates, helpers, partials, and presentation logic spread across the application.&lt;/p&gt;

&lt;p&gt;Over the past few years, tools like Phlex and RubyUI have introduced a compelling alternative for Rails developers who want a cleaner and more maintainable view layer. However, one challenge remains: getting started.&lt;/p&gt;

&lt;p&gt;How should you structure your views? Which components should you use? How do you build complete CRUD flows with RubyUI?&lt;/p&gt;

&lt;p&gt;To make that journey easier, I built &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fin2sm0km43uw9df9i3pg.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fin2sm0km43uw9df9i3pg.gif" alt="RubyUI Scaffold" width="600" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is ruby_ui_scaffold?
&lt;/h2&gt;

&lt;p&gt;ruby_ui_scaffold is a Rails scaffold generator that creates complete CRUD applications using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby on Rails&lt;/li&gt;
&lt;li&gt;Phlex&lt;/li&gt;
&lt;li&gt;RubyUI&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of generating traditional ERB templates, it produces fully functional Phlex views built with RubyUI components from day one.&lt;/p&gt;

&lt;p&gt;Think of it as a modern alternative to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g scaffold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but designed specifically for component-based Rails applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  More than a Scaffold Generator
&lt;/h2&gt;

&lt;p&gt;While the primary goal is to speed up CRUD development, ruby_ui_scaffold also serves as a practical learning tool.&lt;/p&gt;

&lt;p&gt;Every generated resource includes real-world examples of RubyUI components such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;li&gt;Form&lt;/li&gt;
&lt;li&gt;Input&lt;/li&gt;
&lt;li&gt;Textarea&lt;/li&gt;
&lt;li&gt;Checkbox&lt;/li&gt;
&lt;li&gt;Badge&lt;/li&gt;
&lt;li&gt;Select&lt;/li&gt;
&lt;li&gt;Combobox&lt;/li&gt;
&lt;li&gt;DropdownMenu&lt;/li&gt;
&lt;li&gt;AlertDialog&lt;/li&gt;
&lt;li&gt;DatePicker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of reading documentation and trying to figure out how components fit together, you can study complete working implementations inside your own application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning RubyUI Through Real Code
&lt;/h2&gt;

&lt;p&gt;One of the biggest challenges when learning any component library is moving beyond isolated examples.&lt;/p&gt;

&lt;p&gt;For example, generating:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Buddy &lt;span class="se"&gt;\&lt;/span&gt;
  name:string &lt;span class="se"&gt;\&lt;/span&gt;
  email:string &lt;span class="se"&gt;\&lt;/span&gt;
  admin:boolean &lt;span class="se"&gt;\&lt;/span&gt;
  birthday:date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;automatically creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Index pages&lt;/li&gt;
&lt;li&gt;Show pages&lt;/li&gt;
&lt;li&gt;Create and update flows&lt;/li&gt;
&lt;li&gt;Delete confirmations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All powered by RubyUI components.&lt;/p&gt;

&lt;p&gt;This provides practical examples that developers can inspect, modify, and learn from immediately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exploring Relationships
&lt;/h2&gt;

&lt;p&gt;The generator also supports &lt;code&gt;belongs_to&lt;/code&gt; relationships out of the box.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Book &lt;span class="se"&gt;\&lt;/span&gt;
  title:string &lt;span class="se"&gt;\&lt;/span&gt;
  author:references
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;automatically generates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select inputs for small datasets&lt;/li&gt;
&lt;li&gt;Searchable Comboboxes for larger datasets&lt;/li&gt;
&lt;li&gt;Human-friendly relationship rendering&lt;/li&gt;
&lt;li&gt;Eager loading to prevent N+1 queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These generated examples demonstrate how advanced RubyUI components can be used in real applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Discovering the DataTable Component
&lt;/h2&gt;

&lt;p&gt;Developers looking to explore more advanced UI patterns can enable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--datatable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This generates fully featured tables with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search&lt;/li&gt;
&lt;li&gt;Sorting&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Per-page controls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All built around RubyUI's DataTable component.&lt;/p&gt;

&lt;p&gt;For many developers, this becomes one of the easiest ways to understand how to integrate advanced RubyUI features into production applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate Data and Experiment
&lt;/h2&gt;

&lt;p&gt;The included seed command makes experimentation easy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails ruby_ui_scaffold:seed Buddy &lt;span class="nt"&gt;--count&lt;/span&gt; 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using Faker, the generator populates your database with realistic sample data.&lt;/p&gt;

&lt;p&gt;This allows you to test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Forms&lt;/li&gt;
&lt;li&gt;Search experiences&lt;/li&gt;
&lt;li&gt;Pagination&lt;/li&gt;
&lt;li&gt;Selection components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;under realistic conditions.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Playground for Phlex and RubyUI
&lt;/h2&gt;

&lt;p&gt;Although ruby_ui_scaffold is highly productive, I believe its greatest value lies in education.&lt;/p&gt;

&lt;p&gt;Every generated scaffold becomes a living collection of RubyUI examples that developers can inspect and learn from.&lt;/p&gt;

&lt;p&gt;Rather than starting from a blank page, developers start from a complete application and gradually understand how RubyUI and Phlex work together.&lt;/p&gt;

&lt;p&gt;For teams evaluating RubyUI, this can dramatically shorten the learning curve.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;ruby_ui_scaffold was not created to replace learning RubyUI.&lt;/p&gt;

&lt;p&gt;It was created to make that learning process easier.&lt;/p&gt;

&lt;p&gt;By generating real code for real scenarios using real components, the gem helps bridge the gap between documentation and practical application.&lt;/p&gt;

&lt;p&gt;If your goal is to accelerate CRUD development, ruby_ui_scaffold can help.&lt;/p&gt;

&lt;p&gt;If your goal is to learn RubyUI and Phlex through hands-on examples, it may be one of the fastest ways to get started.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🇧🇷 Aprendendo RubyUI na Prática com `ruby_ui_scaffold`</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Wed, 10 Jun 2026 13:00:43 +0000</pubDate>
      <link>https://dev.to/videosdeti/aprendendo-rubyui-na-pratica-com-rubyuiscaffold-9h9</link>
      <guid>https://dev.to/videosdeti/aprendendo-rubyui-na-pratica-com-rubyuiscaffold-9h9</guid>
      <description>&lt;p&gt;Quem trabalha com Ruby on Rails sabe que gerar um CRUD é fácil. O desafio começa quando queremos construir interfaces modernas, consistentes e reutilizáveis sem cair em uma mistura de ERB, helpers, partials e componentes espalhados pela aplicação.&lt;/p&gt;

&lt;p&gt;Nos últimos anos, o ecossistema Rails ganhou ferramentas extremamente interessantes como Phlex e RubyUI, que trazem uma experiência mais orientada a componentes para a camada de apresentação. Porém, para quem está começando, existe uma barreira inicial: como estruturar tudo isso? Quais componentes utilizar? Como conectar formulários, tabelas e ações CRUD usando RubyUI?&lt;/p&gt;

&lt;p&gt;Foi exatamente para reduzir essa curva de aprendizado que desenvolvi a gem &lt;strong&gt;ruby_ui_scaffold&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/ruby_ui_scaffold" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/ruby_ui_scaffold&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftojbj5gj37an4uimet5j.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftojbj5gj37an4uimet5j.gif" alt="RubyUI Scaffold" width="600" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é o ruby_ui_scaffold?
&lt;/h2&gt;

&lt;p&gt;O ruby_ui_scaffold é um gerador de scaffold para Rails que cria aplicações CRUD completas utilizando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ruby on Rails&lt;/li&gt;
&lt;li&gt;Phlex&lt;/li&gt;
&lt;li&gt;RubyUI&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de gerar views ERB tradicionais, ele produz views escritas em Phlex utilizando componentes RubyUI desde o primeiro momento.&lt;/p&gt;

&lt;p&gt;Na prática, ele funciona como uma alternativa moderna ao tradicional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;rails g scaffold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;mas gerando uma interface visual pronta para uso e alinhada com as boas práticas do ecossistema RubyUI.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mais do que um gerador
&lt;/h2&gt;

&lt;p&gt;Embora o objetivo inicial seja acelerar a criação de CRUDs, o ruby_ui_scaffold acaba se tornando uma excelente ferramenta educacional.&lt;/p&gt;

&lt;p&gt;Ao gerar um recurso, você recebe exemplos reais de utilização de componentes como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Table&lt;/li&gt;
&lt;li&gt;DataTable&lt;/li&gt;
&lt;li&gt;Form&lt;/li&gt;
&lt;li&gt;Input&lt;/li&gt;
&lt;li&gt;Textarea&lt;/li&gt;
&lt;li&gt;Checkbox&lt;/li&gt;
&lt;li&gt;Badge&lt;/li&gt;
&lt;li&gt;Select&lt;/li&gt;
&lt;li&gt;Combobox&lt;/li&gt;
&lt;li&gt;DropdownMenu&lt;/li&gt;
&lt;li&gt;AlertDialog&lt;/li&gt;
&lt;li&gt;DatePicker&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Em vez de consultar a documentação e tentar imaginar como cada componente deve ser utilizado, você passa a ter exemplos completos funcionando dentro da sua própria aplicação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprendendo RubyUI através de código real
&lt;/h2&gt;

&lt;p&gt;Uma das maiores dificuldades ao aprender qualquer biblioteca de componentes é sair dos exemplos isolados e entender como ela funciona em um sistema real.&lt;/p&gt;

&lt;p&gt;Por exemplo, ao gerar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Buddy &lt;span class="se"&gt;\&lt;/span&gt;
  name:string &lt;span class="se"&gt;\&lt;/span&gt;
  email:string &lt;span class="se"&gt;\&lt;/span&gt;
  admin:boolean &lt;span class="se"&gt;\&lt;/span&gt;
  birthday:date
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o scaffold cria automaticamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formulários completos&lt;/li&gt;
&lt;li&gt;Listagens&lt;/li&gt;
&lt;li&gt;Páginas de detalhes&lt;/li&gt;
&lt;li&gt;Fluxo de criação e edição&lt;/li&gt;
&lt;li&gt;Exclusão com confirmação visual&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo utilizando componentes RubyUI.&lt;/p&gt;

&lt;p&gt;Isso permite estudar padrões reais de implementação, em vez de exemplos artificiais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explorando relacionamentos
&lt;/h2&gt;

&lt;p&gt;Outro aspecto interessante é o suporte automático a associações &lt;code&gt;belongs_to&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Ao gerar um relacionamento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails g ruby_ui_scaffold Book &lt;span class="se"&gt;\&lt;/span&gt;
  title:string &lt;span class="se"&gt;\&lt;/span&gt;
  author:references
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o scaffold cria automaticamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selects para pequenas listas&lt;/li&gt;
&lt;li&gt;Comboboxes pesquisáveis para grandes volumes&lt;/li&gt;
&lt;li&gt;Exibição amigável do relacionamento&lt;/li&gt;
&lt;li&gt;Eager loading para evitar N+1 queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além de acelerar o desenvolvimento, isso mostra na prática como utilizar componentes avançados do RubyUI em cenários reais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conhecendo o DataTable
&lt;/h2&gt;

&lt;p&gt;Quem deseja explorar componentes mais sofisticados pode utilizar a opção:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;--datatable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com ela, o scaffold gera páginas com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Busca&lt;/li&gt;
&lt;li&gt;Ordenação&lt;/li&gt;
&lt;li&gt;Paginação&lt;/li&gt;
&lt;li&gt;Controle de quantidade de registros por página&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo baseado no componente DataTable do RubyUI.&lt;/p&gt;

&lt;p&gt;Essa funcionalidade é particularmente útil para quem deseja aprender como implementar tabelas avançadas utilizando RubyUI sem precisar construir tudo do zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gerando dados para experimentar
&lt;/h2&gt;

&lt;p&gt;Outro recurso interessante é o comando de seed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bin/rails ruby_ui_scaffold:seed Buddy &lt;span class="nt"&gt;--count&lt;/span&gt; 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ele gera dados fictícios utilizando Faker, permitindo que você teste rapidamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tabelas&lt;/li&gt;
&lt;li&gt;Formulários&lt;/li&gt;
&lt;li&gt;Paginação&lt;/li&gt;
&lt;li&gt;Componentes de busca&lt;/li&gt;
&lt;li&gt;Componentes de seleção&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Quanto mais dados você gera, mais fácil fica entender o comportamento dos componentes RubyUI em situações reais.&lt;/p&gt;

&lt;h2&gt;
  
  
  Um laboratório para aprender Phlex e RubyUI
&lt;/h2&gt;

&lt;p&gt;Embora a gem seja extremamente útil para acelerar o desenvolvimento, acredito que seu maior valor esteja na capacidade de servir como um laboratório de aprendizado.&lt;/p&gt;

&lt;p&gt;Cada scaffold gerado se transforma em uma coleção de exemplos reais que podem ser estudados, adaptados e reutilizados.&lt;/p&gt;

&lt;p&gt;Se você está começando com RubyUI ou deseja entender como estruturar aplicações Rails utilizando Phlex, o ruby_ui_scaffold pode funcionar como um excelente ponto de partida.&lt;/p&gt;

&lt;p&gt;Em vez de começar com uma página em branco, você começa com uma aplicação funcional e pode evoluir a partir dela, aprendendo os componentes e padrões aos poucos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;O ruby_ui_scaffold não pretende substituir o aprendizado do RubyUI. Pelo contrário: ele foi criado para facilitar esse processo.&lt;/p&gt;

&lt;p&gt;Ao gerar código real, utilizando componentes reais e cenários reais, a gem reduz a distância entre a documentação e a aplicação prática.&lt;/p&gt;

&lt;p&gt;Se você quer acelerar seus CRUDs, ótimo.&lt;/p&gt;

&lt;p&gt;Mas se também quer aprender RubyUI e Phlex de forma prática, provavelmente esse é um dos caminhos mais rápidos para começar.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🇺🇸 3 Essential Gems to Eliminate Friction in Your Rails Workflow</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Thu, 04 Jun 2026 21:48:37 +0000</pubDate>
      <link>https://dev.to/videosdeti/3-essential-gems-to-eliminate-friction-in-your-rails-workflow-3fap</link>
      <guid>https://dev.to/videosdeti/3-essential-gems-to-eliminate-friction-in-your-rails-workflow-3fap</guid>
      <description>&lt;p&gt;Anyone who works with Ruby on Rails knows that, despite the framework being incredible for productivity, there are some classic workflow deficiencies that haunt almost every project. &lt;/p&gt;

&lt;p&gt;You are focused on writing code, but suddenly you need to open an external tool like Postman to test a route. Then, you run a complex script to generate a static database diagram. And at the end of the day, you still need to manually update the API documentation, which will inevitably become outdated in the next sprint.&lt;/p&gt;

&lt;p&gt;This constant context switching and manual maintenance generates enormous friction. To cover these deficiencies, I developed three gems that bring these tools &lt;strong&gt;inside&lt;/strong&gt; your application. They are so practical that they quickly become indispensable in any Rails project. Meet each one of them:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;rails-api-docs&lt;/code&gt;: The End of Outdated Documentation]
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The deficiency:&lt;/strong&gt; API documentation always starts with good intentions, but as the system evolves—new routes, parameters, and response fields—it quickly stops representing reality. Keeping this updated manually is repetitive and frustrating work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;code&gt;rails-api-docs&lt;/code&gt; gem solves this by leveraging what Rails already knows. It inspects your routes, controllers (via AST analysis using Prism), and the ActiveRecord schema to automatically generate the first draft of your documentation. Everything is saved in a single YAML file (&lt;code&gt;config/rails-api-docs.yml&lt;/code&gt;), which serves as the single source of truth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it is indispensable:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Append-only strategy:&lt;/strong&gt; When adding new routes and running the generator, the gem only appends what's new. Your descriptions, custom examples, and tags are never modified or deleted, making the documentation a living document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero development friction:&lt;/strong&gt; You edit the YAML in one window and view the updated documentation in the browser at &lt;code&gt;localhost:3000/rails/api-docs&lt;/code&gt; instantly, with no build step required. For production, it exports a single static HTML file without any external dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;rails-http-lab&lt;/code&gt;: Your HTTP Client Right in the App
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-http-lab" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-http-lab&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The deficiency:&lt;/strong&gt; Testing HTTP endpoints usually requires switching to external tools (like Postman or Insomnia) or creating temporary scripts. Besides the loss of focus, these tools live outside your repository and frequently suffer from CORS issues when trying to access internal services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;code&gt;rails-http-lab&lt;/code&gt; is a Rails Engine that couples an HTTP request lab inside your own application. By accessing &lt;code&gt;/rails/http-lab&lt;/code&gt;, you have a lightweight interface to test methods, headers, and payloads while visualizing the responses directly in the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it is indispensable:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stays in the Repository:&lt;/strong&gt; Your requests are saved in &lt;code&gt;.bru&lt;/code&gt; format (interchangeable with the Bruno desktop app) inside the project's &lt;code&gt;docs/http-lab/&lt;/code&gt; folder. This means your API tests are version-controlled in Git and can be easily reviewed in Pull Requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No CORS limits:&lt;/strong&gt; Since the requests are executed by the Rails server itself, you don't have CORS problems and can reach internal services transparently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;rails-realtime-erd&lt;/code&gt;: Database Diagrams Always in Sync
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-realtime-erd" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-realtime-erd&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;The deficiency:&lt;/strong&gt; Understanding database relationships in a growing project is difficult. Traditional tools generate static diagrams (ERD) that require manual tasks and quickly become outdated as soon as a new migration is executed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; The &lt;code&gt;rails-realtime-erd&lt;/code&gt; gem mounts a route at &lt;code&gt;/rails/erd&lt;/code&gt; that renders your schema diagram in real-time using Mermaid, all processed by Hotwire (Stimulus), without relying on complex JavaScript frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it is indispensable:&lt;/strong&gt; &lt;br&gt;
You will never again need to run a rake step to generate a static image file. The introspection is done on the fly: if you run a migration, just refresh the page to see the new tables and relationships reflected in the diagram immediately. It is excellent for onboarding new developers and keeping a live documentation of your architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;These three tools share the same philosophy: &lt;strong&gt;your code already has the necessary knowledge, and the support tools should live as close to it as possible&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Adopting &lt;code&gt;rails-api-docs&lt;/code&gt;, &lt;code&gt;rails-http-lab&lt;/code&gt;, and &lt;code&gt;rails-realtime-erd&lt;/code&gt; drastically reduces daily friction, eliminating external dependencies and manual rework. With simple installation steps, your development environment will become much more productive, robust, and integrated.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>rails</category>
      <category>ruby</category>
      <category>tooling</category>
    </item>
    <item>
      <title>🇧🇷 3 Gems Indispensáveis para Eliminar as Deficiências do seu Fluxo de Trabalho no Rails</title>
      <dc:creator>Jackson Pires</dc:creator>
      <pubDate>Thu, 04 Jun 2026 21:47:50 +0000</pubDate>
      <link>https://dev.to/videosdeti/3-gems-indispensaveis-para-eliminar-as-deficiencias-do-seu-fluxo-de-trabalho-no-rails-32mg</link>
      <guid>https://dev.to/videosdeti/3-gems-indispensaveis-para-eliminar-as-deficiencias-do-seu-fluxo-de-trabalho-no-rails-32mg</guid>
      <description>&lt;p&gt;Quem trabalha com Ruby on Rails sabe que, embora o framework seja incrível para a produtividade, existem algumas deficiências clássicas no fluxo de desenvolvimento que assombram quase todo projeto. &lt;/p&gt;

&lt;p&gt;Você está focado escrevendo código, mas de repente precisa abrir uma ferramenta externa como o Postman para testar uma rota. Depois, roda um script complexo para gerar um diagrama estático do banco de dados. E, no fim do dia, ainda precisa atualizar manualmente a documentação da API, que fatalmente ficará defasada na próxima sprint. &lt;/p&gt;

&lt;p&gt;Essa constante alternância de contexto e manutenção manual geram um enorme atrito. Para cobrir essas deficiências, eu desenvolvi três gems que trazem essas ferramentas para &lt;strong&gt;dentro&lt;/strong&gt; da sua aplicação. Elas são tão práticas que rapidamente se tornam indispensáveis em qualquer projeto Rails. Conheça cada uma delas:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;code&gt;rails-api-docs&lt;/code&gt;: O Fim da Documentação Desatualizada
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-api-docs" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-api-docs&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A deficiência:&lt;/strong&gt; A documentação de API sempre começa com boas intenções, mas conforme o sistema evolui — novas rotas, parâmetros e campos na resposta —, ela rapidamente deixa de representar a realidade. Manter isso atualizado manualmente é um trabalho repetitivo e frustrante.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A solução:&lt;/strong&gt; A gem &lt;code&gt;rails-api-docs&lt;/code&gt; resolve isso aproveitando o que o Rails já sabe. Ela inspeciona suas rotas, controllers (via análise AST usando Prism) e o schema do ActiveRecord para gerar automaticamente o primeiro rascunho da sua documentação. Tudo é salvo em um único arquivo YAML (&lt;code&gt;config/rails-api-docs.yml&lt;/code&gt;), que serve como fonte da verdade.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que é indispensável:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Estratégia &lt;em&gt;Append-only&lt;/em&gt;:&lt;/strong&gt; Ao adicionar novas rotas e rodar o gerador, a gem apenas adiciona o que é novo. Suas descrições, exemplos customizados e tags não são apagados, tornando a documentação um documento vivo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero atrito no desenvolvimento:&lt;/strong&gt; Você edita o YAML de um lado e visualiza a documentação atualizada no navegador em &lt;code&gt;localhost:3000/rails/api-docs&lt;/code&gt; instantaneamente, sem etapa de build. Para produção, ela exporta um único arquivo HTML estático, sem dependências externas.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;code&gt;rails-http-lab&lt;/code&gt;: Seu Client HTTP Direto na Aplicação
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-http-lab" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-http-lab&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A deficiência:&lt;/strong&gt; Testar endpoints HTTP geralmente exige alternar para ferramentas externas (como Postman ou Insomnia) ou criar scripts temporários. Além da perda de foco, essas ferramentas vivem fora do seu repositório e frequentemente sofrem com problemas de CORS ao tentar acessar serviços internos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A solução:&lt;/strong&gt; O &lt;code&gt;rails-http-lab&lt;/code&gt; é uma Rails Engine que acopla um laboratório de requisições HTTP dentro da sua própria aplicação. Ao acessar &lt;code&gt;/rails/http-lab&lt;/code&gt;, você tem uma interface leve para testar métodos, headers e payloads visualizando as respostas diretamente no navegador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que é indispensável:&lt;/strong&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fica no Repositório:&lt;/strong&gt; As suas requisições são salvas no formato &lt;code&gt;.bru&lt;/code&gt; (compatível com o aplicativo desktop Bruno) dentro da pasta &lt;code&gt;docs/http-lab/&lt;/code&gt; do projeto. Isso significa que os testes da sua API são versionados no Git e podem ser revisados nos Pull Requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sem limites de CORS:&lt;/strong&gt; Como as requisições são executadas pelo próprio servidor Rails, você não tem problemas de CORS e pode alcançar serviços internos de forma transparente.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. &lt;code&gt;rails-realtime-erd&lt;/code&gt;: Diagramas de Banco de Dados Sempre Sincronizados
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://github.com/jacksonpires/rails-realtime-erd" rel="noopener noreferrer"&gt;https://github.com/jacksonpires/rails-realtime-erd&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A deficiência:&lt;/strong&gt; Entender os relacionamentos do banco de dados em um projeto que está crescendo é difícil. As ferramentas tradicionais geram diagramas estáticos (ERD) que exigem tarefas manuais e rapidamente ficam defasados assim que uma nova migration é executada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A solução:&lt;/strong&gt; A gem &lt;code&gt;rails-realtime-erd&lt;/code&gt; monta uma rota em &lt;code&gt;/rails/erd&lt;/code&gt; que renderiza o diagrama do seu schema em tempo real usando o Mermaid, tudo processado pelo Hotwire (Stimulus), sem depender de frameworks JavaScript complexos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Por que é indispensável:&lt;/strong&gt; &lt;br&gt;
Você nunca mais precisará rodar um passo de rake para gerar um arquivo de imagem estático. A introspecção é feita sob demanda: se você rodar uma migration, basta atualizar a página para ver as tabelas e relacionamentos novos refletidos no diagrama imediatamente. É excelente para o onboarding de novos desenvolvedores e documentação viva da arquitetura.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Essas três ferramentas compartilham a mesma filosofia: &lt;strong&gt;o seu código já possui o conhecimento necessário, e as ferramentas de apoio devem viver o mais próximo possível dele&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Adotar o &lt;code&gt;rails-api-docs&lt;/code&gt;, o &lt;code&gt;rails-http-lab&lt;/code&gt; e o &lt;code&gt;rails-realtime-erd&lt;/code&gt; reduz drasticamente o atrito no dia a dia, eliminando dependências externas e o retrabalho manual. Com passos simples de instalação (basta adicionar ao &lt;code&gt;Gemfile&lt;/code&gt; e rodar um comando), seu ambiente de desenvolvimento se tornará muito mais produtivo, robusto e integrado.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
