Guided Rails

Rails apps that are easy to change, test, and use.

Cleaner code, fast and reliable tests, accessible views, and practices your team keeps after we're gone. That matters more now that AI writes so much of your code, because it can only copy the patterns you already have.

Get in touch

Services

Hands-on help for Rails teams.

Codebase cleanup

We take over messy Rails apps and get them back into shape: refactoring tangled code, fixing slow and flaky test suites, making the app accessible, and setting the practices your team follows from then on. That matters more now that AI writes so much of the code, because AI can only follow the patterns your codebase already has.

Accessibility audits

We review your Rails app against WCAG with a keyboard and a screen reader, then hand you a prioritized list of fixes pointing at the views and components that need them.

Projects

Rails apps we've built and run ourselves.

Catberry

The front porch for roots music. Catberry helps players and listeners find jams, concerts, and circles near them, and the artists, bands, and organizations that keep the music alive.

Gems

Small, focused gems we've built for our own Rails apps and shared with everyone.

a11y-lint

Catch accessibility issues in ERB and Phlex views before they ship, like images without alt text and links or buttons without an accessible name.

$ a11y-lint app/views
app/views/home.html.erb:3 [ImgMissingAlt] img tag is missing an alt attribute (WCAG 1.1.1)
1 offense found

minitest-attributes

Assert several attributes of an object in one call, with a clear failure message for each mismatch.

assert_attributes person,
  first_name: "Marceline",
  nickname: nil,
  created_at: Time.current

guarda

Authorization built around controller actions, not models. Each controller gets a policy, and each action gets a policy method.

class PostsController < ApplicationController
  def update
    authorize @post # => PostsPolicy#update?
  end
end

bridgetown-stoa

Pre-alpha

A documentation theme for Bridgetown, inspired by just-the-docs.

---
layout: bridgetown-stoa/layout
title: My Page
---

axe-cuprite

Archived

Run axe-core accessibility checks in Capybara system tests driven by Cuprite, with readable RSpec matchers.

expect(page).to be_axe_clean.checking_only(:color_contrast)

uthmani_text_size

Archived

Count the letters in Uthmani Arabic text, ignoring the diacritics and marks that String#size counts as separate characters.

"ٱلرَّحْمَٰنِ".size          # => 12
"ٱلرَّحْمَٰنِ".uthmani_size  # => 6