Кодът на Maksoft CMS е разположение на
https://github.com/maksoftnet/ms
Документацията е разделена така, че един стабилен договор (контракт) да описва как изглеждат данните навън, а отделен mapping слой да описва как те се извличат и трансформират от базата данни.
Контрактът (/docs/contracts) се пипа рядко и служи за теми, API и AI, докато мапингът (/lib/mapping + /docs/mapping) е еволюционен и поема всички бъдещи промени в модела и схемата.
Така CMS-ът може да се развива вътрешно, без да е обвързан с темплейти, интеграции и външни потребители на данните.
/
├─ README.md
│
├─ /docs
│ ├─ /contracts
│ │ ├─ output-contract.v1.md
│ │ ├─ output-contract.v1.schema.json
│ │ └─ CHANGELOG.md
│ │
│ ├─ /mapping
│ │ ├─ site.md
│ │ ├─ page.md
│ │ ├─ catalog.md
│ │ ├─ commerce.md
│ │ └─ docs.md
│ │
│ ├─ /architecture
│ │ ├─ data-model.md
│ │ └─ data-flow.md
│ │
│ └─ /guides
│ ├─ theme-development.md
│ └─ extending-contract.md
│
├─ /lib
│ ├─ /data
│ │ └─ PageData.php ← orchestration (събира всичко)
│ │
│ ├─ /mapping
│ │ ├─ /v1
│ │ │ ├─ SiteMapper.php
│ │ │ ├─ PageMapper.php
│ │ │ ├─ CatalogMapper.php
│ │ │ ├─ CommerceMapper.php
│ │ │ └─ DocsMapper.php
│ │ │
│ │ └─ MapperInterface.php
│ │
│ ├─ /repositories
│ │ ├─ PageRepository.php
│ │ ├─ ProductRepository.php
│ │ ├─ PriceRepository.php
│ │ └─ DocumentRepository.php
│ │
│ └─ /services
│ ├─ OutputContextService.php
│ └─ PricingResolver.php
│
├─ /themes
│ ├─ /_docs
│ │ └─ data-contract.md
│ │
│ ├─ /default
│ │ ├─ templates/
│ │ ├─ assets/
│ │ └─ theme.json
│ │
│ └─ /custom-theme
│ └─ ...
│
├─ /api
│ ├─ /v1
│ │ └─ output.php ← JSON output по контракта
│ │
│ └─ /sync
│ └─ mongo-export.php ← нерелационен exchange layer
│
└─ /tests
├─ /contracts
│ └─ output-contract-v1.test.php
└─ /mapping
└─ PageMapperTest.php