×
An Akamai EdgeWorker in Lowe's existing request path calls into a Harper application for context-aware routing. Decisions made at request-time against live inventory, Pro status, geography, and caller type — not at config-time in Akamai Edge Redirector Cloudlet or nginx rules. Zero changes to origin.
Lowe's has accumulated millions of redirect rules across seven years of modernization, the December 2024 Rithum / Mirakl marketplace launch, the October 2025 FBM acquisition adding 370 new distribution locations, and ongoing SKU churn. Those rules live in Akamai Edge Redirector and nginx — static config with no runtime access to the data that would make routing correct. Googlebot, Rufus, ChatGPT, and Google's UCP Business Agent all hit the same URLs and get HTML designed for humans.
Pick a real lowes.com URL. Hit trigger. Four legitimate callers — Googlebot, a Pro contractor near Charlotte NC, a DIY shopper in San Francisco, and a GPTBot AI agent — all send the same URL to Harper simultaneously. Harper makes five real routing decisions from live data. A fifth "no Harper" lane shows current production behavior for contrast. Every response you see below is from a real Harper backend call.
Two URLs down, six columns across. Every cell is a different status code and destination, selected at request time from live data. Zero static definitions in the database for these specific combinations. Zero code deploys to change any of them.
| URL | Googlebot | Pro (Charlotte) | DIY (SF) | AI Agent (GET) | AI Agent (POST) | No Harper |
|---|---|---|---|---|---|---|
| URL 1: discontinued SKU /pd/Kobalt-Cordless-Impact-Wrench/1000595395 |
301 canonical collapse |
302 Pro-priced alt |
302 local alt, store #1652 |
303 /api/product/… |
307 method preserved |
Soft-404 /cat/tools/ |
| URL 2: discontinued, no alt /pd/GE-Profile-Electric-Range/5001234567 |
410 Gone · crawl-budget safe |
302 close-but-not-equiv Pro |
302 geo-alt SF Bay |
303 /api/related/… |
307 POST preserved |
404 dead end |
Permanent SKU renames or URL-structure migrations. Today: observed as multi-hop chains. Harper: collapse to one hop at the edge using the redirect graph in MQTT-synced state.
The target depends on what's in stock right now at the caller's store, whether Pro pricing applies, and vector-search similarity of alternatives. Static config cannot express this — Harper resolves it per request.
Detected AI agents (GPTBot, ClaudeBot, Google UCP Business Agent, Rufus) are redirected to machine-readable JSON endpoints instead of HTML bundles. Faster, cheaper, and the agent actually gets the data it needs.
When an agent POSTs to a moved URL, standard 302 silently downgrades to GET — data is lost. Harper returns 307 (temporary) or 308 (permanent) so POST stays POST. Critical for agent-driven checkout flows.
When a SKU is permanently gone with no reasonable substitute, Harper returns 410. Google drops the URL from the index fast and reallocates crawl budget. Current lowes.com returns a soft-404 redirect to a category page — wastes crawl budget for little SEO value.
Caller detection patterns, routing rules, and SKU alternative graphs live in Harper tables. Updates propagate via MQTT to every edge node in seconds. Lowe's merchandising updates a redirect without a PR, a deploy, or a pager rotation.
An Akamai EdgeWorker sits in Lowe's existing request path. For URLs flagged as discontinued or moved, the EdgeWorker calls into a Harper application over HTTPS, passes the request context, and emits the 3XX response based on Harper's decision. Harper holds the data (inventory, Pro accounts, redirect graph, caller rules, alternative-product vectors) and runs the pipeline. The EdgeWorker stays thin.
Googlebot · Pro · DIY · GPTBot · UCP Agent
Thin shim in front of origin. On a flagged URL, calls Harper for the decision, then emits the 3XX.
POST /RedirectDecision · classify caller · vector search · inventory + Pro + geo filter · pick status
301 · 302 · 303 · 307 · 308 · 410 — emitted by the EdgeWorker
When a shopper, crawler, or agent hits a discontinued SKU, Harper has to find the best live alternative — from the product catalog now expanded by Rithum/Mirakl marketplace additions and the FBM acquisition. Brute-force cosine comparison against every product scales linearly with catalog size. Harper avoids that by using its built-in HNSW (Hierarchical Navigable Small World) vector index, declared directly in the schema.
One directive on a [Float] field creates an HNSW index on the column. No separate vector database to run, no sync pipeline to keep in step with the catalog, no second query language.
Harper supports cosine and euclidean distance. Tunable parameters include optimizeRouting and efSearchConstruction; sensible defaults work for most workloads.
When the Seed resource loads products, each one's name + description is converted to a 384-dim vector and written on the same record. The HNSW index is updated as each row is inserted — no separate indexing step, no rebuild.
The demo's textToVector is a token-ngram bag-of-words hashed into 384 buckets — good enough to cluster products by shared vocabulary. For production, swap that one function for a Voyage, OpenAI, or self-hosted bge-small call. The rest of the pipeline doesn't change.
The discontinued SKU's embedding lives on the RedirectRule row itself (searchEmbedding), not in Product — because it's gone from the catalog. One vector, seeded once, describes what the dead URL meant.
Harper exposes HNSW search through the same tables.X.search() method as any other query. Two patterns depending on what you need:
Pattern B is used here because we want "only suggest an alternative if it's actually similar enough" — beyond the threshold we prefer to return a 410 rather than redirect to something loosely related. The threshold is evaluated against the index during traversal, not by loading candidates and computing distance in JavaScript.
Whichever pattern is used, the search returns at most a handful of candidates. Harper then filters that set by live inventory at the caller's nearest store, applies Pro-catalog preference ranking, and picks a destination. The expensive "what's similar in the catalog" step runs against the graph index; the cheaper "what's in stock and Pro-priced" steps run against a list of 10 things.
Brute-force distance comparison against every vector is O(N) — it scales linearly with catalog size. HNSW is a multi-layer graph where upper layers have long edges between distant nodes and lower layers are dense. Search descends layer by layer, converging on the neighborhood of the query vector. Expected time is roughly O(log N). The tradeoff is that results are approximate — the true top-K may occasionally be replaced by a very close neighbor.
A typical stack has the app server, a row database, and a vector database on three different networks. Every request pays round-trip tax to each. In Harper, the catalog rows, the HNSW index, the inventory rows, and the application code all run in the same process. The candidate list goes straight from the index into the inventory filter with no serialization boundary.
Cosine distance measures the angle between two vectors, ignoring magnitude. Two product descriptions that use similar vocabulary in different amounts still match if they're about the same thing. Euclidean distance would penalize the length difference. Both are supported in Harper — cosine is the default for text embeddings.
Top-K would always return 5 candidates, even when the closest one isn't actually close. For a redirect decision that's the wrong shape: we'd rather return 410 Gone than route to a loosely-related product and give a bad SEO or shopping signal. A threshold lets the search itself say "nothing similar enough" and the pipeline responds accordingly.
Akamai already terminates TLS, handles caching, and owns the request path at Lowe's edge. The EdgeWorker is a small script that runs inside that existing infrastructure. For most URLs it does nothing — origin is hit directly. For a flagged URL, it makes one HTTPS call to Harper and emits the response Harper returned.
Akamai EdgeWorkers have strict CPU and memory budgets and no persistent store. They can't hold millions of inventory rows, run HNSW vector search, or join Pro accounts against geo. Harper can — it's a database with the application logic colocated. The EdgeWorker asks, Harper answers.
Lowe's inventory + commerce feeds publish to MQTT. Harper subscribes. Changes propagate across the Harper Fabric mesh in seconds — merchandising flips a redirect rule and every Harper node sees it without a deploy, a config PR, or a cache-invalidation dance.
Everything Akamai Edge Redirector + nginx gives today, plus everything neither can do because they don't have the data.
Covers everything Akamai Edge Redirector Cloudlet does today. Akamai EdgeWorker sits in the same request path, calls Harper for the decision, emits the 3XX. Rules and destinations live in Harper tables.
Redirect destination depends on what's actually in stock at the caller's nearest store right now.
Logged-in Pro accounts get Pro-priced alternatives and Pro desk pickup context in query string. Vector search against Pro catalog first.
IP → nearest store from MaxMind + Lowe's store locator. Alternative must be in stock at that store, or the next-closest store with stock.
Googlebot, GPTBot, ClaudeBot, Google UCP Business Agent, Rufus all classified from User-Agent patterns stored as data. Each gets an appropriate response format.
Redirect rules, caller patterns, alternatives graph — all in Harper tables. Merchandising updates a redirect in minutes, not a quarter-long engineering cycle.
Modeled against Digital Commerce 360's $12.17B projection of Lowe's 2025 online sales. Numbers below are projections — see assumptions panel for the math.
Everything in this demo connects to a public Lowe's priority for 2026. Harper isn't a hypothetical fit — it's directly in line with where money is already being spent.
Closed October 2025. 370 new distribution locations. FBM's catalog being linked into Lowe's Pro extended aisle. URL spaces need to merge without breaking search equity or Pro workflows.
3P SKU explosion. Marketplace catalog churn moves faster than Akamai config deploys. Each 3P de-list is a potential broken URL that static config won't catch for days.
Mylow handles ~1M questions/month, doubles online conversion. Next wave: Google's UCP Business Agent, ChatGPT shopping, Claude computer use — all hitting lowes.com with HTML-fetching tools that would be much faster against JSON endpoints.
Lowe's guided to $2.5B capex for 2026 with technology the leading investment category. Measurable ROI without disrupting core retail operations is explicitly called out.