The in-house stack
The problemEvery one of these started as a line item somebody had stopped looking at. Reviews, CRM, post purchase upsell, loyalty. Individually each is a defensible few hundred dollars a month for a thing you do not want to build. Together they were $3,250 a month, and the reason they never got cancelled is the same in all four cases: the data was inside them.
The decisionTreat the archive as the product and the software as the easy half. A review corpus is the one asset on a store that cannot be rebuilt, so the build order came out of a single fact: Yotpo's own Write A Review was the only live way a customer could leave one, which meant swapping the product page before our own collection worked would freeze the corpus at whatever the import captured. Migrate, verify, stand up collection, and only then take the widget live. The widget itself ships as a web component in a shadow root with all:initial on the host, so a theme cannot reach in and break it and it cannot leak out and break a theme.
The result$39,000 a year of contracts replaced with systems on our own infrastructure. The deepest of them runs on our own Postgres with 14,320 product reviews and 4,334 site reviews migrated and verified, photo and video carried across, plus star rewards, a moderation queue and rich snippets. It is live on the product pages now and collecting new reviews: a King Palm product page loads review.kingpalm.com/widget.js and renders its own rating, distribution and cards.

The saving is the headline and it is not the interesting part. Fourteen thousand reviews with their photos still attached, on a database we own, is the difference between leaving a vendor and moving to a cheaper one and having the same conversation again in two years.