Operations tools
MintJams Commerce provides the visibility, monitoring, notifications, reconciliation and reporting you need to run it day to day. Configure via /etc/commerce/config/*.yml, or from the Webtop Commerce apps.
Dashboard
The read-only Commerce Dashboard app shows KPI cards for sales trend, inventory, stockout forecast, reorders, locations, backorders, customers, tasks, health, event ingestion, reconciliation and outbound sync. It has a 7d / 30d / 90d window selector and drill-downs into the consoles.
GET …/endpoints/dashboard.groovy?days=7&salesDays=30
It updates via a content SSE subscription plus a 60-second poll and a manual refresh.
Health monitor
Webhook, route and Admin API success/error and latency are recorded to /content/commerce/health/metrics/{yyyy}/{MM}/{date}.json, and alerts fire when health.yml thresholds are exceeded.
| Rule | Fires when |
|---|---|
hmacFailures |
today's HMAC failures ≥ threshold |
apiErrorRate |
API error rate ≥ threshold (after minSample) |
routeErrorRate |
processing error rate ≥ threshold (after minSample) |
processingLatency |
a single webhook exceeds maxMs |
Cooldown is cooldownMinutes (state in state.json). Read: GET …/endpoints/health.groovy?days=7.
Notification channels
Slack / Discord / Teams / LINE / generic webhook / Email (SMTP) are supported. Configure in /etc/commerce/config/notifications.yml or in the Webtop Commerce → Notifications app. A channel is on unless enabled: false; delivery is best-effort (failures are logged only and never break the business process).
Reconciliation
Detects and reports drift in product status, variant price and inventory between the CMS mirror and Shopify's current truth, and optionally heals it.
- a timer (hourly by default) checks round-robin (
maxPerRun) sourceOfTruth.{status,price,inventory}=cms/shopify;autoHeal.{...}enables healing per field (inventory is never auto-healed)- reports:
/content/commerce/reconciliation/{yyyy}/{MM}/recon_*.json, cursor instate.json - config:
/etc/commerce/config/reconcile.yml. UI: Commerce Operations → Reconcile
Reports & audit
GET …/endpoints/reports.groovy?type=sales&days=30[&format=csv]
GET …/endpoints/reports.groovy?type=operations&days=30[&status=ok|failed|dryrun][&format=csv]
sales (daily orders, revenue per currency, top products) and operations (an audit of CMS → Shopify writes) export as JSON / CSV.
Task SLA
Open human tasks are scanned periodically (every 15 min by default), and breaches of the sla.yml rules (overdue / unclaimed / open) are escalated (raise priority, add a candidate group, notify). State lives in /content/commerce/tasks/sla-state.json. Read: GET …/endpoints/tasks.groovy.
CRM
Customers are aggregated from order history and classified (new / repeat / vip / at_risk / dormant) and stored at /content/commerce/crm/customers/{key}.json. Behaviour changes (newly VIP/at-risk/dormant) are notified, and abandoned carts are detected and followed up (optional email plus an operator summary). Config: /etc/commerce/config/crm.yml. Read: GET …/endpoints/crm.groovy?view=segments.