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.
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.
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.
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.
An AI that writes the database query for head office, with limits that live in code it can't touch. 55 questions in its first two weeks.
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.
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.