Let’s talk

ReviewFlow

A WhatsApp-first Google review management SaaS for UK local businesses, built so its compliance claims survive someone reading the source.

Category
B2B SaaS, Rayden AI
Status
Live
Period
Jun to Jul 2026
Role
Design, build, operate
Link
reviewflow.raydenai.com
Stack
Node.js 22Expressbetter-sqlite3React 18ViteTailwind CSSTwilio (WhatsApp & SMS)Google Places APIAnthropic SDKStripeDockerFly.ioVitest
ReviewFlow owner dashboard for a fictional dental practice showing Google rating, total reviews, the review-request funnel and low-star reviews needing attention.

Context

Small UK businesses want more Google reviews and most tools in the category get them the same way: ask for a rating first, send the happy customers to Google and divert the rest into a private form. That is review gating. It is prohibited by Google’s policy, by the UK Digital Markets, Competition and Consumers Act 2024, and by the US Federal Trade Commission. I wanted a product I could defend line by line.

What I built

ReviewFlow lets a business add a customer, by hand, CSV, QR code or a walk-in prize wheel, and schedules a WhatsApp message with SMS fallback. Every customer gets the same two links: leave a Google review, or tell the manager privately. The original build had sentiment routing. I removed it, then commissioned a read-only audit of my own code that cited a file and line for every claim and labelled the things the code did not do as not found. It caught one leftover: the API still computed a rating-based routing value that nothing used. I removed that too.

ReviewFlow message flowA customer is added with an append-only lawful-basis record, a job is queued with delay and quiet hours, then passes a single send choke-point that checks opt-outs and the daily cap before Twilio delivers a WhatsApp template with SMS fallback. The customer sees Google and private feedback with equal weight. STOP creates a platform-wide opt-out that survives erasure. Reviews are imported from Google Places into an inbox where AI-drafted replies are approved by a person.reply STOPCustomer addedmanual · CSV · QR · spinLawful-basis recordappend-only, exact wordingJob queueSQLite · delay · quiet hoursSingle send choke-pointopt-out check · daily capTwilioWhatsApp template, SMS fallbackCustomer phoneone message, two linksChoice pageequal weight, no gatingGoogle reviewpublicPrivate feedbackto the managerSTOP → platform opt-outsurvives erasureGoogle Places importreviews, rating, competitorsOwner inboxAI draft, human approvesDSAR toolsexport · anonymise in place
One send path, so no message can bypass the opt-out check or the cap.
  • Data store
  • Model or agent
  • Check or gate
  • Person
  • External service

Consent is an append-only record storing the exact wording each person saw. Data subject requests are self-serve, and erasure anonymises in place while deliberately preserving the opt-out, because suppression has to survive deletion. The content security policy is all-self, fonts are self-hosted, logs are redacted, and the whole thing runs on one small machine in London for a few pounds a month.

Outcome

Deployed on a custom domain with over a hundred automated tests, an end-to-end run of 27 checks passed, and multiple security reviews with no exploitable findings. Twenty-three industry presets. Production WhatsApp sending awaits Meta business verification, and there are no paying customers yet, so I make no claims about volume.

What I’d do differently

Research the compliance position before building, not after; gating went in and came out. Ship a consent gate, not just a consent record, because evidence without enforcement is the first thing a regulator asks about. And start the third-party approvals on day one. Meta, Google Business Profile and Stripe approvals are multi-week lead times that gated launch long after the code was finished.

Recording

The customer flow on a phone. A rating is recorded for analytics only, then both options are offered with equal weight.

Screens