Reference
apps/scm)apps/scm is the Next.js workspace where tenant organizations run Commerce Chain Optimization (CCO): inventory, planning, procurement, fulfillment, demand intelligence, orders, returns, gateway/registry operator flows, and billing. It is the primary hosted surface for the @betterdata/scm-* and @betterdata/dcm-* module families described in SCM packages and DCM packages.
Despite the repo folder name scm, the same application hosts both SCM (supply-side operations) and DCM (demand-side, channel, and customer-order flows). The split is a domain boundary and module ID prefix (scm.* vs dcm.*), not two separate web apps.
| | SCM (Supply Chain Management) | DCM (Demand Chain Management) |
| --- | --- | --- |
| Focus | Supply and execution — what you hold, move, make, buy, and receive | Demand and promise — what customers and channels ask for, how orders and returns flow |
| Typical questions | Where is stock? What should we reorder? Did we receive it? Ship it? | What is demand telling us? Which orders need allocation or intervention? How do returns close? |
| Module ID prefix | scm.* (e.g. scm.inventory, scm.procurement, scm.execution) | dcm.* (e.g. dcm.demand, dcm.orders, dcm.returns) |
| OSS packages | @betterdata/scm-inventory, scm-procurement, scm-execution, scm-catalog, … | @betterdata/dcm-demand, dcm-orders, dcm-returns, dcm-channels, … |
| Example governed loops | scm.procurement, scm.fulfillment, scm.replenishment, scm.quality | dcm.demand, dcm.order, dcm.returns |
In one sentence: SCM tightens physical and purchase-to-deliver operations; DCM tightens signal-to-cash loops on the demand side (forecast → order → return). Both participate in the same loop model and the same CCO navigation model (Sense → Decide → Approve → Execute → Improve; Govern for trust, access, and audit) in apps/scm.
/welcome (e.g. Inventory & Operations, Commerce Gateway) group capabilities for onboarding; tier-2 rows like Procurement and Fulfillment are SCM operating domains under that card — not separate top-level “SCM vs DCM” tabs.dcm.* loop families.scm.inventory, scm.catalog, scm.procurement, scm.execution, dcm.demand, dcm.orders, and dcm.returns — reflecting one app routing both families.Better Data’s hosted commercial model is usage-based around loop outcomes, not seat count. The canonical overview lives under How pricing works:
apps/scm, open Settings → Billing to view commitment, current-period completion counts, utilization, and threshold / overage indicators.Enterprise customers negotiate custom commitments, annual terms, and volume tiers; contact hello@betterdata.co for packaging aligned to your modules and regions.
Hosted Loop Engine describes outcome-based positioning for the loop runtime; apps/scm billing surfaces the same completion-based lens in product settings. For list-price style tiers on the public site, see your commercial docs and How pricing works.
| Item | Path |
| --- | --- |
| SCM workspace app | apps/scm/ (bd-forge-main) |
| CCO-style navigation config | apps/scm/app/(authenticated)/components/sidebar/navigation-cco.ts |
| Welcome module grid (Inventory & Operations groups) | apps/scm/lib/welcome-modules-config.ts, apps/scm/lib/welcome-core-modules-config.ts |
