DFD-749 · Shared Basket Project · Technical Audit

Bamford × Daylesford — Technical Divergence Audit

Evidence base for the shared-basket integration strategy: how far apart the two Adobe Commerce codebases really are, where the divergence is concentrated, and what that means for consolidation and cross-site basket options.

Contents

Fourteen sections, ordered inventory → comparison → decisions → recommendation. The section bar below stays with you as you scroll.

1Executive summary

The two platforms are substantially more aligned than the February feasibility notes assumed. Since then, both sites have completed Hyvä frontend migrations and now share the same Magento version, hosting stack, checkout framework, payment provider and search/marketing vendors. The genuine divergence is concentrated in one place: the delivery & fulfilment domain (Daylesford's date-based fresh-food delivery machinery vs Bamford's flat-rate carriers) plus a long tail of brand-specific features. A working cross-site cart transfer module is already installed and enabled on both sites. This report follows the audit structure proposed and approved on DFD-749 (64-hour audit & discovery scope, approved 21 May 2026): inventory → functional mapping → cross-comparison → divergence & risk → decision register → recommended route.

2.4.7-p10
Identical Adobe Commerce EE version on both sites
Hyvä
Both frontends + Hyvä Checkout + Loqate
27 / 226
Custom app/code modules shared vs distinct overall
187 · 74
Registry modules only on Daylesford · only on Bamford
642,335
Lines of Daylesford-only Magestore POS suite code
Live
Develo_CartTransfer enabled on both sites today
Key findings
  1. Same skeleton. Identical Magento EE 2.4.7-p10, PHP 8.3, Adobe Commerce Cloud, MySQL 10.11, OpenSearch 2, Fastly, Bitbucket pipelines. 796 composer packages identical; only 53 version skews, mostly patch-level.
  2. Same storefront generation. Both migrated Luma → Hyvä in 2025 (Bamford Aug, Daylesford Oct). Both run Hyvä Checkout with Adyen (+ Apple/Google Pay express) and Loqate address validation. This removes what was historically the biggest consolidation blocker.
  3. Delivery is the real divergence. Daylesford: bespoke date-based multishipment carrier (day-of-week pricing, 17:30 cut-off, availability schedules, delivery-date columns on quote/order items, Magewire calendar). Bamford: two flat-rate carriers (DHL/DPD). The planned Daylesford delivery-matrix rebuild is the convergence opportunity.
  4. Magestore POS inflates Daylesford's footprint. ~642k of ~890k custom LOC is the Magestore POS/inventory suite (82 registry modules; 15 already disabled; a parked copy sits in broken_modules/). A licence/cleanup decision here dramatically shrinks the merge surface.
  5. Shared modules have drifted, not diverged. The 27 common custom modules (Develo/Xtento toolkits) are the same products at different versions — reconcilable engineering work, not rewrites.
  6. A basket bridge already exists. Develo_CartTransfer (v1.2.0) is enabled on both sites: it serialises the cart and rebuilds it on the destination site with stock/visibility validation. It is a one-way replace-not-merge handoff — a foundation for an interim option, not yet a shared basket.

2Audit scope, assumptions & methodology

Per the approved audit plan: what this audit covers, what it deliberately does not, and how the analysis was produced.

In scope
  • The two production codebases as checked out on 9 July 2026 (daylesford, bamfordDevelo)
  • Code-level analysis: module registries, composer dependency trees, custom app/code, themes, DI configuration (plugins/preferences/virtual types), observers, cron, console commands, API surface, schema patches
  • Integrations at code level (which systems are wired in, and how)
  • Infrastructure as expressed in the repos (.magento.app.yaml, services, pipelines)
  • Functional capability mapping and cross-site comparison of the above
Out of scope (per the quote)
  • Implementation of any consolidation work
  • Full target architecture design and detailed migration plan
  • Regression test plans, QA execution, config parity exercise
  • Data migration design; ERP / warehouse process redesign
  • Database-resident admin configuration, CMS content and operational business processes (flagged where they matter — see risk register)
Assumptions
  • The checked-out branches represent the current production heads of each site
  • Module enablement is taken from each site's app/etc/config.php (deploy-time source of truth)
  • Composer-delivered code is assessed via lock files (vendor directories are not installed in the checkouts); where the same Develo package exists in app/code on one site, that copy was read directly
  • Commercial licensing positions of third-party vendors are noted as risks, not verified with vendors
Method

Automated static extraction first — scripted parsing of module registries and composer lock files, file-hash diffing of every app/code module and theme on both sides, and counts of DI plugins, preferences, virtual types, observers, cron jobs, console commands, web API routes and schema patches — followed by targeted manual code exploration of the delivery, checkout, payment and integration domains (carrier classes, DI wiring, key module internals). Automated first-pass findings were verified against config.php enablement before inclusion; functional grouping (§7) is evidence-based — audit-verified code reads, composer package descriptions and documented commercial product function — with the interim spot-check list closed out by direct code reads. The review stage was performed as an independent verification pass (10 Jul): every quantitative claim in this report was re-derived from the repositories by a separate recount (module registries re-parsed with PHP itself as ground truth), and fifteen factual code-level claims were adversarially re-verified; the corrections found are applied throughout and summarised in §14.

3Platform baseline

Everything below the application code is effectively the same platform. The three mismatches (Redis version, RabbitMQ, patch sets) are routine alignment work.

LayerDaylesfordBamfordVerdict
Adobe CommerceEE 2.4.7-p10EE 2.4.7-p10aligned
HostingAdobe Commerce CloudAdobe Commerce Cloudaligned
PHP (cloud)8.38.3aligned
DatabaseMySQL (MariaDB) 10.11MySQL (MariaDB) 10.11aligned
SearchOpenSearch 2OpenSearch 2aligned
CacheRedis 6.0Redis 7.2differs
Message queueRabbitMQ 3.8— nonediffers
CDN / WAFFastly (+ Develo fastly-extended)Fastly (+ Develo_Fastly bot handling)aligned
FrontendHyvä (Develo/Daylesford, live Oct 2025)Hyvä (Develo/Bamford, live Aug 2025)aligned
CheckoutHyvä Checkout 1.3.5 + LoqateHyvä Checkout 1.3.4 + Loqatealigned
Payments (core)Adyen 9.15.0 · Mollie 2.47 (transitive, enabled)Adyen 9.18.0 · Mollie 2.46 (transitive, enabled)aligned
CI/CDBitbucket PipelinesBitbucket Pipelinesaligned
Security toolingSansec Shield + Watch, polyshell protectionSansec Shield + Watch, polyshell protectionaligned
Local patches18 patches + 15 m2-hotfixes + composer.patches.json12 patches + 7 m2-hotfixesdiffers

Themes on disk

SiteThemeParentFilesLOCStatus
DaylesfordDaylesford/defaultMagento/blank52852,157Legacy pre-Hyvä theme (blank-based) — purge candidate
DaylesfordDevelo/DaylesfordHyva/default45445,537Live Hyvä theme
BamfordDevelo/BamfordHyva/default33034,088Live Hyvä theme
BamfordTryzens/BamfordMagento/luma24437,264Legacy Luma theme — purge candidate
BamfordTryzens/BamfordClubTryzens/Bamford251,149Club-store child of legacy theme

4Module registry (app/etc/config.php)

Every module registered on each site, core and third-party. 646 modules are common; Daylesford carries 187 extra registrations (dominated by Magestore POS, Magefan blog, Yotpo, GDPR and events tooling) against Bamford's 74 (subscriptions, club, Magezon page builder, shop-by-brand, pickup).

833
Daylesford registered (808 enabled)
720
Bamford registered (715 enabled)
646
Registered on both
187
Daylesford only
74
Bamford only
5
Enabled one side, disabled the other
Overlap
shared (646)Daylesford-only (187)Bamford-only (74)

Same module, different switch (5)

ModuleDaylesfordBamford
Amasty_RegenerateUrlRewritesdisabledenabled
Amasty_SeoToolkitLiteHyvadisabledenabled
Develo_AdyenExpressCheckoutdisabledenabled
Develo_AdyenHyvaFixenableddisabled
Magento_AdminAdobeImsTwoFactorAuthdisabledenabled

Daylesford-only registrations by vendor (187)

struck-through = registered but disabled

Magestore — 82 modules (67 enabled)
Magestore_AdjustStock
Magestore_Appadmin
Magestore_BarcodeSuccess
Magestore_BranchRequest
Magestore_ClickAndCollect
Magestore_ClickAndCollectAdminUi
Magestore_ClickAndCollectApi
Magestore_ClickAndCollectCustomization
Magestore_ClickAndCollectFrontend
Magestore_ClickAndCollectGraphQl
Magestore_ClickAndCollectHyva
Magestore_Core
Magestore_CoreFrontend
Magestore_Customercredit
Magestore_CustomercreditGraphQl
Magestore_CustomercreditHyva
Magestore_Deli
Magestore_DropshipSuccess
Magestore_FixBug
Magestore_FulfilReport
Magestore_FulfilSuccess
Magestore_Giftvoucher
Magestore_GiftvoucherGraphQl
Magestore_GiftvoucherHyva
Magestore_Hyva
Magestore_InventoryMovement
Magestore_InventoryMovementAdminUi
Magestore_InventoryMovementApi
Magestore_Logger
Magestore_LoggerApi
Magestore_LoggerGraphQl
Magestore_OrderSearchCustomize
Magestore_OrderSuccess
Magestore_Payment
Magestore_PaymentOffline
Magestore_PosReports
Magestore_PurchaseOrderSuccess
Magestore_ReportSuccess
Magestore_Rewardpoints
Magestore_RewardpointsGraphQl
Magestore_RewardpointsHyva
Magestore_SalesReport
Magestore_SecondDisplay
Magestore_StatusCustomization
Magestore_Stocktaking
Magestore_SupplierSuccess
Magestore_TransferStock
Magestore_Webpos
Magestore_WebposAdyenTerminal
Magestore_WebposAmastyRewards
Magestore_WebposAuthorizenet
Magestore_WebposClarity
Magestore_WebposDojo
Magestore_WebposDojoAdminUi
Magestore_WebposIntegration
Magestore_WebposMobile
Magestore_WebposMoneris
Magestore_WebposMonerisAdminUi
Magestore_WebposMonerisApi
Magestore_WebposMonerisGraphQl
Magestore_WebposPaynl
Magestore_WebposPaynlCore
Magestore_WebposPaynlTerminal
Magestore_WebposPaynlTerminalAdminUi
Magestore_WebposPaynlTerminalApi
Magestore_WebposPaynlTerminalGraphQl
Magestore_WebposPerformance
Magestore_WebposPerformanceAdminUi
Magestore_WebposPerformanceApi
Magestore_WebposPusher
Magestore_WebposPusherAdminUi
Magestore_WebposPusherApi
Magestore_WebposSellPrePrintedGiftCard
Magestore_WebposShipping
Magestore_WebposSquare
Magestore_WebposSquareAdminUi
Magestore_WebposSquareApi
Magestore_WebposSquareGraphQl
Magestore_WebposStripe
Magestore_WebposStripeTerminal
Magestore_WebposTyro
Magestore_WebposZippay
Develo — 19 modules (19 enabled)
Develo_AddRecipeLayout
Develo_AdminOrderFlag
Develo_AdyenPendingPaymentFix
Develo_AmastyLabelFix
Develo_Cart
Develo_CategoryBannerImage
Develo_DaylesfordCustomCode
Develo_DeliverySchedule
Develo_Emails
Develo_FraudList
Develo_HideCacheFlushBtns
Develo_InventoryProblemFix
Develo_MagestoreOverrides
Develo_PortalHeader
Develo_ProductAttribute
Develo_ProductRedirect
Develo_SEOImprove
Develo_SnowdogFixes
Develo_WidgetsExt
Daylesford — 18 modules (18 enabled)
Daylesford_AdyenGiftcard
Daylesford_AgeRestriction
Daylesford_Catalog
Daylesford_Checkout
Daylesford_CheckoutGiftMessage
Daylesford_Csp
Daylesford_CustomOrders
Daylesford_EventTicketsHyva
Daylesford_Events
Daylesford_Footer
Daylesford_GoogleTagManager
Daylesford_KlevuAdditions
Daylesford_KlevuBlog
Daylesford_OrderManagementRestriction
Daylesford_Setup
Daylesford_StreetwiseIntegration
Daylesford_TrustpilotIntegration
Daylesford_Wishlist
Redbox — 16 modules (15 enabled)
Redbox_AdyenPayByLinkFrontend
Redbox_CartQty
Redbox_CategoryFooterCMSBlock
Redbox_CustomProductAlert
Redbox_CustomerPreferences
Redbox_DeliveryByCalendar
Redbox_GivexGiftCard
Redbox_HyvaSubscribeAtCheckout
Redbox_InlineAdvt
Redbox_Install
Redbox_ProductByAvailabilitySchedule
Redbox_ProductLabels
Redbox_SalesRestriction
Redbox_Shopfinder
Redbox_SubscribeAtCheckout
Redbox_XtentoOrderImportStorePickup
Amasty — 15 modules (15 enabled)
Amasty_BannersLiteHyvaCompatibility
Amasty_Gdpr
Amasty_GdprCookie
Amasty_GdprFrontendUi
Amasty_GdprHyva
Amasty_GroupAssign
Amasty_LabelCacheCleanerForQtyVariable
Amasty_LabelGraphQl
Amasty_LibFancybox
Amasty_PromoGraphql
Amasty_PromoHyvaCompatibility
Amasty_RulesPro
Amasty_SpecialPromotionsHyva
Amasty_StoreLocatorSubscriptionPackage
Amasty_StorelocatorSubscriptionFunctionality
Magefan — 8 modules (8 enabled)
Magefan_Blog
Magefan_BlogAuthor
Magefan_BlogExtra
Magefan_BlogGraphQl
Magefan_BlogImport
Magefan_BlogPlus
Magefan_ProductWidget
Magefan_YouTubeWidget
Hyva — 3 modules (3 enabled)
Hyva_CmsTailwindJit
Hyva_LumaCheckout
Hyva_MagefanBlog
Yotpo — 3 modules (3 enabled)
Yotpo_Core
Yotpo_Reviews
Yotpo_SmsBump
Dotdigitalgroup — 2 modules (0 enabled)
Dotdigitalgroup_Email
Dotdigitalgroup_Enterprise
Mageplaza — 2 modules (2 enabled)
Mageplaza_Core
Mageplaza_CronSchedule
MarkShust — 2 modules (1 enabled)
MarkShust_DisableTwoFactorAuth
MarkShust_SimpleData
Wyomind — 2 modules (2 enabled)
Wyomind_Framework
Wyomind_MsiBackorders
Xtento — 2 modules (2 enabled)
Xtento_CustomSmtp
Xtento_OrderImport
Yireo — 2 modules (2 enabled)
Yireo_AdminSimpleSearchFields
Yireo_EmailTester2
Aheadworks — 1 modules (1 enabled)
Aheadworks_EventTickets
AureateLabs — 1 modules (1 enabled)
AureateLabs_Redirector
Bss — 1 modules (1 enabled)
Bss_CustomProductAttributeExport
CtiDigital — 1 modules (1 enabled)
CtiDigital_Configurator
Experius — 1 modules (1 enabled)
Experius_WysiwygDownloads
FireGento — 1 modules (1 enabled)
FireGento_FastSimpleImport
Mageside — 1 modules (1 enabled)
Mageside_EmailPreview
MagicToolbox — 1 modules (0 enabled)
MagicToolbox_MagicZoomPlus
Magmodules — 1 modules (1 enabled)
Magmodules_Channable
MentionMe — 1 modules (1 enabled)
MentionMe_MentionMe
Ulmod — 1 modules (1 enabled)
Ulmod_OrderComment

Bamford-only registrations by vendor (74)

Tryzens — 23 modules (22 enabled)
Tryzens_Club
Tryzens_ClubMemberships
Tryzens_ClubStorefront
Tryzens_DHLFlatRate
Tryzens_DPDFlatRate
Tryzens_ExtendAdyenPayment
Tryzens_ExtendAheadworksSarp2Adyen
Tryzens_ExtendCatalog
Tryzens_ExtendCatalogSearch
Tryzens_ExtendCheckout
Tryzens_ExtendCms
Tryzens_ExtendKlaviyo
Tryzens_ExtendMagentoInventoryShipping
Tryzens_ExtendQuote
Tryzens_KlevuStorefrontRecommendations
Tryzens_NewsletterContentBlock
Tryzens_NewsletterWidget
Tryzens_PdpSizeGuide
Tryzens_ProductDynamicLinks
Tryzens_ProductIcons
Tryzens_ProductRolloverImage
Tryzens_RakutenAffiliates
Tryzens_Tradestate
Develo — 14 modules (14 enabled)
Develo_AheadworksSarpFix
Develo_AlternateHreflang
Develo_AmastyGiftWrapFix
Develo_AmastyPromoSarpFix
Develo_CheckoutFormModifier
Develo_Cms
Develo_CmsInlineStyleRemover
Develo_FooterLinks
Develo_FreeSamples
Develo_GeoIpRedirectBypass
Develo_Klaviyo
Develo_Optimization
Develo_UpdateOrderStatus
Develo_VWOScripts
Amasty — 12 modules (10 enabled)
Amasty_Feed
Amasty_FreeGiftLite
Amasty_GiftWrap
Amasty_GiftWrapHyva
Amasty_Mage2.4.7Fix
Amasty_ShopbyBase
Amasty_ShopbyBrand
Amasty_ShopbyBrandGraphQl
Amasty_Sorting
Amasty_SpecialPromotionsLite
Amasty_StorePickupWithLocator
Amasty_StorePickupWithLocatorMSI
Bamford — 8 modules (8 enabled)
Bamford_CartAttributes
Bamford_CustomProductStatus
Bamford_LinkProductVariations
Bamford_ProductWidget
Bamford_TrustpilotIntegration
Bamford_VirtualShopping
Bamford_Waitlist
Bamford_Website
Aheadworks — 5 modules (5 enabled)
Aheadworks_Core
Aheadworks_Sarp2
Aheadworks_Sarp2Adyen
Aheadworks_Sarp2Hyva
Aheadworks_SarpNotifications
Magezon — 4 modules (4 enabled)
Magezon_Builder
Magezon_Core
Magezon_NinjaMenus
Magezon_UiBuilder
Andev — 1 modules (1 enabled)
Andev_Productrestrict
Feedoptimise — 1 modules (1 enabled)
Feedoptimise_CatalogExport
Freento — 1 modules (1 enabled)
Freento_EmailsLog
Hyva — 1 modules (1 enabled)
Hyva_PaymentIcons
Mageside — 1 modules (1 enabled)
Mageside_PromotionMessage
Magmodules — 1 modules (1 enabled)
Magmodules_AlternateHreflang
WebShopApps — 1 modules (1 enabled)
WebShopApps_MatrixRate
ZigzagGlobal — 1 modules (1 enabled)
ZigzagGlobal_Zigzag

5Composer packages

Of 946 packages across both lock files, 796 are identical versions. The 53 skews are mostly patch-level housekeeping; the ones worth planning around are the majors below.

796
Identical name + version
53
Same package, different version
77
Daylesford only
20
Bamford only

All 53 version skews

PackageDaylesfordBamfordNote
adyen/adyen-magento2-expresscheckout2.4.72.4.6
adyen/module-payment9.15.09.18.0Minor drift
adyen/php-api-libraryv20.4.0v27.0.0Major API library gap — align before any shared payment work
amasty/base1.21.21.20.0
amasty/geoip1.7.31.7.1
amasty/label2.5.22.3.5
amasty/module-cross-linking1.4.31.4.2
amasty/module-hyva1.2.01.1.0
amasty/module-product-labels-hyva2.1.12.0.0
amasty/module-seo-toolkit2.6.02.5.3
amasty/module-special-promo2.16.12.13.0
amasty/module-store-locator3.6.13.5.0
amasty/module-store-locator-indexer1.2.21.2.1
amasty/module-xml-google-sitemap2.2.22.2.1
amasty/promo2.17.42.17.3
aws/aws-sdk-php3.381.03.381.1
develo/module-widgets2.5.32.5.5
elgentos/regenerate-catalog-urls0.3.50.3.7
fastly/magento21.2.2341.2.233
hyva-themes/magento2-default-theme1.3.171.3.15Minor drift
hyva-themes/magento2-ee-magento-customer-custom-attributes0.2.40.3.1
hyva-themes/magento2-ee-magento-gift-card0.3.00.5.0
hyva-themes/magento2-ee-magento-gift-wrapping0.1.10.2.1
hyva-themes/magento2-ee-magento-google-tag-manager0.1.00.2.2
hyva-themes/magento2-ee-magento-multiple-wishlist0.2.00.3.0
hyva-themes/magento2-ee-magento-reward0.1.00.2.1
hyva-themes/magento2-ee-magento-rma0.3.30.4.0
hyva-themes/magento2-hyva-checkout1.3.51.3.4
hyva-themes/magento2-hyva-enterprise-commerce0.5.10.6.1EE-compat drift
hyva-themes/magento2-theme-module1.3.171.3.15
illuminate/collectionsv12.32.1v12.21.0
illuminate/conditionablev12.32.1v12.21.0
illuminate/configv12.32.1v12.21.0
illuminate/contractsv12.32.1v12.21.0
illuminate/macroablev12.32.1v12.21.0
klaviyo/magento2-extension4.4.14.3.1Minor drift
klevu/module-categorynavigation2.11.02.12.1
klevu/module-msi1.4.01.5.0
magento/ece-tools2002.2.72002.2.6
magento/magento-cloud-components1.1.31.1.2
magento/magento-cloud-docker1.4.41.4.3
magento/magento-cloud-patches1.1.111.1.9
magento/module-company102.0.2-p2102.0.2-p1
magento/module-order-history-search100.5.2-p2100.5.2-p1
magento/module-requisition-list100.5.2-p2100.5.2-p1
magento/quality-patches1.1.711.1.68
mollie/magento22.47.02.46.0Minor drift
nesbot/carbon3.10.33.10.2
opensearch-project/opensearch-php2.4.62.6.0
symfony/dependency-injectionv6.4.38v7.4.10Symfony 6.4 vs 7.4 major
symfony/serializerv6.4.37v7.4.10Symfony 6.4 vs 7.4 major
symfony/translationv6.4.26v7.3.2Symfony 6.4 vs 7.3 major
symfony/yamlv5.4.45v7.4.11Symfony 5.4 vs 7.4 major

Daylesford-only packages (77)

amasty — 15
amasty/customer-group-assign (1.0.8)
amasty/gdpr-cookie (2.15.0)
amasty/gdpr-frontend-ui (1.5.1)
amasty/module-auto-add-promo-items-graphql (1.0.7)
amasty/module-banners-lite-hyva-compatibility (1.0.1)
amasty/module-free-gift-hyva (1.2.0)
amasty/module-gdpr (2.12.0)
amasty/module-gdpr-hyva (2.2.1)
amasty/module-label-cache-cleaner-for-qty-variable (1.0.0)
amasty/module-lib-fancybox (1.0.0)
amasty/module-special-promo-pro (2.12.1)
amasty/module-special-promotions-hyva (1.0.0)
amasty/module-store-locator-subscription-package (3.6.1)
amasty/module-storelocator-subscription-functionality (1.2.0)
amasty/product-labels-graphql (1.0.10)
magefan — 8
magefan/module-blog (2.12.3)
magefan/module-blog-author (2.12.3)
magefan/module-blog-extra (2.12.3)
magefan/module-blog-graph-ql (2.1.10)
magefan/module-blog-import (2.12.3)
magefan/module-blog-plus (2.12.3)
magefan/module-productwidget (2.0.14)
magefan/module-youtube-widget (2.0.19)
php-http — 5
php-http/client-common (2.7.2)
php-http/curl-client (2.3.3)
php-http/httplug (2.4.1)
php-http/message (1.16.2)
php-http/promise (1.3.1)
hyva-themes — 4
hyva-themes/hyva-ui (2.6.1)
hyva-themes/magento2-cms-tailwind-jit (1.2.2)
hyva-themes/magento2-luma-checkout (1.1.6)
hyva-themes/magento2-magefan-blog (1.0.5)
mpdf — 4
mpdf/mpdf (v8.2.6)
mpdf/psr-http-message-shim (v2.0.1)
mpdf/psr-log-aware-trait (v3.0.0)
mpdf/qrcode (v1.2.1)
yotpo — 4
yotpo/module-yotpo-combined (4.3.5)
yotpo/module-yotpo-core (4.3.4)
yotpo/module-yotpo-messaging (4.3.5)
yotpo/module-yotpo-reviews (4.3.4)
develo — 3
develo/magento2-module-basket-transfer (1.2.0)
develo/magento2-module-fastly-extended (1.3.0)
develo/magento2-module-restricted-hyva-checkout (1.3.2)
dotdigital — 3
dotdigital/dotdigital-magento2-extension (4.32.4)
dotdigital/dotdigital-magento2-extension-enterprise (1.10.7)
dotdigital/dotdigital-php (2.7.0)
symfony — 3
symfony/mailer (v6.4.34)
symfony/mime (v6.4.37)
symfony/options-resolver (v7.4.8)
mageplaza — 2
mageplaza/module-core (1.5.14)
mageplaza/module-cron-schedule (4.0.5)
markbaker — 2
markbaker/complex (3.0.2)
markbaker/matrix (3.0.1)
markshust — 2
markshust/magento2-module-disabletwofactorauth (2.0.1)
markshust/magento2-module-simpledata (2.0.2)
wyomind — 2
wyomind/framework (7.2.14)
wyomind/msibackorders (5.0.0)
yireo — 2
yireo/magento2-admin-simple-search-fields (1.0.8)
yireo/magento2-emailtester2 (1.7.9)
aheadworks — 1
aheadworks/module-event-tickets (1.5.12)
aureate_labs — 1
aureate_labs/redirector (1.0.1)
bsscommerce — 1
bsscommerce/magento-2-custom-product-attribute-export-extension (1.0.6)
clue — 1
clue/stream-filter (v1.7.0)
doctrine — 1
doctrine/lexer (3.0.1)
egulias — 1
egulias/email-validator (4.0.4)
eluceo — 1
eluceo/ical (2.15.0)
experius — 1
experius/module-wysiwygdownloads (1.2.7)
hybridauth — 1
hybridauth/hybridauth (v3.12.2)
maennchen — 1
maennchen/zipstream-php (3.2.0)
magmodules — 1
magmodules/magento2-channable (1.15.0)
mention-me — 1
mention-me/magento2-module (1.0.11)
myclabs — 1
myclabs/deep-copy (1.13.4)
nyholm — 1
nyholm/psr7 (1.8.2)
phpoffice — 1
phpoffice/phpspreadsheet (5.7.0)
setasign — 1
setasign/fpdi (v2.6.4)
stripe — 1
stripe/stripe-php (v17.6.0)
ulmod — 1
ulmod/module-ordercomment (2.4.5)

Bamford-only packages (20)

amasty — 12
amasty/feed (2.7.4)
amasty/gift-wrap (1.7.0)
amasty/module-free-gift-lite-package (1.6.4)
amasty/module-gift-wrap-hyva-compatibility (1.0.1)
amasty/module-mage-2.4.7-fix (1.0.1)
amasty/module-shop-by-base (3.0.2)
amasty/module-shop-by-brand (3.0.2)
amasty/module-shop-by-brand-graphql (1.1.2)
amasty/module-special-promotions-lite-package (2.12.2)
amasty/module-store-pickup-with-locator (2.9.0)
amasty/module-store-pickup-with-locator-msi (1.0.7)
amasty/sorting (2.12.2)
aheadworks — 5
aheadworks/module-core (1.1.0)
aheadworks/module-sarp-hyva (1.2.1)
aheadworks/module-sarp-notification (1.0.0)
aheadworks/module-sarp2-adyen (1.3.1)
aheadworks/module-sarp3 (3.22.0)
feedoptimise — 1
feedoptimise/magento2-catalog-export (1.2.42)
freento — 1
freento/emailslog (1.3.1)
hyva-themes — 1
hyva-themes/magento2-payment-icons (2.0.0)

6Custom code (app/code) & wider technical inventory

This is where consolidation effort actually lives. 226 distinct modules exist across the two sites; only 27 carry the same name on both. Headline LOC figures need context: most of Daylesford's bulk is the vendored Magestore POS suite, not bespoke build.

168
Daylesford modules · 889,965 LOC
85
Bamford modules · 337,516 LOC
27
Modules on both sites
141
Daylesford-only modules
58
Bamford-only modules

The Magestore caveat

Magestore (WebPOS, gift vouchers, reward points, click & collect, stock control) accounts for 642,335 LOC across 82 registered modules on Daylesford — none of it exists on Bamford. 15 of those modules are already disabled and a parked copy of the POS suite sits in broken_modules/. Excluding Magestore, Daylesford's custom footprint is ~248k LOC vs Bamford's ~338k — the gap is far smaller than raw totals suggest. Deciding Magestore's future (retire, isolate, or licence for a combined instance) should be an early audit workstream because it removes the single biggest block of one-sided code.

Beyond modules: the wider technical inventory

Counts across each site's app/code (composer-delivered extensions excluded; Daylesford's totals include the Magestore estate). These are the mechanisms that share one application stack after consolidation — the reason a merge is a structured alignment exercise, not a file copy: Magento loads a single DI configuration, plugin chain, event bus, cron schedule and database schema for all websites on an instance.

MechanismDaylesfordBamfordWhy it matters for consolidation
DI plugins (<plugin>)32167Interception density — every plugin is merge-review surface
DI preferences (class rewrites)54352Rewrites are the highest-risk collision class on a single DI stack
DI virtual types17521
Event observers20754Across 85 vs 30 events.xml files
Cron jobs238Background processing to co-exist on one schedule
Console commands3521Operational tooling
REST web API routes1484Daylesford's POS/fulfilment APIs dominate
GraphQL schema files81
db_schema.xml files3215Declarative schema to merge into one database
Setup/data patches14137One-off installers — replay order matters on merge

Custom LOC by vendor

VendorDaylesford LOCBamford LOCSplit
Magestore642,335
Xtento112,83585,218
Magezon163,441
Develo35,85933,991
Redbox39,530
Daylesford33,543
Tryzens4,19526,957
Auctane6,5696,569
MagicToolbox12,597
Magmodules6,308
Mageside2,5023,624
Bamford4,663
ZigzagGlobal3,582
WebShopApps2,430
Andev733
DaylesfordBamford

The 27 shared modules — how far have they drifted?

File-level comparison of same-named modules. Drift bar: green = identical files, amber = same file changed, site colours = files present on one side only. The Xtento rows are version skew of a commercial suite (an update reconciles them); the Develo rows are genuine fork drift to reconcile by hand.

ModuleIdenticalChanged Only DOnly BLOC DLOC BDrift
Develo_Setup02183955156
Xtento_OrderExport202651025,54525,154
Xtento_TrackingImport191820018,87418,838
Xtento_StockImport191610017,74917,713
Xtento_XtCore539002,6422,641
Develo_KlevuCustomDataSync1410601482
Xtento_ProductExport472161021,37020,872
Develo_Csp120283172
Develo_Styleguide1119114,2323,730
Develo_AdyenExpressCheckout86094901,660
Develo_Checkout29171244,2793,939
Develo_AdyenHyvaFix4211354492
Develo_IconMapping3210347344
Develo_Theme2614733,0262,789
Develo_Canonical9530836613
Develo_Customer107001,3291,314
Develo_WebsiteSwitcher153102,1381,858
Develo_CheckoutSuccessDataLayer6100192179
Develo_Sales14200681687
Develo_GoogleTagManager2Fix17110627495
Develo_KlevuSyncQueue353002,2522,307
Develo_KlevuSSR18100862862
Tryzens_PlpContentSlots480024,1954,224
Auctane_Api1290006,5696,569
Develo_AdyenIconFix14000138138
Develo_CategoryPath190001,1421,142
Develo_GradientSelector8000651651
identicalchangedonly Daylesfordonly Bamford
Largest Daylesford-only modules
ModuleFilesLOC
Magestore_Webpos1,299120,869
Magestore_Giftvoucher63768,862
Magestore_PurchaseOrderSuccess52553,845
Magestore_Rewardpoints34334,596
Magestore_FulfilSuccess38034,310
Magestore_Customercredit27629,282
Xtento_OrderImport23323,638
Magestore_SalesReport21421,637
Magestore_ClickAndCollectFrontend11419,744
Magestore_BranchRequest20718,196
Magestore_BarcodeSuccess21417,380
Magestore_DropshipSuccess21617,178
Redbox_Shopfinder13417,092
Magestore_SupplierSuccess15516,020
Magestore_OrderSuccess23615,641
Magestore_ReportSuccess18615,279
Magestore_Stocktaking17714,770
Magestore_TransferStock17214,074
Largest Bamford-only modules
ModuleFilesLOC
Magezon_Builder444108,038
Magezon_Core18827,550
Magezon_UiBuilder8718,067
Magezon_NinjaMenus929,786
Magmodules_AlternateHreflang946,308
Tryzens_Tradestate705,561
Tryzens_ClubMemberships674,924
Tryzens_ProductIcons644,105
Develo_FreeSamples493,897
Mageside_PromotionMessage553,624
ZigzagGlobal_Zigzag543,582
Bamford_TrustpilotIntegration272,656
WebShopApps_MatrixRate242,430
Tryzens_ClubStorefront412,342
Develo_Klaviyo201,193
Tryzens_KlevuStorefrontRecommendations111,129
Develo_RestrictedHyvaCheckout131,027
Develo_Fastly151,026

7Functional capability map

Every enabled non-core module on each site — 376 distinct modules — classified into business capability areas on evidence, not name-matching. All 376 classifications are high-confidence: purposes verified by direct code reading of the bespoke modules, composer package descriptions (376 of 376), and documented commercial product function for vendor packages. The interim 45-module spot-check list was closed out on 10 Jul by reading each flagged app/code module and verifying each commercial package individually. Per-site deliverables: functional-map-daylesford.csv · functional-map-bamford.csv. Expand any area for per-module purposes.

Capability areaDaylesfordBamfordAssessment
POS & in-store retail67divergentDaylesford only — largely disabled/parked; retire-or-isolate decision required
Frontend, theme & UX5050alignedBoth Hyvä; per-brand themes as expected
Content & CMS2016differsBoth — different tooling (Magefan blog on D vs Magezon builder on B)
Search & recommendations1820alignedBoth — same vendor (Klevu) with custom Develo sync layer; minor drift
Security & platform ops2113alignedBoth — aligned tooling (Sansec, CSP, Fastly, patching)
Checkout & basket1316differsBoth — same framework (Hyvä Checkout), different customisation sets; CartTransfer common to both
SEO & URLs1516differsBoth — similar toolkits, drifted versions
Payments, gift cards & credit1613differsBoth — same PSPs (Adyen/Mollie); gift cards & Stripe Daylesford-only; subscription billing Bamford-only
Pricing & promotions149differsBoth — Amasty family at different editions (Pro on D, Lite on B)
ERP, exports & feeds139differsBoth — same Xtento toolkit, different versions, endpoints and feed stacks
Subscriptions, loyalty & club411divergentCapability on both, different platforms — Aheadworks SARP + Club (B) vs custom Redbox (D)
Catalogue & product data85differsBoth — brand-specific additions each side
Customer accounts & compliance113differsBoth — D adds GDPR suite + age restriction; B adds purchase restrictions + waitlist
CRM, email & marketing76differsBoth Klaviyo at core; divergent extras (Yotpo, Mention-Me on D; Klaviyo extensions on B)
Analytics & tracking67alignedBoth — Yireo GTM2 aligned; VWO module on B
Shipping & delivery44divergentBoth — implemented differently; the deepest divergence (see §8)
Stores, pickup & locator63differsBoth — Amasty locator; pickup differs (Magestore on D vs Amasty on B)
Order management & ops43differsBoth — different operational scripts and order tooling
Territory, websites & routing24differsBoth — B has GeoIP routing + website switching; directly relevant to the multi-website future
Events & ticketing3D onlyDaylesford only (Aheadworks Event Tickets + custom)
POS & in-store retail — Daylesford 67 · Bamford 0
Develo_MagestoreOverrides [D] — Overrides for Magestore POS integration
Magestore_AdjustStock [D] — Magestore POS/inventory suite component
Magestore_Appadmin [D] — Magestore POS/inventory suite component
Magestore_BarcodeSuccess [D] — Magestore POS/inventory suite component
Magestore_BranchRequest [D] — Magestore POS/inventory suite component
Magestore_Core [D] — Magestore POS/inventory suite component
Magestore_CoreFrontend [D] — Magestore POS/inventory suite component
Magestore_Deli [D] — Magestore POS/inventory suite component
Magestore_DropshipSuccess [D] — Magestore POS/inventory suite component
Magestore_FixBug [D] — Magestore POS/inventory suite component
Magestore_FulfilReport [D] — Magestore POS/inventory suite component
Magestore_FulfilSuccess [D] — Magestore POS/inventory suite component
Magestore_Hyva [D] — Magestore POS/inventory suite component
Magestore_InventoryMovement [D] — Magestore POS/inventory suite component
Magestore_InventoryMovementAdminUi [D] — Magestore POS/inventory suite component
Magestore_InventoryMovementApi [D] — Magestore POS/inventory suite component
Magestore_Logger [D] — Magestore POS/inventory suite component
Magestore_LoggerApi [D] — Magestore POS/inventory suite component
Magestore_LoggerGraphQl [D] — Magestore POS/inventory suite component
Magestore_OrderSearchCustomize [D] — Magestore POS/inventory suite component
Magestore_OrderSuccess [D] — Magestore POS/inventory suite component
Magestore_Payment [D] — Magestore POS/inventory suite component
Magestore_PaymentOffline [D] — Magestore POS/inventory suite component
Magestore_PosReports [D] — Magestore POS/inventory suite component
Magestore_PurchaseOrderSuccess [D] — Magestore POS/inventory suite component
Magestore_ReportSuccess [D] — Magestore POS/inventory suite component
Magestore_SalesReport [D] — Magestore POS/inventory suite component
Magestore_SecondDisplay [D] — Magestore POS/inventory suite component
Magestore_StatusCustomization [D] — Magestore POS/inventory suite component
Magestore_Stocktaking [D] — Magestore POS/inventory suite component
Magestore_SupplierSuccess [D] — Magestore POS/inventory suite component
Magestore_TransferStock [D] — Magestore POS/inventory suite component
Magestore_Webpos [D] — Magestore POS/inventory suite component
Magestore_WebposAdyenTerminal [D] — Magestore POS/inventory suite component
Magestore_WebposAmastyRewards [D] — Magestore POS/inventory suite component
Magestore_WebposAuthorizenet [D] — Magestore POS/inventory suite component
Magestore_WebposClarity [D] — Magestore POS/inventory suite component
Magestore_WebposDojo [D] — Magestore POS/inventory suite component
Magestore_WebposDojoAdminUi [D] — Magestore POS/inventory suite component
Magestore_WebposIntegration [D] — Magestore POS/inventory suite component
Magestore_WebposMobile [D] — Magestore POS/inventory suite component
Magestore_WebposMoneris [D] — Magestore POS/inventory suite component
Magestore_WebposMonerisAdminUi [D] — Magestore POS/inventory suite component
Magestore_WebposMonerisApi [D] — Magestore POS/inventory suite component
Magestore_WebposMonerisGraphQl [D] — Magestore POS/inventory suite component
Magestore_WebposPaynl [D] — Magestore POS/inventory suite component
Magestore_WebposPaynlCore [D] — Magestore POS/inventory suite component
Magestore_WebposPaynlTerminal [D] — Magestore POS/inventory suite component
Magestore_WebposPaynlTerminalAdminUi [D] — Magestore POS/inventory suite component
Magestore_WebposPaynlTerminalApi [D] — Magestore POS/inventory suite component
Magestore_WebposPaynlTerminalGraphQl [D] — Magestore POS/inventory suite component
Magestore_WebposPerformance [D] — Magestore POS/inventory suite component
Magestore_WebposPerformanceAdminUi [D] — Magestore POS/inventory suite component
Magestore_WebposPerformanceApi [D] — Magestore POS/inventory suite component
Magestore_WebposPusher [D] — Magestore POS/inventory suite component
Magestore_WebposPusherAdminUi [D] — Magestore POS/inventory suite component
Magestore_WebposPusherApi [D] — Magestore POS/inventory suite component
Magestore_WebposSellPrePrintedGiftCard [D] — Magestore POS/inventory suite component
Magestore_WebposShipping [D] — POS shipping method
Magestore_WebposSquare [D] — Magestore POS/inventory suite component
Magestore_WebposSquareAdminUi [D] — Magestore POS/inventory suite component
Magestore_WebposSquareApi [D] — Magestore POS/inventory suite component
Magestore_WebposSquareGraphQl [D] — Magestore POS/inventory suite component
Magestore_WebposStripe [D] — Magestore POS/inventory suite component
Magestore_WebposStripeTerminal [D] — Magestore POS/inventory suite component
Magestore_WebposTyro [D] — Magestore POS/inventory suite component
Magestore_WebposZippay [D] — Magestore POS/inventory suite component
Frontend, theme & UX — Daylesford 50 · Bamford 50
Amasty_LibFancybox [D] — Lib Fancybox by Amasty
Amasty_LibSwiperJs [both] — Swiper JS frontend library
Develo_GradientSelector [both] — Gradient/colour selector UI
Develo_IconMapping [both] — Icon mapping UI
Develo_PortalHeader [D] — Portal header UI
Develo_Styleguide [both] — Hyvä design-system component library
Develo_Theme [both] — Theme view-models & block overrides (drifted fork)
Hyva_CmsTailwindJit [D] — Hyvä compatibility shim (cms tailwind jit)
Hyva_CompatModuleFallback [both] — Hyvä compatibility shim (compat module fallback)
Hyva_Email [both] — Hyvä compatibility shim (email)
Hyva_Enterprise [both] — Hyvä compatibility shim (enterprise)
Hyva_EnterpriseB2b [both] — Hyvä compatibility shim (enterprise b2b)
Hyva_GraphqlTokens [both] — Hyvä compatibility shim (graphql tokens)
Hyva_GraphqlViewModel [both] — Hyvä compatibility shim (graphql view model)
Hyva_KlaviyoReclaim [both] — Hyvä compatibility shim (klaviyo reclaim)
Hyva_LumaCheckout [D] — Hyvä compatibility shim (luma checkout)
Hyva_MagefanBlog [D] — Hyvä compatibility shim (magefan blog)
Hyva_MagentoAdvancedCheckout [both] — Hyvä compatibility shim (advanced checkout)
Hyva_MagentoBanner [both] — Hyvä compatibility shim (banner)
Hyva_MagentoCatalogEvent [both] — Hyvä compatibility shim (catalog event)
Hyva_MagentoCatalogPermissions [both] — Hyvä compatibility shim (catalog permissions)
Hyva_MagentoCompany [both] — Hyvä compatibility shim (company)
Hyva_MagentoCompanyCredit [both] — Hyvä compatibility shim (company credit)
Hyva_MagentoCustomerBalance [both] — Hyvä compatibility shim (customer balance)
Hyva_MagentoCustomerCustomAttributes [both] — Hyvä compatibility shim (customer custom attributes)
Hyva_MagentoGiftCard [both] — Hyvä compatibility shim (gift card)
Hyva_MagentoGiftRegistry [both] — Hyvä compatibility shim (gift registry)
Hyva_MagentoGiftWrapping [both] — Hyvä compatibility shim (gift wrapping)
Hyva_MagentoGoogleTagManager [both] — Hyvä compatibility shim (google tag manager)
Hyva_MagentoInvitation [both] — Hyvä compatibility shim (invitation)
Hyva_MagentoMultipleWishlist [both] — Hyvä compatibility shim (multiple wishlist)
Hyva_MagentoNegotiableQuote [both] — Hyvä compatibility shim (negotiable quote)
Hyva_MagentoOrderHistorySearch [both] — Hyvä compatibility shim (order history search)
Hyva_MagentoPurchaseOrder [both] — Hyvä compatibility shim (purchase order)
Hyva_MagentoQuickOrder [both] — Hyvä compatibility shim (quick order)
Hyva_MagentoReCaptchaCommerce [both] — Hyvä compatibility shim (re captcha commerce)
Hyva_MagentoReCaptchaCompany [both] — Hyvä compatibility shim (re captcha company)
Hyva_MagentoRequisitionList [both] — Hyvä compatibility shim (requisition list)
Hyva_MagentoReward [both] — Hyvä compatibility shim (reward)
Hyva_MagentoRma [both] — Hyvä compatibility shim (rma)
Hyva_MagentoStaging [both] — Hyvä compatibility shim (staging)
Hyva_MagentoTargetRule [both] — Hyvä compatibility shim (target rule)
Hyva_MagentoVersionsCms [both] — Hyvä compatibility shim (versions cms)
Hyva_MagentoWebsiteRestriction [both] — Hyvä compatibility shim (website restriction)
Hyva_MollieThemeBundle [both] — Hyvä compatibility shim (mollie theme bundle)
Hyva_OrderCancellationWebapi [both] — Hyvä compatibility shim (order cancellation webapi)
Hyva_PaymentIcons [B] — Hyvä compatibility shim (payment icons)
Hyva_Theme [both] — Hyvä compatibility shim (theme)
Hyva_ThemeFallback [both] — Hyvä compatibility shim (theme fallback)
Jajuma_PhosphorHyva [both] — This Magento 2 extension allows using Phosphor icons with Hyvä Themes
Magewirephp_Magewire [both] — Magewire reactive component framework (Hyvä checkout)
Tryzens_ExtendCms [B] — Body classes for transparent/adaptive headers
Tryzens_PdpSizeGuide [B] — PDP size guide
Tryzens_ProductIcons [B] — Product icon badges
Tryzens_ProductRolloverImage [B] — PLP rollover images
Content & CMS — Daylesford 20 · Bamford 16
Amasty_BannersLite [both] — Promo banners (Lite)
Amasty_BannersLiteHyvaCompatibility [D] — Banners Lite Hyvä compatibility
Bamford_ProductWidget [B] — Featured product widget
Bamford_VirtualShopping [B] — Virtual appointment/consultation booking
Daylesford_Footer [D] — Footer content installer (InstallData only)
Develo_AddRecipeLayout [D] — Applies recipe layout on product view pages
Develo_Cms [B] — CMS block/page customisations
Develo_CmsInlineStyleRemover [B] — CMS inline style sanitiser
Develo_FooterLinks [B] — Footer link management
Develo_SnowdogFixes [D] — Snowdog menu URL normalisation fixes
Develo_Widgets [both] — Reusable CMS widgets
Develo_WidgetsExt [D] — Widget extensions
Experius_WysiwygDownloads [D] — This module makes it possible to upload different filetypes inside the WYSIWYG-editor (Media Gallery). Extra filetypes are Word (doc, docm, docx, odt), Excel (csv, xml, xls, xlsx, ods), PDF (pdf), Compressed Folder (zip, tar)
Magefan_Blog [D] — Implements Blog functionality on Magento 2 store
Magefan_BlogAuthor [D] — Magefan Blog Author for Magento 2
Magefan_BlogExtra [D] — Magefan Blog Extra for Magento 2
Magefan_BlogGraphQl [D] — GrapQl for Magento 2 Blog extension by Magefan
Magefan_BlogPlus [D] — Implements Additional Blog functionality on Magento 2 store
Magefan_Community [both] — Magefan core — supports the blog suite
Magefan_WysiwygAdvanced [both] — TinyMCE WYSIWYG editor extensions
Magefan_YouTubeWidget [D] — YouTube video widget
Magezon_Builder [B] — Drag-and-drop page builder
Magezon_Core [B] — Magezon page builder core
Magezon_NinjaMenus [B] — Mega-menu builder with category import
Magezon_UiBuilder [B] — Form/UI builder framework (Magezon dependency)
Redbox_CategoryFooterCMSBlock [D] — CMS blocks in category footers
Redbox_InlineAdvt [D] — Inline advert tiles injected into product listings
Snowdog_Menu [both] — Provides powerful menu editor to replace category based menus in Magento 2
Tryzens_PlpContentSlots [both] — PLP content slots
Tryzens_ProductDynamicLinks [B] — Dynamic product links in content
Search & recommendations — Daylesford 18 · Bamford 20
Amasty_ShopbyBase [B] — Improved layered navigation base
Amasty_Sorting [B] — Improved Sorting by Amasty
Daylesford_KlevuAdditions [D] — Klevu data additions
Daylesford_KlevuBlog [D] — Blog content in Klevu search
Develo_KlevuCustomDataSync [both] — Custom attribute sync to Klevu
Develo_KlevuSSR [both] — Server-side rendered Klevu results
Develo_KlevuSyncQueue [both] — Batched Klevu product sync queue
Klevu_Addtocart [both] — Add-to-cart from Klevu search results
Klevu_ApiRequest [both] — Klevu HTTP client (Laminas)
Klevu_Categorynavigation [both] — Search that learns, generates sales. Fastest, most advanced cloud-based search, autocomplete, instant search
Klevu_Content [both] — Search that learns, generates sales. Fastest, most advanced cloud-based search, autocomplete, instant search
Klevu_FrontendJs [both] — Klevu Frontend JavaScript
Klevu_Logger [both] — Provides logger functionality to modules within Klevu Magento 2 suite
Klevu_Metadata [both] — Klevu Metadata
Klevu_Msi [both] — Klevu MSI stock support
Klevu_Recommendations [both] — Provides Smart Product recommendations functionality for shoppers
Klevu_Registry [both] — Klevu registry service
Klevu_Search [both] — Search that learns, generates sales. Fastest, most advanced cloud-based search, autocomplete, instant search
Klevu_Troubleshoot [both] — Klevu Troubleshoot module for trouble shooting data synchronisation issues
Tryzens_ExtendCatalog [B] — Sort label rename (Position → Recommended)
Tryzens_ExtendCatalogSearch [B] — Catalog search enhancements
Tryzens_KlevuStorefrontRecommendations [B] — Klevu recommendations placement
Yireo_AdminSimpleSearchFields [D] — Simple approach to add search fields to other modules
Security & platform ops — Daylesford 21 · Bamford 13
Amasty_Base [both] — Amasty shared framework/base
Amasty_CronScheduleList [both] — Cron Schedule List by Amasty
Amasty_Mage2.4.7Fix [B] — Amasty compatibility fixes for Magento 2.4.7
Aregowe_PolyShellProtection [both] — PolyShell file-upload vulnerability hardening
CtiDigital_Configurator [D] — Config-as-code installer tooling
Daylesford_Csp [D] — Content-Security-Policy configuration
Daylesford_Setup [D] — Install/config data patches
Develo_Csp [both] — CSP header fixes (GTM/Adyen)
Develo_Fastly [both] — Fastly bot detection for GeoIP redirects
Develo_HideCacheFlushBtns [D] — Admin cache-button guard
Develo_Optimization [B] — Performance/cache console tooling
Develo_Setup [both] — Install/config data patches (drifted fork)
Fastly_Cdn [both] — Fastly CDN/edge integration
IntegerNet_SansecWatch [both] — Sansec Watch integration for Magento 2
Magefan_AdminUserGuide [both] — Admin panel user guides.
Mageplaza_Core [D] — Mageplaza core — supports cron schedule module
Mageplaza_CronSchedule [D] — Magento 2 Cron Schedule Extension
Mageside_EmailPreview [D] — Admin email template preview tool
MarkShust_SimpleData [D] — The SimpleData module simplifies calling Magento data structures.
Redbox_Install [D] — Install/upgrade data-migration framework (CMS/store/config helpers)
Sansec_Shield [both] — Sansec runtime malware protection
Xtento_CustomSmtp [D] — SMTP transport for transactional email
Yireo_CspUtilities [both] — CSP utilities for various Magento modules
Checkout & basket — Daylesford 13 · Bamford 16
Amasty_GiftWrap [B] — Gift Wrap By Amasty
Amasty_GiftWrapHyva [B] — Amasty gift wrap Hyvä compatibility
Bamford_CartAttributes [B] — Quote-level custom attributes
Daylesford_Checkout [D] — Checkout form + CMS block injection + shipping info plugins
Daylesford_CheckoutGiftMessage [D] — Gift messaging at checkout
Develo_AmastyGiftWrapFix [B] — Amasty gift wrap compatibility fixes
Develo_Cart [D] — Cart page enhancements
Develo_CartTransfer [both] — Cross-site cart handoff: serialise → POST → rebuild with validation (live both sites)
Develo_Checkout [both] — Core checkout customisations (drifted fork on each site)
Develo_CheckoutFormModifier [B] — Dynamic checkout form field rules
Develo_FreeSamples [B] — Free samples engine: eligibility, auto-add, cleanup (10 cart plugins)
Develo_RestrictedHyvaCheckout [both] — Checkout restrictions (guest/membership rules)
Hyva_Checkout [both] — Hyvä Checkout framework
Hyva_CheckoutLoqateApi [both] — Loqate address validation for Hyvä Checkout
Hyva_EnterpriseCheckout [both] — Hyvä Checkout EE compatibility
Hyva_EnterpriseCheckoutB2b [both] — Hyvä Checkout B2B compatibility
Loqate_ApiIntegration [both] — Loqate address lookup/validation API
Redbox_CartQty [D] — Cart quantity & wishlist behaviour
Tryzens_ExtendCheckout [B] — Checkout field placeholders + Klaviyo newsletter checkbox
Tryzens_ExtendQuote [B] — Coupon management override
Ulmod_OrderComment [D] — Order Comment for Magento 2 by Ulmod
SEO & URLs — Daylesford 15 · Bamford 16
Amasty_CrossLinks [both] — Automatic SEO cross-linking
Amasty_Meta [both] — Meta tag templates
Amasty_OpenGraphTags [both] — Open Graph tags
Amasty_RegenerateUrlRewrites [B] — Regenerate Url Rewrites by Amasty
Amasty_SeoHtmlSitemap [both] — HTML sitemap
Amasty_SeoRichData [both] — Structured data / rich snippets
Amasty_SeoSingleUrl [both] — Canonical single URL for layered navigation
Amasty_SeoToolKit [both] — SEO Toolkit Pro by Amasty
Amasty_SeoToolkitLite [both] — SEO Toolkit Lite by Amasty
Amasty_SeoToolkitLiteHyva [B] — Seo Toolkit Lite Hyva by Amasty
Amasty_XmlSitemap [both] — Extended XML sitemap
AureateLabs_Redirector [D] — Bulk URL rewrites via CSV
Develo_AlternateHreflang [B] — Hreflang overrides
Develo_Canonical [both] — Canonical URL management
Develo_CategoryPath [both] — Category path/breadcrumb URLs
Develo_ProductRedirect [D] — Redirects disabled products to parent categories
Develo_SEOImprove [D] — Social meta + hreflang tags
Elgentos_RegenerateCatalogUrls [both] — Regenerate Catalog URL Rewrites (products, categories, cms pages)
Magmodules_AlternateHreflang [B] — Hreflang tags across websites
Payments, gift cards & credit — Daylesford 16 · Bamford 13
Adyen_ExpressCheckout [both] — Adyen express payments (Apple/Google Pay)
Adyen_Hyva [both] — Adyen Hyvä checkout integration
Adyen_Payment [both] — Official Magento2 Plugin to connect to Payment Service Provider Adyen.
Daylesford_AdyenGiftcard [D] — Adyen gift card processing
Develo_AdyenExpressCheckout [B] — Adyen Apple/Google Pay express (enabled B, disabled D)
Develo_AdyenHyvaFix [D] — Adyen/Hyvä compatibility fixes
Develo_AdyenIconFix [both] — Adyen payment icon fixes
Develo_AdyenPendingPaymentFix [D] — Adyen pending-payment state fix
Mollie_HyvaCompatibility [both] — Hyvä Themes Compatibility module for Mollie Payments
Mollie_Payment [both] — Mollie payment gateway
PayPal_Braintree [both] — Braintree payment gateway (bundled)
PayPal_BraintreeCustomerBalance [both] — Braintree + customer balance compatibility
PayPal_BraintreeGiftCardAccount [both] — Braintree + gift card account compatibility
PayPal_BraintreeGiftWrapping [both] — Braintree + gift wrapping compatibility
PayPal_BraintreeGraphQl [both] — Braintree GraphQL API
Redbox_AdyenPayByLinkFrontend [D] — Adyen Pay-by-Link availability control
Redbox_GivexGiftCard [D] — Givex gift card integration
Tryzens_ExtendAdyenPayment [B] — Adyen payment method customisation
Pricing & promotions — Daylesford 14 · Bamford 9
Amasty_Conditions [both] — Extended cart price rule conditions
Amasty_FreeGiftLite [B] — Free gift promotions (Lite)
Amasty_Label [both] — Product Labels by Amasty
Amasty_LabelCacheCleanerForQtyVariable [D] — Label Cache Cleaner for Qty Variable by Amasty
Amasty_LabelGraphQl [D] — Product labels GraphQL API
Amasty_ProductLabelsHyva [both] — Product Labels compatibility with Hyva Theme
Amasty_Promo [both] — Free Gift by Amasty
Amasty_PromoGraphql [D] — Promo items GraphQL API
Amasty_PromoHyvaCompatibility [D] — Amasty promo Hyvä compatibility
Amasty_Rgrid [both] — Extended promo rules grid (admin)
Amasty_Rules [both] — Special promotions rule engine
Amasty_RulesPro [D] — Special promotions Pro rule engine
Amasty_SpecialPromotionsHyva [D] — Special Promotions Hyva By Amasty
Amasty_SpecialPromotionsLite [B] — Special promotions rules (Lite)
Develo_AmastyLabelFix [D] — Amasty label rendering fix (custom icons)
Mageside_PromotionMessage [B] — Conditional promo banners from cart rules
Redbox_ProductLabels [D] — Product label images & display
ERP, exports & feeds — Daylesford 13 · Bamford 9
Amasty_Feed [B] — Product Feed by Amasty
Auctane_Api [both] — ShipStation order sync + shipstation carrier
Bss_CustomProductAttributeExport [D] — Product attribute export tool
Daylesford_StreetwiseIntegration [D] — Streetwise POS/fulfilment sync
Develo_DaylesfordCustomCode [D] — Export area-code plugin (misc custom code)
Feedoptimise_CatalogExport [B] — Exports catalog data, from Magento2 stores, which is used to generate product feeds.
FireGento_FastSimpleImport [D] — Fast product/data import library
Magefan_BlogImport [D] — Magefan Blog Import for Magento 2
Magmodules_Channable [D] — Channable integration for Magento 2
Xtento_OrderExport [both] — Order export to fulfilment (versions drifted)
Xtento_OrderImport [D] — Order import (D only)
Xtento_ProductExport [both] — Product data export
Xtento_StockImport [both] — Stock level import
Xtento_TrackingImport [both] — Carrier tracking import
Xtento_XtCore [both] — Xtento shared core
ZigzagGlobal_Zigzag [B] — ZigZag returns platform integration
Subscriptions, loyalty & club — Daylesford 4 · Bamford 11
Aheadworks_Core [B] — Aheadworks framework core — supports the SARP suite (B)
Aheadworks_Sarp2 [B] — SARP2 subscriptions & recurring payments
Aheadworks_Sarp2Adyen [B] — Sarp2 integration with adyen/module-payment
Aheadworks_Sarp2Hyva [B] — SARP2 Hyvä compatibility
Aheadworks_SarpNotifications [B] — SARP subscription notifications
Daylesford_CustomOrders [D] — Recurring/custom order management
Develo_AheadworksSarpFix [B] — SARP checkout/Adyen fixes
Develo_AmastyPromoSarpFix [B] — Amasty promo + SARP compatibility
MentionMe_MentionMe [D] — Mention Me referral platform
Redbox_HyvaSubscribeAtCheckout [D] — Hyvä UI for subscribe-at-checkout
Redbox_SubscribeAtCheckout [D] — Custom subscribe-at-checkout
Tryzens_Club [B] — Club programme core
Tryzens_ClubMemberships [B] — Club membership management
Tryzens_ClubStorefront [B] — Club storefront (BamfordClub)
Tryzens_ExtendAheadworksSarp2Adyen [B] — SARP2 + Adyen recurring billing glue
Catalogue & product data — Daylesford 8 · Bamford 5
Amasty_ShopbyBrand [B] — Shop by Brand by Amasty
Amasty_ShopbyBrandGraphQl [B] — Shop by Brand Graphql By Amasty
Bamford_CustomProductStatus [B] — Custom product salability status
Bamford_LinkProductVariations [B] — Link configurable variations
Bamford_Waitlist [B] — Out-of-stock waitlist
Daylesford_Catalog [D] — Product labels, event data, mega-menu integration
Develo_CategoryBannerImage [D] — Banner image attribute on categories
Develo_InventoryProblemFix [D] — Inventory/MSI fix
Develo_ProductAttribute [D] — Custom product attributes
Magefan_ProductWidget [D] — Advanced Product Widget for Magento 2
Redbox_CustomProductAlert [D] — Back-in-stock/price product alert customisations
Wyomind_Framework [D] — Wyomind core — supports MSI backorders
Wyomind_MsiBackorders [D] — MSI backorder management
Customer accounts & compliance — Daylesford 11 · Bamford 3
Amasty_Gdpr [D] — GDPR by Amasty
Amasty_GdprCookie [D] — Cookie Consent by Amasty
Amasty_GdprFrontendUi [D] — Cookie Consent Js by Amasty
Amasty_GdprHyva [D] — Gdpr Hyva by Amasty
Amasty_GroupAssign [D] — Automatic customer-group assignment
Andev_Productrestrict [B] — Purchase eligibility restrictions
Daylesford_AgeRestriction [D] — Age-gated products (alcohol)
Daylesford_Wishlist [D] — Custom wishlist features
Develo_Customer [both] — Customer account page customisations
Develo_FraudList [D] — Custom fraud blocklist
Redbox_CustomerPreferences [D] — Customer preference attributes
Redbox_SalesRestriction [D] — Purchase restrictions by segment/product
Tryzens_Tradestate [B] — Trade/account state handling
CRM, email & marketing — Daylesford 7 · Bamford 6
Bamford_TrustpilotIntegration [B] — Trustpilot review feed/invitations
Daylesford_TrustpilotIntegration [D] — Trustpilot review invitations
Develo_Emails [D] — Email template customisations
Develo_Klaviyo [B] — Klaviyo consent + data sync customisation
Freento_EmailsLog [B] — Catches all emails sent from a Magento store and additionally logs them to the database.
Klaviyo_Reclaim [both] — Klaviyo abandoned-cart reclaim
Tryzens_ExtendKlaviyo [B] — Klaviyo extension
Tryzens_NewsletterWidget [B] — Newsletter signup widget
Yireo_EmailTester2 [D] — Preview transactional emails and test send them in your backend
Yotpo_Core [D] — Yotpo reviews platform core
Yotpo_Reviews [D] — Yotpo product reviews
Yotpo_SmsBump [D] — Yotpo SMS marketing (SMSBump)
Analytics & tracking — Daylesford 6 · Bamford 7
Aem_Rum [both] — Adobe Real User Monitoring beacon
Daylesford_GoogleTagManager [D] — GTM data layer customisations
Develo_CheckoutSuccessDataLayer [both] — GA4 data layer on order success
Develo_GoogleTagManager2Fix [both] — GTM event fixes on Hyvä
Develo_VWOScripts [B] — Visual Website Optimizer A/B scripts
Tryzens_RakutenAffiliates [B] — Rakuten affiliate tracking
Yireo_GoogleTagManager2 [both] — Add Google Tag Manager to Magento
Yireo_GoogleTagManager2HyvaCheckout [both] — GTM events on Hyvä Checkout
Shipping & delivery — Daylesford 4 · Bamford 4
Develo_DeliverySchedule [D] — Hyvä/Magewire delivery calendar, method & store-pickup selectors
Redbox_DeliveryByCalendar [D] — Bespoke multishipment carrier: day-of-week pricing, cut-offs, availability schedules
Redbox_ProductByAvailabilitySchedule [D] — Product availability windows for scheduled delivery
Redbox_XtentoOrderImportStorePickup [D] — Store-pickup handling for Xtento order import
Tryzens_DHLFlatRate [B] — DHL flat-rate carrier
Tryzens_DPDFlatRate [B] — DPD flat-rate carrier
Tryzens_ExtendMagentoInventoryShipping [B] — Shipment source-assignment logic
WebShopApps_MatrixRate [B] — Weight/destination matrix rates carrier (disabled)
Stores, pickup & locator — Daylesford 6 · Bamford 3
Amasty_StoreLocatorSubscriptionPackage [D] — Store Locator Subscription Package by Amasty
Amasty_Storelocator [both] — Store Locator by Amasty
Amasty_StorelocatorHyva [both] — Store Locator Hyva Compatibility by Amasty
Amasty_StorelocatorIndexer [both] — Store Locator Indexer by Amasty
Amasty_StorelocatorSubscriptionFunctionality [D] — Store Locator Subscription Functionality by Amasty
Magestore_ClickAndCollectCustomization [D] — C&C customisations
Order management & ops — Daylesford 4 · Bamford 3
Amasty_SalesRuleWizard [both] — Sales Rule Wizard by Amasty
Daylesford_OrderManagementRestriction [D] — Order management restrictions
Develo_AdminOrderFlag [D] — Admin order flagging
Develo_Sales [both] — Order item image propagation quote→order
Develo_UpdateOrderStatus [B] — Batch order status console tooling
Territory, websites & routing — Daylesford 2 · Bamford 4
Amasty_Geoip [both] — GeoIP data for redirects
Bamford_Website [B] — Multi-website setup/url rewrite management
Develo_GeoIpRedirectBypass [B] — GeoIP redirect bypass for club store
Develo_WebsiteSwitcher [both] — Cross-website context switch preserving product/search state
Events & ticketing — Daylesford 3 · Bamford 0
Aheadworks_EventTickets [D] — Event Tickets module by Aheadworks
Daylesford_EventTicketsHyva [D] — Event tickets Hyvä compatibility
Daylesford_Events [D] — Farm events integration

8Delivery & checkout — the real divergence

Zoe's notes called this the reason two instances exist, and the code confirms it. The two sites model fulfilment in fundamentally different ways; almost everything else is shared vendors at drifted versions.

Daylesford — date-based fresh-food delivery
  • Redbox_DeliveryByCalendar — bespoke multishipment carrier: per-day-of-week pricing (Mon–Sun rates), 17:30 order cut-off, 30/90-day lead-time thresholds, availability schedules with postcode & product rules.
  • Schema-level footprintcart_item_delivery_date columns on quote & order items, shipment grouping (cart_item_shipment_number), pickup dates on the order grid: delivery dates are first-class data.
  • Develo_DeliverySchedule — new Magewire calendar/method/store-pickup components for Hyvä checkout, with pre-place validation and cart-state observers.
  • ShipStation carrier (Auctane_Api) + Magestore Click & Collect (carrier registered, inactive by default).
  • Subscriptions — custom Redbox_SubscribeAtCheckout (+ Hyvä variant).
  • 46 modules touch checkout/quote/sales; gift messaging, age restriction, event tickets in the mix.
Bamford — flat-rate simplicity
  • Tryzens_DHLFlatRate + Tryzens_DPDFlatRate — two active carriers returning a single configured price each. No delivery dates anywhere in the codebase.
  • WebShopApps_MatrixRate — weight/destination matrix carrier present but disabled.
  • Amasty Store Pickup + Locator (composer) for click & collect.
  • Subscriptions — Aheadworks SARP2/SARP3 suite wired into Adyen (recurring billing), plus Tryzens Club membership modules and a dedicated BamfordClub store context.
  • Develo_FreeSamples — samples engine with eligibility rules and 10 cart plugins/preferences.
  • ~17 checkout/quote/sales plugins across 6 modules — a much lighter touch than Daylesford.

Why this matters for a shared basket

A combined basket must answer questions neither site answers alone: what happens when a basket holds a fresh item needing a delivery date and cold-chain slot next to a flat-rate skincare item (or a subscription item)? That is a multi-shipment / split-consignment checkout design problem — the single hardest piece of custom work in any option, independent of whether the sites consolidate.

The in-flight Daylesford delivery-matrix rebuild (standard 3–5 day shipping for ambient + improved fresh delivery) is the convergence lever: done with consolidation in mind, it can be built as configuration/shared modules that both brands use, collapsing this red area to amber.

9Integration map

Vendor stacks are largely the same brands on both sites — the divergence is in the long tail of brand-specific services. Items in bold carry commercial/contractual weight in a consolidation.

CategoryBoth sitesDaylesford onlyBamford only
PaymentsAdyen (+ Hyvä checkout, Apple/Google Pay express) · Mollie (enabled both, transitive dep — live usage needs env check)Stripe (lib) · Adyen giftcard module · Givex gift cards (Redbox)SARP2-Adyen recurring billing · Tryzens Adyen extensions
Subscriptions & loyaltyRedbox Subscribe-at-Checkout (custom)Aheadworks SARP2 + SARP3 · Tryzens Club/Memberships · BamfordClub store
ERP / exports / 3PLXtento suite: OrderExport, ProductExport, StockImport, TrackingImport (both sides, drifted versions)Xtento_OrderImport · ShipStation (Auctane) · Streetwise POS sync · store-pickup order importBamford_CancelOrdersCustom · ZigzagGlobal returns
Email / CRMKlaviyo (+ Hyvä reclaim)Yotpo (reviews/SMS — enabled) · Mention-Me referrals · dotdigital (installed, disabled) · Develo_EmailsDevelo_Klaviyo + Tryzens Klaviyo extensions · Freento email log
Search & merchKlevu full suite + Develo sync/SSR modules (drifted copies) · OpenSearch 2Daylesford_KlevuAdditions · KlevuBlogTryzens Klevu storefront recommendations · Amasty sorting & shop-by-brand
Feeds / analyticsYireo GTM2 (+ Hyvä checkout events) · checkout data-layer modulesChannable feed · Daylesford_GoogleTagManagerAmasty Feed · FeedOptimise export · Rakuten affiliates · VWO scripts module
Address / tax / fraudLoqate via Hyvä Checkout (both) · no Avalara/Vertex/Signifyd anywhereDevelo_FraudList (custom blocklist)
Stores / pickupAmasty Store Locator (+ Hyvä)Redbox_Shopfinder · Magestore Click & CollectAmasty Store Pickup with Locator (+ MSI)
Content / CMSSnowdog menus · Hyvä UI toolkitsMagefan blog suite · event tickets (Aheadworks) · MagicZoom galleriesMagezon page builder (108k LOC) · NinjaMenus · Bamford VirtualShopping/Waitlist
POS / in-storeMagestore WebPOS suite (67 enabled modules; POS terminals, vouchers, stock)

Enablement verified against each site's app/etc/config.php, not just composer presence.

10Already in the toolbox: Develo_CartTransfer

Both sites already run a Develo-built cross-site cart handoff (Daylesford via develo/magento2-module-basket-transfer v1.2.0; Bamford in app/code; enabled on both). It was built for moving a basket between two separate Magento websites — exactly the interim-option territory Rebecca & Ian discussed.

1 · Initiate (source site)Customer hits carttransfer/index/initiate; cart is serialised to JSON with buy-requests & quantities.
2 · Hand offAuto-submitting form POSTs the payload cross-domain to the destination site (CSRF-aware, no shared session needed).
3 · Rebuild (destination)Each SKU is validated — website assignment, visibility, stock — and added to a fresh quote in the destination store context.
4 · FeedbackCustomer lands on the destination basket with per-item warnings for anything that couldn't transfer.
What it gives us today
  • A proven, secure cross-domain transfer pattern between the two instances
  • Correct store-context pricing on arrival
  • Per-item validation with graceful degradation
  • Deployed, enabled, and maintained on both codebases
Gaps vs a true shared basket
  • Replaces the destination cart rather than merging into it
  • One-way per hop; no live two-way sync
  • Requires the SKU to exist & be salable on the destination website
  • Checkout remains separate — one order per site, no combined promotions or totals
  • No shared customer session/login across the two domains

Also relevant: Bamford's Develo_WebsiteSwitcher already preserves context when customers move between websites within one instance — a pattern that maps directly onto the post-consolidation multi-website world.

11Consolidation effort matrix

Repo-evidence ratings of what single-instance consolidation would take, per domain, on the agreed complexity scale (Low = same or near-identical · Medium = similar but needs adjustment · High = materially different custom logic · Very High = deep checkout/shipping/order/integration divergence).

DomainRAGEffortEvidence & consolidation implication
Core platform & hostingGREENLOWIdentical version, cloud, DB, search. Align Redis 6→7.2, decide RabbitMQ, merge patch sets.
Frontend & themeGREENLOW–MEDBoth Hyvä + Hyvä Checkout. Per-brand themes are the normal multi-website pattern; purge two legacy themes; close small version skews.
Composer & shared modulesAMBERMEDIUM53 version skews (Symfony & Adyen lib majors); reconcile 27 drifted shared modules — Xtento via upgrade, Develo forks by hand.
Payments & legal entitiesAMBERMEDIUMSame PSPs (Adyen/Mollie) but per-entity merchant accounts, Stripe/Givex on D, SARP billing on B. Needs per-website payment design + finance sign-off.
Delivery & fulfilmentREDVERY HIGHOpposite models (date-based multishipment vs flat rate) with schema-level differences. The delivery-matrix rebuild is the convergence lever — build it multi-brand-aware.
Subscriptions, club & loyaltyREDHIGHSARP + Club (B) vs custom subscribe-at-checkout (D). Unify paradigm or scope per-website coexistence; touches recurring billing.
Magestore POS estateAMBERMEDIUM642k LOC, Daylesford-only, partly disabled. Retire/isolate/licence decision shrinks the merge surface dramatically — do this first.
ERP / exports / feedsAMBERMEDIUMSame Xtento toolkit both sides but different endpoints (ShipStation/Streetwise vs Zigzag/FeedOptimise). Rewire per-website on one instance.
Catalogue, data & config (DB)TBCUNKNOWNWebsites/store views, tax, promotions, customer & order data live in the databases, not the repos. Needs the full audit + Adobe health checks.

12Consolidation decision register & risk register

Decision points, not solutions: what later solution design must resolve, with the audit's probable direction and where client input is required. Risks carry likelihood, impact and the mitigating next action.

Decision register

Decision pointSituationProbable directionConfidenceClient input?
Delivery & fulfilment modelBoth, materially differentReplace with new shared implementation — the planned delivery-matrix rebuild, designed multi-brand from day oneMediumYes — service levels per brand
Magestore POS estate (82 modules, D)Daylesford only; 15 disabled, copies parked in broken_modules/Probably retire or isolate; licence position on a merged instance unverifiedLow–MedYes — in-store operations dependency
Subscriptions platformSARP2/3 + Adyen billing (B) vs custom Redbox subscribe-at-checkout (D)Merge onto SARP (broader, maintained, Adyen-integrated); migrate/retire Redbox variantMediumYes — does Daylesford need subscription parity?
Club & membershipsBamford only (Tryzens Club + BamfordClub store)Keep Bamford implementation, scoped per websiteHighNo
Gift cardsGivex + Adyen giftcard (D) vs none (B)Keep Daylesford implementation; decide brand availabilityMediumYes — cross-brand gift card policy
Free samples engineBamford only (Develo_FreeSamples)Keep Bamford implementation; optionally extend to DaylesfordHighOptional
Shared Develo modules (Checkout, Theme, Styleguide…)Both, drifted forks (17/29 files changed in Develo_Checkout)Merge features from both into single composer-distributed packagesHighNo
Xtento export/import suiteBoth, different versions + profilesAlign to one version; keep per-site export profilesHighNo
Content toolingMagefan blog suite (D) vs Magezon page builder (B)Client decision — unify or keep per-brand; licence check for Magezon on merged instanceLow–MedYes
Reviews & referral stackYotpo enabled + Trustpilot custom (D) vs Trustpilot custom (B); Mention-Me (D)Merge Trustpilot implementations; client decision on Yotpo/Mention-Me scopeMediumYes
Product feedsChannable (D) vs Amasty Feed + FeedOptimise (B)Choose one feed stack post-mergeMediumYes — marketing dependency
dotdigital (installed, disabled on D)Dead weightRetire/removeHighNo
Website/Store topology for shared basketNative carts are Website-scopedSame-Website-different-Stores maximises basket sharing but shares Website-scoped settings; needs config-parity validation (see risks)Low — needs designYes — with Develo architecture lead

Risk register

RiskLikelihoodImpactMitigation / next action
Global (non-website-scoped) customisations clash on one DI stackHighHigh543 vs 52 class preferences must co-exist; full DI collision review is a core consolidation-phase task
Website-scoped settings conflict under a same-Website cart modelMediumHighValidate which settings are brand-specific today and whether they move to Store/Store View scope
Mixed-basket fulfilment design (fresh + date-based + flat-rate + subscription in one checkout)HighHighThe single hardest design problem in any route — prototype early in the next phase
Delivery-matrix rebuild proceeds without multi-brand designMediumHighFold consolidation-awareness into that project's brief now — it is the convergence lever
DB-resident config & catalogue overlap unknown (repo-only audit)HighMediumAdobe health checks + environment/config access next; estimates carry this uncertainty
Subscription billing continuity through migration (SARP + Adyen tokens)MediumHighRecurring revenue at risk; plan token/mandate migration explicitly
Composer conflicts: Symfony 6.4 vs 7.4, Adyen PHP lib v20 vs v27CertainMediumAlign dependency majors on both sites before any merge attempt
Legal entity & financial reporting split on one instanceMediumHighPer-website entity mapping + finance sign-off; reporting via mapping logic (per feasibility notes)
Magestore/Magezon/Aheadworks/Amasty licensing on a merged instanceMediumMediumVendor licence review before costing consolidation
Cross-territory basket expectation creepMediumMediumScope guard: shared basket within territory only — cross-territory explicitly not recommended
SEO/domain risk during consolidationMediumMediumPhased migration with URL preservation; both sites already run mature SEO toolkits
Release cadence coupling post-mergeLowMediumSingle pipeline governance; both teams already share one agency and deployment tooling

13The three routes & recommended next phase

The three routes as tabled to the client on DFD-749 (25 Feb), now read against the audit evidence.

Route 1 — Keep both instances; improve the cross-brand experience

Shared accounts, clearer cross-navigation, better cross-selling journeys — customers still check out separately per brand. Lowest risk and cost, but does not deliver the original ask. Audit evidence: both sites already run content-slot tooling and the CartTransfer handoff, so this route starts further ahead than assumed and could ship improvements quickly as a companion to Route 3.

Route 2 — Keep both instances; build a middleware shared basket

Basket state management, split payments, order routing, reporting reconciliation, refunds and stock sync across two systems. Technically possible but complex, expensive, and a distributed-commerce layer Develo would own indefinitely. Audit evidence: Develo_CartTransfer (live on both sites) is a partial foundation — but its gaps (one-way, replace-not-merge, separate checkouts) are exactly the expensive part, and that spend is largely throwaway post-consolidation.

Route 3 — Consolidate onto one instance, phased recommended

Phase one: consolidation only — one instance, aligned codebases, rationalised modules and integrations, baskets still scoped per website. Phase two: shared basket (within territory) once ERP, warehouse, reporting and stock considerations are aligned. Keeps everything inside Magento's intended multi-website architecture and avoids coupling consolidation and shared-basket complexity into one high-risk release. The audit evidence strengthens this route versus the February assessment: same version, cloud, frontend generation, checkout framework and core vendors — the divergence is concentrated, nameable and largely decision-driven (see §12). Natural landing: the March '27 Magento renewal.

The Website / Store architecture decision (Route 3, Phase 2)

Magento carts are scoped to a Website. Sharing a basket is most straightforward with both brands under one Website as separate Stores — but that shares Website-scoped settings (certain payment, tax, pricing and customer configuration), so a config-parity exercise must validate which of today's brand-specific settings can move to Store/Store View scope. The alternative — separate Websites with shared customers — keeps config isolation but makes the basket a heavier custom build. This is the central design decision of the shared-basket phase; the audit flags it, the next phase resolves it.

Cross-territory basket persistence adds significant complexity and is not recommended — shared basket is scoped within territory.

14Coverage against the approved audit plan

The 64-hour audit & discovery scope was approved on 21 May 2026. Mapping of each quoted task to this report. All quoted tasks are now delivered; the report is ready for playback.

Quoted taskHoursWhere coveredStatus
Define audit scope, assumptions and deliverable structure4§2 — scope, assumptions, exclusions and method; report follows the agreed deliverable structureDelivered
Full technical inventory — Bamford codebase8§3–§6 + §9 — registry, composer, custom code, DI/observers/cron/API/patch counts, integrationsDelivered
Full technical inventory — Daylesford codebase8§3–§6 + §9 — as above, including Magestore estate and broken_modules analysisDelivered
Map Bamford modules to functional capability areas6§7 + functional-map-bamford.csv — evidence-based, spot-check completed, all classifications high-confidenceDelivered
Map Daylesford modules to functional capability areas6§7 + functional-map-daylesford.csv — as above, incl. the Magestore estateDelivered
Cross-compare platforms across functional areas10§4–§9 — overlap/divergence per area, drift measurement of the 27 shared modules, integration mapDelivered
Identify key divergence areas and consolidation challenges6§8 (delivery/checkout deep-dive) + §11 (effort matrix on the agreed Low→Very High scale)Delivered
Produce consolidation decision and risk register4§12 — 13 decision points with probable directions; 12 risks with likelihood/impact/mitigationDelivered
Compile final audit report and internal engineering review12This document, reviewed via an independent verification pass: full recount of every quantitative claim (PHP-parsed registries as ground truth) + adversarial re-verification of 15 code-level factual claims. Corrections applied: Bamford registry 720/715 (a dotted module name, Amasty_Mage2.4.7Fix, missed by the original parser), FreeSamples plugin count 10 (not 11), Mollie marked transitive-but-enabledDelivered
Total64