01 — The problem
ReviewPulse worked beautifully for one business and not at all for a hundred. The data model assumed a single account; there was no tenant isolation, no billing, and reply drafting was entirely manual — which capped how many locations a customer-success rep could manage.
Success meant onboarding multi-location brands without a migration each time, and giving each location its own dashboard, billing, and AI-assisted replies.
02 — What we changed
We drew the tenancy boundary first — row-level isolation with a tenant key on every table — because that's the one decision you can't cheaply reverse later. Billing went to Stripe with per-seat and per-location plans.
AI-assisted replies (drafted, never auto-sent) cut the manual reply burden without handing the brand voice to a model unsupervised. We chose draft-and-approve over full automation deliberately: a wrong public reply is expensive.
03 — The build
Discovery surfaced the tenancy and billing risks early, so those shipped first. Weekly demos against a shared backlog took the product from single-tenant to first paying multi-tenant customer in eight weeks.
04 — Results
3x throughput per customer-success rep, 60% less manual reply work, and 99.9% uptime across the multi-tenant fleet. The architecture has since absorbed thousands of locations without a re-platform.
05 — What we'd do differently
We'd invest in tenant-aware load testing earlier. The architecture held, but we proved it under real traffic rather than synthetic — a nervier way to learn it works.
“They rebuilt our product into something we could actually sell to enterprise. The craft is obvious in every corner.”
THE STACK
