Architecture¶
This page documents the Zwerfkei system architecture in two stages: the current (legacy) situation and the target architecture. A full integration overview is included at the bottom.
Current Architecture¶
The current platform is built around Zwerfkei Backoffice (legacy), a legacy monolithic application. It connects to Microsoft Dynamics Navision as the ERP and uses True Object Storage for file storage.
End of support
Microsoft Navision 2018 reaches end-of-support in 2026. Migration to the new architecture is required before that date.
C4Container
title Current Architecture - Zwerfkei
Person(employee, "Employee", "Internal user of Zwerfkei")
Person(customer, "Customer", "External customer")
System_Boundary(zwerfkei, "Zwerfkei Systems") {
Container(old, "Zwerfkei Backoffice (legacy)", "Legacy application", "Central application for all business processes")
Container(customerportal, "Zwerfkei Klant", "Customer portal", "Portal for customers")
ContainerDb(olddb, "Zwerfkei Backoffice (legacy) Database", "MySQL", "Central database")
}
System_Ext(navision, "Microsoft Navision 2018", "ERP system (end-of-support 2026)")
System_Ext(storage, "True Object Storage", "S3-compatible storage")
Rel(employee, old, "Uses")
Rel(customer, customerportal, "Uses")
Rel(customer, old, "Uses (webshop)")
Rel(old, olddb, "Reads/writes")
Rel(old, navision, "Synchronises")
Rel(old, storage, "File storage")
Rel(customerportal, old, "API calls")
Rel(customerportal, olddb, "Reads")
Notes
- Zwerfkei Backoffice (legacy) is the central system communicating with all other components.
- Zwerfkei Klant is a separate customer portal connecting to Zwerfkei Backoffice (legacy) and directly to the database.
- Microsoft 365 (calendar integration) has already been phased out.
Target Architecture¶
The target architecture introduces a new Zwerfkei API, Zwerfkei Website and Zwerfkei CMS alongside the existing legacy systems. The legacy environment remains operational during the transition.
High-level flowchart of all systems, services and data flows in the target architecture.
graph TD
subgraph Actors["Users & Actors"]
Visitor["Website Visitor"]
Employee["Employee"]
ContentMgr["Content Manager"]
end
subgraph ZwerfkeiPlatform["Zwerfkei Platform"]
Cloudflare["Cloudflare\nCDN & Security"]
Website["Zwerfkei Website\nLaravel · Vue.js · TypeScript"]
CMS["Zwerfkei CMS\nLaravel · Statamic"]
Backend["Zwerfkei API\nLaravel"]
BackendDB[("API Database\nMySQL")]
end
subgraph LegacySystems["Legacy Systems"]
ZwerfkeiOld["Zwerfkei Backoffice (legacy)"]
OldDB[("Zwerfkei Backoffice (legacy) Database\nMySQL")]
end
subgraph ExternalServices["External Services"]
Navision["Microsoft Dynamics\nNavision ERP"]
Ergonode["Ergonode PIM"]
PostNL["PostNL\nShipment"]
PayNL["PayNL\nPayments"]
Kiyoh["Kiyoh\nReviews"]
Copernica["Copernica\nEmail Marketing"]
Storage["True Object Storage\nS3"]
end
subgraph AnalyticsTracking["Analytics & Tracking"]
GTM["Google Tag Manager"]
GA4["Google Analytics 4"]
end
Suppliers(["~17 Brand &\nSupplier Sources"])
%% Actor flows
Visitor --> Cloudflare
Employee --> ZwerfkeiOld
ContentMgr --> CMS
%% Frontend flows
Cloudflare --> Website
Website -- "File Storage" --> CMS
Website -- "HTTP / API" --> Backend
Website --> GTM
GTM --> GA4
%% Backend flows
Backend --> BackendDB
Backend -- "Pricing & Availability" --> Navision
Backend -- "Product Data API" --> Ergonode
Backend --> PostNL
Backend --> PayNL
Backend --> Kiyoh
Backend -- "Newsletter opt-in/out" --> Copernica
Backend --> S3["New S3 Bucket\nObject Storage"]
Backend -- "Legacy API" --> ZwerfkeiOld
%% CMS
CMS --> S3
%% Legacy flows
ZwerfkeiOld --> OldDB
ZwerfkeiOld --> Navision
%% Product data sources
Suppliers -- "Product info &\nAvailability" --> Ergonode
Suppliers -- "Stock & Pricing" --> Navision
Legacy API
The connection between the Zwerfkei API and Zwerfkei Backoffice (legacy) via the Legacy API is required during the transition period. Certain business logic and data (e.g. historical orders, account data) still reside in Zwerfkei Backoffice (legacy) and are not yet migrated to the new platform. This connection will be removed once the migration is complete.
New components
| Component | Technology | Purpose |
|---|---|---|
| Cloudflare | CDN & Security | Traffic routing, caching, DDoS protection |
| Zwerfkei Website | Laravel, Vue.js, TypeScript | Fast public storefront with static caching |
| Zwerfkei CMS | Laravel, Statamic (headless) | Website content and translation management |
| Zwerfkei API | Laravel | Central business logic and all external integrations |
| API Database | MySQL | New database for the Zwerfkei API |
| Ergonode PIM | SaaS | Product information management |
Zwerfkei Medewerkersportaal not yet in scope
The target architecture above does not yet include the Zwerfkei Medewerkersportaal (the internal portal for store employees — printing tickets, tracking repairs, generating QR codes). This system is planned but not yet designed; it will be added to this diagram once its architecture is defined.