Skip to content

Meduse Architecture ​

Meduse has a separately built Vue application and a Laravel backend. The HTTP API and Artisan processes share the backend code, but execute through different entry points. The diagram shows logical runtime responsibilities, not a verified server or deployment layout.

View diagram source
C4Container
  title Meduse application runtime boundaries
  Person(editor, "Catalog editor", "Maintains product data")
  System_Boundary(meduse, "Meduse") {
    Container(frontend, "Browser application", "Vue 3 and Vuex", "Screens and API requests")
    Container(api, "HTTP backend", "Laravel 8 and Sanctum", "Routes and catalog operations")
    Container(cli, "Artisan processes", "Laravel CLI", "Schedules and job handlers")
    ContainerDb(catalog, "Catalog persistence", "Eloquent and SQL", "Products and related records")
  }
  Rel(editor, frontend, "Edits products")
  Rel(frontend, api, "Calls API", "HTTP JSON")
  Rel(api, catalog, "Reads / writes", "SQL")
  Rel(cli, catalog, "Processes jobs", "SQL")
  UpdateRelStyle(editor, frontend, $offsetX="-60", $offsetY="-30")
  UpdateRelStyle(frontend, api, $offsetX="-45", $offsetY="-45")
  UpdateRelStyle(cli, catalog, $offsetX="-45", $offsetY="-45")
  UpdateLayoutConfig($c4ShapeInRow="2", $c4BoundaryInRow="1")

Diagram

The diagram deliberately does not select a queue broker. config/queue.php reads QUEUE_CONNECTION and falls back to sync. A job implementing ShouldQueue does not alone prove a separately running worker or broker in an environment. Queues records concrete producer/consumer paths, while Connectors adds external destinations and transport details.

Follow a request ​

  1. Route and screen. src/router.ts maps browser routes to Vue pages/components. Start from Interfaces to find the screen and its service call.
  2. HTTP transport. src/service/ApiService.ts sets the configured VUE_APP_API_URL, bearer authorization and selected AX-Tenant header. The application uses hash-based browser routing; a frontend route is not a backend URL.
  3. API registration. app/Providers/RouteServiceProvider.php mounts the core API routes under /api. Individual route groups and module providers determine the applicable middleware and prefixes. Check the endpoint inventory before composing a URL.
  4. Tenant context. TenantMiddleware initializes a recognized supplied tenant and returns HTTP 404 for an unknown one. It does not reject every missing tenant header: the middleware continues without initializing a tenant when the header is absent or has the ignored values. Read the actual endpoint's backend constraints; a selected UI tenant is not proof of endpoint-level authorization.
  5. Persistence and side effects. Controllers call services/models or dispatch jobs. For example, CatalogProduct owns catalog_product, and its model hooks synchronize flat data and record changes. UpdateProducts creates a tracked-job record and implements a job handler for bulk editing. Follow the operation beyond the HTTP response if it starts background work.

Follow automatic work ​

The main schedule is defined in app/Console/Kernel.php; module providers add further declarations. For example, Modules/Logidav/Providers/ScheduleServiceProvider.php schedules product synchronization commands and stock/price/quantity work on different cadences. Its commented scheduling alternatives are not active declarations.

Scheduled jobs maps the source-declared frequency and guard to its command. Queues then distinguishes framework-dispatched jobs, custom processing tables, and file-based connector work. Inspect the matching consumer instead of assuming that every item displayed on the Jobs screen belongs to the same queue.

Developer change map ​

ChangeFirst source boundaryCheck the next boundary
Menu label or navigationFrontend menu and src/router.tsComponent exists and guard/tenant visibility matches intent.
Form or grid behaviorVue page/component and its service/store actionRequest field names and response envelope match the backend.
API contractBackend routes and controllerValidation, tenant context, service persistence and error response.
Bulk update or exportController/command and dispatched jobQueue selection, tracked status and destination acceptance.
Automatic processing cadenceKernel or module schedule providerProvider registration, command guard and actual processing implementation.
Connector mappingConnector/module implementationProduct/channel/locale mapping, transport and destination import.

Source boundary ​

Reviewed revisions: frontend ca4a9364974f25715715b002f1ee463c8d53d31f and backend 5d3de6cb63b976aaeef739a8a7f288c4b46509ad. Source references above and the linked detail pages establish the implementation path. Hostnames, deployed revisions, active tenant assignments, queue connection, installed scheduler and worker supervision remain environment-specific and unverified here.

Primary files: frontend router, HTTP transport, API provider, tenant middleware, product model, bulk update job.

Internal developer documentation for Menzzo systems.