# Eryx Innovations Lab > A small studio of engineers and designers building commerce and software that ships. We specialise in MedusaJS builds, Shopify replatforming and headless commerce for regulated and high-risk categories. This file follows the llms.txt convention. Every page on this site is also available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. The complete corpus is at https://www.eryxinnovationslab.com/llms-full.txt. ## Site - [Home](https://www.eryxinnovationslab.com/): A small studio of engineers and designers building commerce and software that ships. - [Services](https://www.eryxinnovationslab.com/services): What we build and how engagements are scoped. - [Work](https://www.eryxinnovationslab.com/work): Case studies from recent commerce and platform builds. - [Pricing](https://www.eryxinnovationslab.com/pricing): Engagement models and what they cost. - [Process](https://www.eryxinnovationslab.com/process): How a build runs, week by week. - [About](https://www.eryxinnovationslab.com/about): Who we are and where we are. - [Contact](https://www.eryxinnovationslab.com/contact): Start a project. - [Blog](https://www.eryxinnovationslab.com/blog): Field notes on commerce engineering. ## Services - [E-commerce](https://www.eryxinnovationslab.com/services#e-commerce) - [Web applications](https://www.eryxinnovationslab.com/services#web-applications) - [AI systems](https://www.eryxinnovationslab.com/services#ai-systems) - [Admin & CMS](https://www.eryxinnovationslab.com/services#admin-cms) - [Plugins & modules](https://www.eryxinnovationslab.com/services#plugins-modules) - [Design systems](https://www.eryxinnovationslab.com/services#design-systems) ## Case studies - [Fielder](https://www.eryxinnovationslab.com/work/fielder): B2B fixtures platform for cricket academies. - [Maple](https://www.eryxinnovationslab.com/work/maple): Patient intake redesigned end-to-end. - [Oemline](https://www.eryxinnovationslab.com/work/oemline): Headless commerce rebuild on Hydrogen — doubled time-to-market. ## Articles — Medusa - [Testing Medusa: What to Test, What to Skip, and How](https://www.eryxinnovationslab.com/blog/medusa-testing-guide): Commerce code moves money, so untested checkout logic is a liability. A pragmatic test strategy — what earns its keep, and what is theatre. - [Observability for Medusa: Logs, Traces and the Alerts Worth Having](https://www.eryxinnovationslab.com/blog/medusa-observability): Self-hosting means owning the question 'is checkout working?'. Structured logging, tracing, the four metrics that matter and alerts that do not cry wolf. - [Caching Medusa: What to Cache, Where, and What Never To](https://www.eryxinnovationslab.com/blog/medusa-caching-strategy): Four cache layers, one rule about carts, and the invalidation strategy that stops a price change taking twelve hours to appear. - [Integrating Medusa with Sanity: Who Owns Which Field](https://www.eryxinnovationslab.com/blog/medusa-sanity-cms-integration): The hard part of a commerce-plus-CMS setup is not the sync. It is deciding which system owns each field — and then never letting both own one. - [Search in Medusa: Algolia, Meilisearch and Keeping the Index Fresh](https://www.eryxinnovationslab.com/blog/medusa-algolia-search): Database search stops working sooner than you expect. Choosing an engine, building the index, and the sync strategy that survives a bulk import. - [Selling Digital Products with Medusa: Delivery, Licensing and VAT](https://www.eryxinnovationslab.com/blog/medusa-digital-products): No shipping, no inventory, and a set of problems physical goods never have: secure delivery, licence enforcement, and tax charged where the customer is. - [Building a Marketplace on Medusa: Vendors, Splits and Payouts](https://www.eryxinnovationslab.com/blog/medusa-marketplace): Multi-vendor commerce means splitting one customer order into several vendor orders, and moving money to people who are not you. The model and the money mechanics. - [Building Subscriptions on Medusa: Billing Cycles, Dunning and Churn](https://www.eryxinnovationslab.com/blog/medusa-subscriptions): Recurring billing is a scheduling problem with money attached. The data model, the renewal workflow, and the failure handling that determines involuntary churn. - [B2B Commerce on Medusa: Companies, Approvals, Quotes and Net Terms](https://www.eryxinnovationslab.com/blog/medusa-b2b-commerce): The four capabilities that separate B2B from DTC, modelled as Medusa modules and workflows — with the data model that makes approvals work. - [Multi-Currency Pricing in Medusa: Price Lists and Rounding](https://www.eryxinnovationslab.com/blog/medusa-multi-currency): Explicit prices per currency, price lists for sales and customer-group pricing, and the minor-unit arithmetic that makes zero-decimal currencies interesting. - [Medusa Multi-Region: Currencies, Tax and Selling Internationally](https://www.eryxinnovationslab.com/blog/medusa-multi-region): Regions carry currency, tax, payment methods and shipping. How to model international selling without accidentally creating twelve stores. - [Scaling Medusa: What Breaks First and How to Fix It](https://www.eryxinnovationslab.com/blog/scaling-medusa): Traffic does not break Medusa — the database does, then the workers, then the catalog queries. The bottlenecks in the order you will meet them. - [Tax in Medusa: Regions, Rates, Overrides and When to Use a Tax Engine](https://www.eryxinnovationslab.com/blog/medusa-tax-configuration): Tax-inclusive versus tax-exclusive pricing, product overrides, and the point at which manual rates stop being viable and you buy an engine. - [Medusa Fulfilment: Stock Locations, Service Zones and Carriers](https://www.eryxinnovationslab.com/blog/medusa-fulfillment-providers): Why your shipping options are empty, how the fulfilment model actually fits together, and how to build a provider that talks to a real carrier. - [Razorpay with Medusa: Payments for the Indian Market](https://www.eryxinnovationslab.com/blog/medusa-razorpay-integration): UPI, netbanking, RuPay and the mandate rules that make Indian payments their own discipline. Integrating Razorpay with Medusa properly. - [PayPal with Medusa: Integration, Buttons and Dispute Handling](https://www.eryxinnovationslab.com/blog/medusa-paypal-integration): Adding PayPal alongside cards, wiring the JS SDK buttons into a Next.js checkout, and the dispute and webhook behaviour that differs from a card processor. - [Building a Custom Payment Provider for Medusa](https://www.eryxinnovationslab.com/blog/medusa-custom-payment-provider): The provider interface method by method, a working implementation, and the idempotency and webhook details that separate a demo from something you can take money with. - [Multi-Language Medusa Storefronts: Routing, Content and hreflang](https://www.eryxinnovationslab.com/blog/medusa-multi-language-storefront): Medusa handles currency and tax per region, not translation. How to layer language onto that — URL structure, product content, and the hreflang most stores get wrong. - [Medusa Storefront Performance: Where the Milliseconds Actually Go](https://www.eryxinnovationslab.com/blog/medusa-storefront-performance): Over-fetching, waterfalls and unoptimised images account for most of a slow headless storefront. How to find them and what to do about each. - [Medusa Storefront SEO: Structured Data, Canonicals and Facets](https://www.eryxinnovationslab.com/blog/medusa-storefront-seo): Headless means you own every SEO decision, including the ones a hosted platform used to make. Metadata, Product schema, canonical rules and the faceted-navigation trap. - [Deploying Medusa on AWS: ECS, RDS and the Parts That Bite](https://www.eryxinnovationslab.com/blog/medusa-aws-deployment): A production AWS architecture for Medusa — ECS Fargate, RDS, ElastiCache, S3 — plus the networking and migration details that turn a two-day job into a two-week one. - [Deploying Medusa on Railway: The Fastest Production Setup](https://www.eryxinnovationslab.com/blog/medusa-railway-deployment): Railway is the shortest path from a Medusa repository to a production deployment that is actually correct. The full setup, including the worker service everyone forgets. - [Dockerising Medusa: A Production Image That Is Not 2GB](https://www.eryxinnovationslab.com/blog/medusa-docker-deployment): A multi-stage Dockerfile for Medusa v2, a compose file for local development, and the build-memory problem that catches every team once. - [Medusa Environment Variables and Configuration, Done Properly](https://www.eryxinnovationslab.com/blog/medusa-environment-variables): Every variable Medusa reads, which ones are security-critical, and how to structure configuration so a missing value fails at boot instead of at checkout. - [Medusa Database Migrations: Generating, Reviewing and Deploying Safely](https://www.eryxinnovationslab.com/blog/medusa-database-migrations): Generated migrations are only as safe as your review of them. How Medusa migrations work, and the expand-and-contract pattern that keeps rolling deploys from failing. - [Stripe with Medusa: Setup, Elements and Webhooks That Work](https://www.eryxinnovationslab.com/blog/medusa-stripe-integration): Configuring the Stripe module, wiring Payment Elements into a Next.js checkout, and the webhook and 3D Secure details that decide whether payments reconcile. - [The Medusa Checkout Flow: Every Step, and Where It Breaks](https://www.eryxinnovationslab.com/blog/medusa-checkout-flow): Address, shipping, payment session, complete. The four stages of a Medusa checkout, the state machine underneath, and the failure modes that cost orders. - [Deploying Medusa to Production: Architecture, Checklist and Pitfalls](https://www.eryxinnovationslab.com/blog/deploying-medusa-to-production): What a production Medusa deployment actually needs — process separation, Redis, migrations, health checks — and the four mistakes that cause the first outage. - [Medusa Project Structure: Where Every Kind of Code Belongs](https://www.eryxinnovationslab.com/blog/medusa-project-structure): Medusa loads code by convention. A directory-by-directory guide to what goes where, and the decision tree for placing any new piece of logic. - [Payment Providers in Medusa: Architecture, Choice and Failover](https://www.eryxinnovationslab.com/blog/medusa-payment-providers): How Medusa's payment abstraction works, why running two providers is easier than you think, and the authorise-versus-capture decision that determines your refund story. - [Implementing a Medusa Cart That Does Not Lose Items](https://www.eryxinnovationslab.com/blog/medusa-cart-implementation): Cart persistence, the guest-to-customer merge, inventory races and optimistic UI. The cart problems that only appear in production, and how to avoid them. - [Customising the Medusa Admin: Widgets, Routes and UI Extensions](https://www.eryxinnovationslab.com/blog/medusa-admin-customization): The dashboard is a React app you can extend. Injecting widgets into existing pages, adding new routes, and the conventions that keep extensions from looking bolted on. - [Medusa Events and Subscribers: Reacting Without Coupling](https://www.eryxinnovationslab.com/blog/medusa-events-subscribers): How Medusa's event bus works, when a subscriber is the right tool instead of a workflow step, and the retry semantics you need to design around. - [Medusa Plugins: Building and Publishing Reusable Commerce Packages](https://www.eryxinnovationslab.com/blog/medusa-plugins-guide): When a module should become a plugin, how the package is structured, and what changes when your code has to run in someone else's application. - [The Medusa JS SDK: Querying, Auth and the fields Parameter](https://www.eryxinnovationslab.com/blog/medusa-js-sdk-guide): The SDK is thin on purpose. What it handles, how authentication differs between store and admin, and why the fields parameter is the difference between a fast storefront and a slow one. - [The Medusa Container: Dependency Injection Without the Ceremony](https://www.eryxinnovationslab.com/blog/medusa-dependency-container): Everything in Medusa is resolved from a container. What is registered, how scoping works per request, and how to avoid the two mistakes that cause leaks. - [Building a Medusa Storefront in Next.js: Architecture and Patterns](https://www.eryxinnovationslab.com/blog/medusa-nextjs-storefront): Server components, caching, cart state and the rendering decisions that determine whether your storefront is fast. The architecture we use on every Medusa build. - [Medusa Module Links: Relating Data Across Isolated Modules](https://www.eryxinnovationslab.com/blog/medusa-module-links): Modules cannot reference each other's tables, so how do you attach a brand to a product? Links — and the query layer that reads across them. - [Medusa Workflows Explained: Steps, Compensation and Why They Matter](https://www.eryxinnovationslab.com/blog/medusa-workflows-explained): Workflows are how Medusa keeps multi-step commerce operations from leaving your data half-written. How steps and compensation work, and how to build one properly. - [Medusa v2 Modules Explained: Building Custom Commerce Domains](https://www.eryxinnovationslab.com/blog/medusa-v2-modules-explained): Modules are the unit of everything in Medusa v2. What they are, why isolation matters, and how to build one that will not embarrass you in a year. - [Installing Medusa v2: From Zero to a Running Store](https://www.eryxinnovationslab.com/blog/install-medusa-v2): The install that works, the prerequisites people miss, and what to do in the first hour after the seed data loads. - [What Is Medusa? The Open-Source Commerce Platform, Explained](https://www.eryxinnovationslab.com/blog/what-is-medusa): Medusa is a TypeScript commerce framework you run yourself. Here is what that actually means, who it suits, who it does not, and how it differs from every hosted platform you have used. ## Articles — Commerce - [The US Vape Crackdown and Shopify: Why Brands Are Migrating to Medusa](https://www.eryxinnovationslab.com/blog/shopify-vape-ban-migrate-to-medusa): Shopify Payments prohibits nicotine. The PACT Act killed your shipping options. Here is what actually happens when a vape brand gets deplatformed — and the migration path off Shopify onto self-hosted Medusa. - [The Real Cost of Headless Commerce: A TCO Model You Can Argue With](https://www.eryxinnovationslab.com/blog/headless-commerce-tco): Platform fees are the visible cost and rarely the largest. A three-year model comparing hosted SaaS against self-hosted Medusa, including the lines people leave out. - [Medusa vs Vendure: Two TypeScript Commerce Frameworks Compared](https://www.eryxinnovationslab.com/blog/medusa-vs-vendure): Both are TypeScript, both are self-hosted, both are good. The differences are in the extension model, the API style, and how much structure you want imposed. - [Magento to Medusa Migration: Leaving EAV Behind](https://www.eryxinnovationslab.com/blog/magento-to-medusa-migration): Magento's EAV model, configurable products and multi-store hierarchy do not map one-to-one onto anything. How to extract, translate and cut over without losing B2B logic. - [Medusa vs Saleor: TypeScript REST or Python GraphQL](https://www.eryxinnovationslab.com/blog/medusa-vs-saleor): Two credible open-source commerce platforms with opposite technical bets. Which one fits depends far more on your team than on the feature lists. - [WooCommerce to Medusa Migration: Escaping post_meta](https://www.eryxinnovationslab.com/blog/woocommerce-to-medusa-migration): WooCommerce data lives in WordPress's generic post tables. Extracting it cleanly, mapping variable products, and deciding what to do with thirty plugins. - [Medusa vs Shopify: An Honest Comparison for 2026](https://www.eryxinnovationslab.com/blog/medusa-vs-shopify): Not a feature grid written by someone selling one of them. Where Shopify genuinely wins, where Medusa does, and the revenue point where the maths flips. - [Shopify to Medusa Migration: The Complete Technical Guide](https://www.eryxinnovationslab.com/blog/shopify-to-medusa-migration): Catalog, customers, orders, subscriptions and the redirect map that decides whether you keep your rankings. A working plan for moving off Shopify, from people who have done it. - [Migrating to Medusa: How to Replatform Without Losing the Business](https://www.eryxinnovationslab.com/blog/migrating-to-medusa): The decision framework, the sequence, the costs and the failure modes. A platform-agnostic guide to moving an existing store onto Medusa without breaking revenue. ## Articles — Engineering - [Three things to fix before going live on Hydrogen](https://www.eryxinnovationslab.com/blog/hydrogen-three-things): Edge runtime gotchas, cart hydration, and the SEO trap most teams miss. - [Block-based pages, two years in](https://www.eryxinnovationslab.com/blog/block-based-pages-two-years-in): What works, what we changed, and what we would never do again. ## Articles — Studio - [Shipping cadence beats velocity](https://www.eryxinnovationslab.com/blog/shipping-cadence-over-velocity): Why we measure cadence — not story points — for every engagement. ## Articles — Design - [Design tokens, not themes](https://www.eryxinnovationslab.com/blog/design-tokens-not-themes): A small rant about why "dark mode toggle" is the wrong abstraction. ## Other pages - [Privacy](https://www.eryxinnovationslab.com/privacy): How Eryx Innovations Lab collects, stores and handles your data. - [Studio](https://www.eryxinnovationslab.com/studio-notes): How Eryx works day to day — the team, the principles, and the way we run an engagement. - [Terms](https://www.eryxinnovationslab.com/terms): Default engagement terms for Eryx Innovations Lab projects.