{"generator":"Perron","id":"https:\/\/railsdesigner.com\/feed.xml","title":"Rails Designer Blog","subtitle":"Articles from Rails Designer Blog","link":[{"@attributes":{"href":"https:\/\/railsdesigner.com\/feed.xml","rel":"self","type":"application\/atom+xml"}},{"@attributes":{"href":"https:\/\/railsdesigner.com\/","rel":"alternate","type":"text\/html"}}],"updated":"2026-04-30T04:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"entry":[{"id":"https:\/\/railsdesigner.com\/perron-1-0\/?ref=rss","title":"Perron 1.0 here is here","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/perron-1-0\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-04-30T04:30:00Z","updated":"2026-04-30T04:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/js-errors-feedback\/?ref=rss","title":"Catch JavaScript errors with user-friendly error feedback","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/js-errors-feedback\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-04-23T07:30:00Z","updated":"2026-04-23T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/transitions-with-cubic-bezier\/?ref=rss","title":"Level up CSS transitions with cubic-bezier","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/transitions-with-cubic-bezier\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-04-16T07:30:00Z","updated":"2026-04-16T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/introducing-fuik\/?ref=rss","title":"Announcing Fuik: a webhook engine for Rails","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/introducing-fuik\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-04-09T07:30:00Z","updated":"2026-04-09T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/form-service-objects\/?ref=rss","title":"Form Objects vs Service Objects in Rails","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/form-service-objects\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-04-08T07:30:00Z","updated":"2026-04-08T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/refactoring-js-class\/?ref=rss","title":"Refactoring a JavaScript class","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/refactoring-js-class\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-04-02T07:30:00Z","updated":"2026-04-02T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/reintroduce-rails-icons\/?ref=rss","title":"Everyone, say \u201chi\u201d again to Rails Icons \ud83d\udc4b","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/reintroduce-rails-icons\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-03-26T07:30:00Z","updated":"2026-03-26T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/custom-emoji-stimulus\/?ref=rss","title":"Build custom emojis with Stimulus","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/custom-emoji-stimulus\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-03-19T07:30:00Z","updated":"2026-03-19T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/video-hover-preview-stimulus\/?ref=rss","title":"Video Preview on Hover with Stimulus","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/video-hover-preview-stimulus\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-03-12T07:30:00Z","updated":"2026-03-12T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/importmap-rails\/?ref=rss","title":"Understanding importmap-rails","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/importmap-rails\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-03-05T07:30:00Z","updated":"2026-03-05T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/new-rails-designer\/?ref=rss","title":"Welcome to a new Rails Designer","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/new-rails-designer\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-02-26T07:30:00Z","updated":"2026-02-26T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/timestamp-toggles\/?ref=rss","title":"Simplifying timestamp toggles in Rails","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/timestamp-toggles\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-02-24T07:30:00Z","updated":"2026-02-24T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/recording-video-stimulus\/?ref=rss","title":"Record video in Rails with Stimulus","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/recording-video-stimulus\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-02-19T07:30:00Z","updated":"2026-02-19T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/introducing-icons-gem\/?ref=rss","title":"Introducing Icons: Add any icon library to your Ruby app","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/introducing-icons-gem\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-02-12T07:30:00Z","updated":"2026-02-12T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/turboless-confirm\/?ref=rss","title":"Replace Turbo confirm with native dialog","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/turboless-confirm\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-02-05T07:30:00Z","updated":"2026-02-05T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/impersonation-for-rails-8\/?ref=rss","title":"Adding user impersonation to Rails 8 authentication","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/impersonation-for-rails-8\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-02-04T07:30:00Z","updated":"2026-02-04T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/link-icon-custom-elements\/?ref=rss","title":"Creating a link-icon custom element","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/link-icon-custom-elements\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-01-29T07:30:00Z","updated":"2026-01-29T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/css-counters\/?ref=rss","title":"CSS Counters: auto-update list numbers without JavaScript","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/css-counters\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-01-26T07:30:00Z","updated":"2026-01-26T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/turbo-powered-optimistic-ui\/?ref=rss","title":"Building optimistic UI in Rails powered by Turbo","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/turbo-powered-optimistic-ui\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-01-22T07:30:00Z","updated":"2026-01-22T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/nested-forms-without-accepts-nested-attributes\/?ref=rss","title":"Nested forms without `accepts_nested_attributes_for` in Rails","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/nested-forms-without-accepts-nested-attributes\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-01-15T07:30:00Z","updated":"2026-01-15T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/dialog-turboframe\/?ref=rss","title":"Use native dialog with Turbo (and no extra JavaScript)","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/dialog-turboframe\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2026-01-08T07:30:00Z","updated":"2026-01-08T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/best-of-2025\/?ref=rss","title":"The Best of 2025 from Rails Designer","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/best-of-2025\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2025-12-25T07:15:00Z","updated":"2025-12-25T07:15:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/let-it-snow-stimulus\/?ref=rss","title":"Add snow to your app with Stimulus","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/let-it-snow-stimulus\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2025-12-18T07:15:00Z","updated":"2025-12-18T07:15:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/new-requestkit\/?ref=rss","title":"Requestkit: test and send webhooks and API requests in development","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/new-requestkit\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2025-12-11T07:30:00Z","updated":"2025-12-11T09:15:00+00:00","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}},{"id":"https:\/\/railsdesigner.com\/comparable-integers\/?ref=rss","title":"More readable integer comparisons in Ruby","link":{"@attributes":{"href":"https:\/\/railsdesigner.com\/comparable-integers\/?ref=rss","rel":"alternate","type":"text\/html"}},"published":"2025-12-10T07:30:00Z","updated":"2025-12-10T07:30:00Z","author":{"name":"Rails Designer","email":"support@railsdesigner.com"},"content":{"@attributes":{"type":"html"}}}]}