Introduction

Multi-tenant headless e-commerce platform fronting Shopify — one deploy serves many shops.

Nordcom Commerce is a multi-tenant headless e-commerce platform. A single Next.js deployment serves an arbitrary number of shops. Each shop is identified by hostname — no subpaths, no per-tenant builds. One deploy, many storefronts.

Platform pillars

Multi-tenancy by hostname. Middleware intercepts every request, resolves the Host: header to a Shop row in Convex, and rewrites the URL to the tenanted App Router tree before any page code runs. New tenants are added as database rows, never as code.

Shopify as the commerce layer. Product catalog, inventory, cart, checkout, and customer accounts run through the Shopify Storefront and Admin APIs. The @nordcom/commerce-shopify-graphql package wraps gql.tada and injects the @inContext directive automatically — route handlers never touch Apollo directly.

A Convex-native content layer. Structured page content, navigation, articles, and per-product metadata live in Convex, with the content shapes defined as field descriptors in @nordcom/commerce-cms. The editor is mounted in the Admin app at /cms; the Storefront reads content through the Convex cms/read functions. Block-level Shopify data is injected at the storefront render boundary — the CMS package has no Shopify dependency.

Tag-based cache invalidation. The @tagtree family of packages declares cache tag schemas as typed TypeScript objects. Shopify webhooks, the Convex revalidation pipeline, and manual calls all target the same tag vocabulary — no hand-rolled string concatenation, no stale entries after a mutation.

How the docs are organized

SectionContents
DocsPlatform concepts, getting started, app narratives, and operations guides
PackagesNarrative per-workspace docs: purpose, API surface, and changelogs
ReferenceAuto-generated TypeDoc API reference for every exported symbol
ErrorsPer-error-code pages with causes, examples, and throw-site listings
Note

The Reference tab is generated at build time from JSDoc and TypeScript types across the monorepo. Concepts and Packages tabs are hand-written. Both link to each other using typed cross-reference pills — click any symbol in a code block or prose to jump to its Reference page.

Continue exploring

On this page