The commerce platform, not just a cart.
Self-signup, per-tenant domains, firewalled admins and per-store integrations — the control-plane pieces that open-source carts leave you to build. Bizdia ships them as modules, each built once and configured per store.
What's built, what's next.
Each module is simultaneously a capability our founding merchant uses today and a sellable feature for every tenant tomorrow.
Tenant provisioning & domain routing
One channel per store, a firewalled admin, and hostname→channel resolution so a merchant's own domain serves their store with zero storefront config.
ShipStation order push
Per-store credentials in the platform's settings store. Orders flow out to ShipStation and on to Amazon FBA/MCF or your own 3PL — no glue code.
Themes — branding + templates
Three brandable themes apply your colors, logo and type as data over the template. One storefront codebase; the look is per-store, zero front-end code.
Own-your-database foundation
Self-hosted on PostgreSQL 17 with an open-source commerce core. Export everything; run it on your own infrastructure whenever you want.
Merchant self-signup
Registration provisions a real channel, a firewalled admin role and an administrator, checkout-ready. Currently access-gated; metered billing and email verification are the next gates.
Fitment catalog engine
A CompatibilityListing entity points thousands of model-specific pages at one ProductVariant — unique per-model copy, JSON-LD, canonical, sitemap. Spec'd and in development.
Multi-tenancy, done at the primitive level.
Not a bolt-on. The tenant boundary runs through the channel, the router, the roles and the settings store.
Tenant = Channel
One isolated channel per store. Provisioning creates the channel, a scoped admin role, an administrator and a domain mapping — atomically.
Hostname → channel routing
Middleware resolves the incoming Host header to a channel token, so a merchant's own domain serves their store with zero storefront config.
Firewalled admin
Tenant admins get a role template scoped to their own channel — deliberately excluding anything that could leak across tenants.
Per-store configuration
Modules store per-channel config in the settings store (ShipStation keys, theme + branding), each gated by a module-specific permission.
Own-your-database core
PostgreSQL 17 and an open-source commerce core. Self-host it, or run managed — either way the schema and the data are yours.
One codebase, many looks
The storefront is entirely data-driven per channel. Themes make the look per-tenant, so one deployment serves every store's domain.
Boring where it counts.
A monorepo you can read: an open-source commerce core for the GraphQL shop and admin APIs and a React dashboard; a Next.js 16 storefront with the App Router; PostgreSQL 17 underneath; a reverse proxy terminating TLS per domain. No magic, no lock-in.
Provision your first tenantbizdia/
├─ apps/
│ ├─ server/ # commerce core — GraphQL + dashboard
│ ├─ marketing/ # bizdia.com (this site)
│ └─ storefront/ # Next.js 16 — per-tenant stores
├─ plugins/
│ ├─ tenant/ # channel-per-store + routing
│ ├─ shipstation/ # order push
│ └─ theme/ # branding + templates
└─ postgres 17 # your databaseProvision a real tenant and look inside.
Sign up and Bizdia creates a live channel, a firewalled admin and your account — then explore the same dashboard every merchant gets.