Builds
What LEGO Latin America needed from a custom storefront

The Scale Problem
LEGO Latin America sells across 18 markets. Each market has its own currency, its own product catalog, and its own regulatory requirements for what can be sold where. A set available in Mexico might not be available in Chile. Pricing in Brazilian reais follows a completely different margin structure than pricing in Colombian pesos.
Their existing storefront was a single Shopify theme trying to serve all of it. The theme had a language switcher and a currency dropdown, but underneath, every market saw the same catalog. Products that weren't available in a given country still showed up in search results. Checkout defaulted to USD and converted at the payment gateway, which meant customers saw one price while browsing and a different price at checkout.
For a brand that sells to families, that kind of friction kills trust fast.
Why a Single Theme Breaks
Shopify themes are built for single-market stores. They handle one catalog, one currency, and one language well. When you try to stretch a theme across 18 markets, you're fighting the architecture at every step.
The catalog problem is the most visible. Shopify's product model doesn't natively support region-locked availability. You can use tags or metafields to flag products by region, but filtering those at the theme level means loading the entire catalog and hiding products with JavaScript. On a catalog with thousands of SKUs, that means slow page loads and products flickering in and out of view as the page renders.
The currency problem goes deeper. Shopify Markets handles multi-currency at the checkout level, but the browsing experience still shows converted prices with rounding artifacts. A product priced at 499 Mexican pesos shows as 498.73 in the theme because it's converting from a USD base price. Small thing, but it makes the store feel like a translation rather than a local experience.
The language problem compounds both. Product descriptions, collection pages, navigation labels, promotional banners, legal disclaimers, return policies. Every piece of customer-facing text needs to exist in Spanish, Portuguese, and in some markets, English. A Shopify theme with Langify or a similar translation app handles basic text, but structured content like size guides, assembly instructions, and age recommendations needs more than string replacement.
What We Built
We built a headless frontend that treats each market as its own context. When a customer in Brazil loads the site, the frontend queries the catalog API with a Brazil filter. Only products available in Brazil appear. Prices display in reais, set by the merchandising team for that market, not converted from a base currency. All content renders in Brazilian Portuguese.
The key architectural decision was making the market context the root of the entire browsing experience, not a setting that gets applied on top. Every API call, every page render, every cache key includes the market identifier. This means the Chilean storefront and the Argentine storefront are functionally independent applications sharing the same codebase and design system.
Currency switching happens without a page reload. A customer who wants to compare prices in USD can toggle currencies and see the page update instantly because both price sets are already loaded for that product. But the default experience is always the local currency with locally-set pricing.
Checkout flows are localized per market. Payment methods vary by country, tax calculations follow local rules, and shipping options reflect the actual logistics network in each region. A customer in Peru sees different payment options than a customer in Panama because the payment infrastructure is different.
The Catalog System
The product catalog runs through a middleware layer that sits between the Shopify backend and the frontend. The merchandising team manages products in Shopify the way they always have, but they tag each product with market availability using a structured metafield schema. The middleware reads those tags and builds market-specific catalog indexes that the frontend queries directly.
This means catalog queries are fast. Instead of loading 4,000 products and filtering client-side, the frontend requests the 800 products available in Colombia and gets back exactly those 800 with Colombian pricing, Colombian descriptions, and Colombian availability status.
Search works the same way. The search index is built per market, so a search for "castle" in Mexico returns different results than a search for "castillo" in Argentina, and both return only products available in that market.
What Shipped
The storefront launched across all 18 markets over a three-week rolling deployment. We started with the three highest-traffic markets (Mexico, Brazil, Colombia), monitored for a week, then expanded to the remaining fifteen.
Page load times dropped from 4.2 seconds on the old theme to 1.8 seconds on the new frontend. The improvement came mostly from eliminating the client-side catalog filtering that was loading thousands of products on every page.
Checkout completion rates increased by 23% in the first month. The biggest driver was eliminating the currency mismatch between browsing and checkout. When customers see 499 pesos while browsing and 499 pesos at checkout, they complete the purchase. When the number changes at the last step, they leave.
The merchandising team can now run market-specific promotions without creating duplicate products or collections. A back-to-school campaign in Mexico runs independently from a holiday campaign in Brazil, using the same product catalog but different pricing, different featured collections, and different promotional banners.
For any brand selling across multiple regions with different catalogs, currencies, or regulations, the single-theme approach has a ceiling. LEGO Latin America hit that ceiling at 18 markets. Most brands hit it sooner.
Your system is the bottleneck. Let's fix it.
30 minutes. No slides. We pull up your site live and show you what's possible.

