Architecture
How the platform fits together — tenancy, the API, the storefront engine, and data isolation.
The platform is a multi-tenant commerce system. A handful of services cooperate behind a single domain model.
The layers
- GraphQL API (Go backend) — the system of record. One endpoint (
/graphql) serves the admin app, the storefront data layer, and external integrations. Authorization is enforced per request from the caller's organization + scopes. - Storefront engine (Next.js + Liquid) — each store renders from a theme: Liquid templates/sections fed by the catalog and content data. A reverse proxy resolves the incoming host to a store and rewrites into the storefront route.
- Admin app (Next.js) — the merchant UI; a thin client over the same GraphQL API.
- MCP server — wraps the GraphQL API as agent tools + ships skill playbooks.
- Search & media — products are indexed for storefront listings/search; media
is served from a CDN-cached
/storagepath.
Multi-tenancy & isolation
Every tenant is an organization; each organization owns exactly one store. Data is isolated at the database layer with row-level security keyed on the organization, so one tenant can never read another's rows — the API, the storefront, and the MCP all operate within that boundary automatically.
One org = one store
Throughout the docs, "store" and "organization" are effectively 1:1. Your API key resolves to a single org/store/active-theme context.
Request flow (storefront)
- A request hits a custom domain or subdomain.
- The edge proxy resolves the host → store, stamping tenant headers (and handling
locale prefixes like
/vi/...). - The storefront route loads the active theme + data and renders Liquid to HTML.
- Cart/account/checkout calls go to framework API routes, scoped to the tenant.
Catalog model (EAV)
Products use an Entity-Attribute-Value model: a small set of core columns plus arbitrary typed attributes (specs, facets) grouped into attribute sets. This is what lets every store define its own product shape without schema changes — and it's also what powers the content engine (custom content types reuse the same machinery).
Next
- Core concepts — the vocabulary you'll see across the API.
- Create a store.
