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 touchServices
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 foundminitest-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.currentguarda
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
endbridgetown-stoa
Pre-alphaA documentation theme for Bridgetown, inspired by just-the-docs.
---
layout: bridgetown-stoa/layout
title: My Page
---axe-cuprite
ArchivedRun 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)