Skip to content

metabase — simple management reporting over the ERP

Metabase OSS v0.57.4 runs as compose project metabase with a dedicated PostgreSQL application database. Caddy service metabase-proxy alone binds 127.0.0.1:3002; the Metabase container has no published host port. Canonical public access is https://reports.embeddedera.com through the plex Cloudflare Tunnel and the existing Reports Access application. The only published reporting hostname is reports.embeddedera.com.

The five generated dashboards are What can I build?, Build capability, Where is my inventory?, What needs attention?, and Quality Reporting. Caddy serves a phone-first Reports Overview at the root; /management and /quality are stable aliases for the two primary dashboards. Public dashboard links remain protected by Cloudflare Access, avoiding a second login. Metabase connects to the InvenTree database as reports_ro; it cannot change ERP data. Bootstrap reads the canonical, sandbox-tested Grafana SQL from ~/erp-config/reporting/dashboards/, so there is one capacity calculation and new active assemblies with BOMs appear automatically.

The management landing page also reports stock totals and part-number quantities across Finished goods and its sublocations, Quarantine, In test, and future locations beginning with Tested. Empty matching locations remain visible with quantity zero. The Build capability assembly table is a cross-filter control: clicking an assembly sets the Assembly dashboard parameter, highlights the row, and filters the purchase-shortage table directly below and the workflow-location stock table to that product. The landing page uses plain management labels, explicit quantity definitions, green/amber/red status text, largest-shortage-first purchasing rows, a single workflow-location detail table, an ERP data timestamp, and a per-assembly Finished on hand quantity that reconciles to the finished-goods total. Its compact cards and full-width tables are verified without horizontal overflow at 390 px and 1200 px.

The Build capability dashboard's Select assembly control is a native searchable dropdown backed by a generated question over every active assembly with a BOM. Options contain both product name and IPN, so either term finds the product. Dropdown selection and assembly-row clicks drive the same URL-backed filter; the selected pill has Metabase's clear control.

Build capability uses four tabs on the same public dashboard: Overview for selected-aware totals and product status, Build for full capacity and next-board blockers, Locations for filtered workflow and assembly stock placement, and Purchasing for actionable shortages plus the current Receiving/Quarantine queue. The assembly selector persists across tabs.

Overview includes one company-wide Current inventory value estimate. Its unit-cost fallback order is recorded USD stock-lot cost, positive part base cost, weighted reviewed LCSC purchase history, then active USD supplier pricing; items without any usable source contribute zero. The total stays global when an assembly is selected to avoid assigning shared component value to one product.

Quality Reporting uses Overview, ERP Data Quality, and Inspection & Testing tabs. It reports current, read-only findings for stock records, part identity, BOM and assembly setup, part data and sourcing, workflow stock, serials, and test setup. Detail rows include severity, the check, the finding, the action, and a direct ERP link. Product and severity filters are native dashboard parameters. New checks are registered once in bootstrap.py and automatically flow into the area table, overview totals, and severity matrix. The dashboard deliberately omits yield and pass/fail trends until per-serial test-result recording is reliable.

Configuration and repeatable bootstrap: ~/erp-config/reporting/metabase/. Secrets: ~/.config/metabase/env (0600). Persistent app database volume: metabase_metabase-db. Grafana remains preserved on loopback port 3000 for historical technical reports and has no public tunnel route. The nightly erp-backup job includes a consistent pg_dump -Fc of the Metabase application database in the encrypted local and R2 backup set.

Connected to

If you change this

  • Back up the Metabase application database before changing the pinned image.
  • Start only the named metabase-db and metabase services; let one Metabase node finish migrations.
  • Re-run bootstrap.py after canonical query or dashboard changes; it updates by name without duplicates.
  • Keep port 3002 on loopback and keep public dashboard sharing behind Cloudflare Access.