RSSAmplifier

Blog

Paagman.dev

Hi! 👋 I'm Dennis Paagman, an independent, product focused, developer who loves building great software. I have been building, testing, and deploying Ruby on Rails apps for 15 years.

paagman.devRSS feed ↗10 posts

Latest posts

Introducing Rebundler: make your Gemfile look great with a single command

Today I’m introducing Rebundler . It’s a little tool to automatically re-organize and annotate your Gemfile. I wrote it because I like my Gemfiles to be structured neatly, but in reality I always just put gems near vaguely adjacent gems or end up chucking them at the end of the file. Eventually my Gemfiles turn out to be an incoherent mess. Rebundler groups and sorts your gems and adds a…

Making sure local CI is green before deploying to Heroku

Note: this article assumes you’re using GitHub, something similar can probably also be cooked up for other hosting providers. Rails 8.1 was released recently with a new ‘Local CI’ feature. This allows you to easily define and run the steps you traditionally run on an external system (like GitHub Actions) on your own machine. Modern hardware is fast enough to even run large test suites nowadays.…

Hotwire Native is extremely future proof

Yesterday, iOS 26 was released with a whole new look-and-feel called ‘liquid glass’. You might think that getting that to work with your Hotwire Native app requires at least writing some code. But because of the tight integration with iOS (using first party, native UI components) it actually does not need any code changes at all. Upgrading your app to the new look requires exactly 0 lines of code…

Handling chrome.devtools.json requests in Rails apps

Chrome recently added a new feature called “ Automatic Workspace Folders ” to Chrome DevTools. It can help with automatically mapping the correct folder of a project to the Workspace feature of the web inspector. In the workspace you can, for example, directly edit and save files in your project. I don’t use the feature, but errors from requests to a specific file for this feature in my logs were…

Deep link into apps with Hotwire Native and universal links (iOS)

This post was updated in October 2025 to work with the latest version of Hotwire Native (1.2 and up). By default all external links in your Hotwire Native app will open in a Safari modal. This is great for most cases, but it’s also very nice to directly open links in a specific app, for example, when linking to a location on Google Maps, or an Instagram post. This is where universal links come in.…

Make delete actions stand out in Hotwire Native menus

The Hotwire Native menu bridge is one of the most common ways to interact with native functionality from your Hotwire Native app. It is part of the demo application and probably one of the first components you will implement when you start building your own Hotwire Native app. It instantly makes your app feel more native. A common design pattern is to show ‘destructive’ actions (deleting a record,…

Building a Native sharing component with Hotwire Native (iOS)

One of the great things about building with Hotwire Native is being able to easily tap into native functionality. A common use case in mobile apps is the ability to share content using the native share functionality. It’s the most center button in Safari, after all. Let’s look at how we can implement this using Hotwire Native’s bridge components! The implementation consists of three parts: A…

Benchmarking return data types

In a previous article , I discussed several approaches to handling returned data in API responses. These ranged from using plain Ruby hashes to more type-strict solutions like dry-struct . I also wanted to benchmark all of them to compare their performance. In any real-world application, the raw performance of each method is largely irrelevant, as the overhead of the web request and response time…

Embedding Superset dashboards in React applications

Superset is an open-source data visualization platform, while Preset is a hosted SaaS solution for Superset. A notable capability of Superset is its ability to embed dashboards within other applications. This feature allows for easy dashboard management using Superset, without requiring users to leave your application. Additionally, Superset offers security rules to ensure data is correctly…

Structuring return data

If you’re working with APIs, it’s highly likely that you’ll also need to handle the data returned from those APIs (unless you’re only sending data to them). There are various approaches to handling this data, ranging from using basic Hashes to utilizing full model-like classes. In this article, I will explore a few of the most commonly used methods. Note: For these examples, I’ll use a greatly…