workspace "Wilkins Architecture" "Context & Container views for the Wilkins cargo dimensioning system" { model { // Persons in the System Context accountOwner = person "Account Owner" "Wilkins client who acts as a reseller of the main system" administrator = person "Administrator" "Wilkins internal team member" tech = person "Tech" "Certified support and installation team member" operator = person "Operator" "Warehouse operator in charge of receiving and processing cargo" mlEngineer = person "ML Engineer" "Internal developer who trains machine learning models" // Software Systems in the System Context emailSystem = softwareSystem "Email system" "Sends notifications and important emails to any user" magayaLogistics = softwareSystem "Magaya Logistics" "Supports the operation of a logistics company" trackingRecognition = softwareSystem "Tracking Recognition System" "Queries tracking number information from providers (Amazon, FedEx, USPS)" scaleSystem = softwareSystem "Scale" "Weight scale connected to the system" depthCameras = softwareSystem "Depth Cameras" "Kinect and Structure depth cameras" barcodeScanners = softwareSystem "Barcode Scanners" "Hikvision OCR and barcode scanners" wilkins = softwareSystem "Wilkins" "Captures, processes and visualizes volume and weight dimensions for cargo" { runner = container "Runner" "Controls the execution of the dimensioner inside the computer installed" "Docker, JavaScript, Bash" api = container "API" "Provides the main functionality of Wilkins; orchestrates backend systems" "Docker, Node.js" spa = container "Single Page Application" "Provides UI for interacting with dimensioning system" "Flutter Web" mobileOperatorApp = container "Mobile Operator App" "App used by operators" "Flutter" webStorage = container "Web Application Storage" "Stores static files of Web App" "Azure Storage" redis = container "Redis Cluster" "In‑memory database to synchronize API replicated nodes" "Redis Cloud" stageDb = container "Stage Database" "Core DB for users, accounts, roles, permissions, dimensions, companies, measurements" "MongoDB Atlas" blobStorage = container "wilkins-photos.azure.bucket" "Stores the photos generated on all stages" "Azure Blob Storage" ocrProxy = container "OCR Proxy" "Acts as an FTP server to receive the images from OCR Camera" "Docker, Python" dimensioner = container "Dimensioner" "Gets info from devices and produces first measurements" "Docker, Python" mlApi = container "ML API" "Uses ML to predict package dimensions using dimensioner results" "Docker, Python, FastAPI, Sklearn" magayaProxy = container "Magaya Proxy" "Connects Magaya XML requests with dimensioner" "Docker, Node.js" dataWarehouse = container "Data Warehouse" "Stores datasets used for training" "Postgres AWS" // New containers wilkinsOcr = container "Wilkins OCR API" "Captures shipping label information using an image of a shipping label" "Docker, Python, FastAPI" dimensionerProxyCognex = container "Dimensioner Proxy Cognex" "Handles communication with Cognex cameras for dimensioning and/or barcode scanning" "Docker, Node.js" // Container relationships runner -> dimensioner "Controls lifecycle" "Bash/Docker" runner -> ocrProxy "Controls lifecycle" "Bash/Docker" runner -> magayaProxy "Controls lifecycle" "Bash/Docker" runner -> dimensionerProxyCognex "Controls lifecycle" "Bash/Docker" api -> redis "Writes/reads" redis -> stageDb "Synchronizes replicated nodes" blobStorage -> stageDb "Uploads images" api -> stageDb "Reads and writes (mongo+srv)" api -> blobStorage "Uploads package images" "S3/HTTP" api -> mlApi "Requests dimension predictions" "JSON/HTTPS" api -> magayaProxy "Requests dimensions" "JSON/HTTPS" api -> ocrProxy "Uploads shipping label images" "Multipart/HTTP" api -> wilkinsOcr "Requests shipping label predictions" "JSON/HTTPS" magayaProxy -> dimensioner "Requests dimensions" "XML/HTTP" dimensioner -> depthCameras "Requests RGB and depth images" "k4a/struct2surf/libusb" dimensioner -> scaleSystem "Requests weight" "libusb" dimensioner -> api "Makes dimension and calibration requests" "JSON/HTTP" ocrProxy -> barcodeScanners "Receives images and barcode data" "FTP" dimensionerProxyCognex -> barcodeScanners "Receives images and barcode data" "FTP" wilkinsOcr -> trackingRecognition "Requests tracking info" "HTTPS" mlEngineer -> mlApi "Requests training" mlApi -> dataWarehouse "Stores dataset information for future training" "SQL" dataWarehouse -> mlApi "Provides datasets for training" api -> magayaLogistics "Sends package dimensions and shipping label info" "XML/HTTP" dataWarehouse -> trackingRecognition "Requests training data" "SQL" } // Relationships at System Context level accountOwner -> wilkins "Manage account users, companies and dimensioners; visualize account analytics" administrator -> wilkins "Manage Wilkins accounts and users; visualize system analytics" tech -> wilkins "Installs and activates dimensioners" operator -> wilkins "Uses dimensioner to get dimensions of a cargo; sends high‑definition images and barcode data" wilkins -> emailSystem "Sends emails for notifications" wilkins -> trackingRecognition "Requests tracking information" wilkins -> depthCameras "Requests images and depth maps" operator -> barcodeScanners "Sends images and barcode data" mlEngineer -> trackingRecognition "Requests tracking data during training" administrator -> emailSystem "Receives emails" accountOwner -> emailSystem "Receives emails" operator -> emailSystem "Receives emails" } views { systemContext wilkins { include * autolayout lr } container wilkins { include * autolayout lr } styles { element "Person" { background "#08427b" color "#ffffff" } element "Software System" { background "#511f71" color "#ffffff" } element "Container" { background "#2a9fd6" color "#ffffff" } } theme default } }