A coaching CRM for a group of clinics

Someone fills in a form on a clinic's website and becomes a lead. Staff follow up, and the CRM sends the emails and texts in between, until that person signs up. The CRM is the software a group of exercise clinics uses to keep track of everyone who has shown interest, and staff work in it all day.

The app is about nine years old, so I changed it a piece at a time while it kept running. I upgraded Rails from version 6.0 to 8.1. Then I built the parts below.

Posts

A new look, one page at a time

Giving a nine-year-old app a new design without a switch-over day. Both versions run side by side, over 250 pages have new versions, and each person chooses when to switch.

Follow-ups that can wait and branch

Replacing fixed email sequences with journeys staff draw, and the rules that make sure each person gets each message once. 322 people through them so far.

Testing the answers

Normal tests can't tell you an AI's answers got worse. About thirty saved questions, rerun whenever the AI's instructions or tables change, report which answers did. A full run costs about $3.

Still one piece at a time

The app never stopped. The clinics used it all day while it changed underneath them. What I do now is the same work, a piece at a time: another page given the new look, another old sequence turned into a journey, another table added so the AI can answer one more of head office's questions.

Rails 8.1, ViewComponent, Postgres, Sidekiq, React 19, Vite, Tailwind, React Flow, Twilio, SendGrid, the Anthropic API, Heroku.