Migration log · entry 005 · August 2026

Half a million SKUs, findable.

Half a million SKUs are worthless if nobody can find the right one. This entry is about carrying a search experience customers already trust across a platform migration — without a bridge to walk on.

Our customers already had good search. The old site runs on Algolia — fast, faceted, forgiving of the part-number-fragment-plus-guesswork queries industrial customers actually type. Which meant the migration bar wasn’t “add search to the new store.” It was: move to a new platform without customers losing a search experience they’ve spent years getting comfortable with.

First discovery: no bridge existed. The community connector between our new platform and Algolia had been abandoned versions ago. Nothing supported the current release. So the search layer was a custom build from the very first line — my preferred outcome anyway, because custom means no ceiling on what it can become.

The build is essentially a friendly hostile takeover. The platform’s native shop page gets replaced wholesale by our Algolia-powered experience — instant results, facet filters, the works — while everything downstream of clicking a product stays native: cart, checkout, order flow untouched. The seam between the two is where the interesting problems lived, like discovering exactly how the new platform’s cart really wants to be spoken to, because the documentation and the deployed behavior were not the same thing.

The search layer: platform data synced to Algolia, served through a custom shop page Platform database source of truth Scheduled sync incremental — only what changed index settings owned in code Algolia index 66 attributes per product Customer’s browser instant results + facets on a custom shop page search queries answered directly by the index cart, checkout, product pages stay native The native shop listing is replaced by the search experience; everything after the click stays platform-native.
The search layer: synced from the source of truth, served straight to the browser.

Then the sync had to grow up. Version one was a throwaway script that pushed 3,293 products with 66 attributes each in about ten minutes. Version two lives inside the platform itself: scheduled incremental syncs that push only what changed, automatic removal of anything unpublished, and — the real lesson — index settings owned in code. Search ranking, facets, and matching behavior aren’t clicked into a dashboard where they drift silently; they’re versioned, reviewed, and reapplied on every sync. If search behaves differently today than yesterday, the diff says why.

That layer is now the foundation everything findable sits on — including the “previously purchased” personalization from last week’s recap, which is just this same index with a customer-shaped boost.

Data in, data improved, data findable. The arc is starting to connect.