Control and ownership
You get full ownership and control of the code. No vendor dependency, no third-party roadmap — your team controls hosting, deployment and performance.
A working definition before everything else.
SHOPin is an Agnostic Frontend Accelerator — or, if you prefer the longer name, a Composable Storefront Accelerator. It is a solution layer designed to overcome the practical difficulties of building a consumer experience on a purely decoupled (MACH) backend.
It is not a platform. It is not a UI library. It is a coherent set of conventions, contracts and runnable applications you fork, deploy, and own.
SHOPin ships as a source-code framework, not a closed platform. Your competitive edge lives in custom checkout logic, bespoke UI and business-specific integrations — a generic SaaS cannot accommodate that. The accelerator is the starting framework you make yours.
You get full ownership and control of the code. No vendor dependency, no third-party roadmap — your team controls hosting, deployment and performance.
Your team maintains SHOPin's architecture and patterns, not our release notes. We do not force version updates. Your business evolves on your roadmap, not ours.
Your custom features will introduce project-specific challenges in performance, scalability and security. The accelerator gives you the best foundation — operating it well is still real work.
Architecture is four distinct layers of thinking, each handling a different class of concerns. SHOPin's core principle is to keep these kinds of complexity honestly separate — so visual design, rendering, orchestration and contracts never bleed into each other.
Separates visual design and component composition from business logic. The layer centralises your visual language so UI is independent, reusable and testable in isolation — design complexity stays out of application logic.
Separates page composition and rendering strategy from data orchestration. Routing, SSR and page assembly never mix with fetching or transformation — performance work stays independent of backend complexity.
Separates data aggregation and transformation from both presentation and backend services. Multiple services (CMS, commerce, search) merge into unified responses — swap backends without touching presentation code.
Separates interface definitions from implementation. Strict shared contracts between layers keep data structures stable regardless of backend change — no cascading edits, clear boundaries.
Layer synergy
The flow of data and responsibilities between UI, presentation, BFF and the contracts that bind them — on one example product page.
All of it lives in a single monorepo — no juggling repositories, no diverging tooling. Five workspace categories, each with a clear job.
| Category | Purpose | Usage |
|---|---|---|
| apps/* | Product applicationsRunnable apps that ship to users. | Any runnable application or site. |
| core/* | Shared packagesReusable code, types and tooling configs. | Contracts, i18n, ESLint, Prettier, TypeScript configs. |
| integrations/* | Backend integrationsCommerce and auth providers. | commercetools-api, commercetools-auth, mock-api. |
| config/* | Central configurationCross-app constants and config. | Shared constants consumed by apps and core. |
| demo/* | Optional demosPrototyping and showcases. | Safe to remove for production. Dedicated to showing SHOPin possibilities. |
A tour of the directories. Open the repo and you will recognise it from this map.
Everything under demo/ exists only to showcase SHOPin. It is safe to delete before real development begins.
Aligned on principles?
Clone the repo, wire your backends and start with patterns that already know how to be composed.