Insights is the eighth CleverInit module and the platform's first analytics surface. Install it on your tenant and you get curated dashboards (MRR, ARR, churn, DSO, payment success, customer health, module adoption) — populated from the same *V1 integration events every other module already publishes. No webhooks to wire. No ETL to maintain. No Looker subscription.
What makes it different: it is not a general-purpose BI tool. Looker, Tableau, PowerBI, and Metabase are built for analysts. They connect to anything, model anything, and require setup work no SME operator wants to do. Insights ships an opinionated metric library aligned to the SaaS commerce stack CleverInit already provides — the buyer reads it, understands it, and acts on it without learning the schema.
A tenant CEO opens Monday morning's executive dashboard. The page header reads, in plain Dutch: 'Your MRR grew 8% this week, driven by 12 new Pro subscriptions. Two enterprise customers delayed payment by 6+ days. Anna at Acme hasn't logged in for 21 days — at-risk.' Below, six widgets render in under half a second — MRR by plan, payment success rate, top customers by revenue, churn cohorts. No analyst built this. No ETL was scheduled. The events were already there; Insights just turned them into a page.
Insights pays off for anyone who needs to know what the business is doing without writing a query — not just analysts. These are the personas that adopt it on day one.
MRR, ARR, gross and net churn, DSO, payment success rate, revenue by plan, multi-currency conversion — all updated as events arrive, all auditable, all exportable.
Anomaly alerts, daily ops digests, OTP delivery success, notification delivery rates — surfaced proactively so you know before a customer calls support.
A weekly executive summary as a plain-language paragraph, generated by AI Copilot in your locale, shipped to your inbox Monday morning. No login required to know the headline.
A cross-tenant dashboard tier showing platform MRR, top-installed modules, tenant retention. Gated behind a dedicated permission, with anonymization on by default.
Five stages, all already running on infrastructure your platform owns. No new database. No new worker cluster. No new vendor.
A MassTransit consumer in the insights module subscribes to a curated catalogue of *V1 events from the host and every installed sibling. The catalogue is in code, not config — drift caught at build time.
Each *V1 event is translated into one or more MetricEvent rows by a typed IMetricMapper<TEvent>. Mappers are pure, sync, unit-tested in isolation — the only place a domain event becomes an analytics fact.
MetricEvent rows land in the tenant's own database, in an append-only fact table keyed by source-event hash for idempotency. Re-delivery is a no-op. Tenants never share storage.
Hourly / daily / weekly / monthly buckets pre-aggregate the raw events. Rollups are immutable and replayable — a schema change recomputes history without consuming the outbox again.
Dashboards read pre-aggregated rollups, never raw events. A widget asking for 'MRR by plan over the last 12 months' answers from a single rollup query — no live aggregation, no surprises.
Each dashboard lights up the moment its source modules are installed. No template to clone, no widget to configure — install the module and the page populates.
The Monday-morning page. MRR, ARR, net churn, gross revenue. When ai-copilot is installed, the headline becomes a paragraph in the tenant's locale.
Invoices issued, paid, overdue. DSO (days sales outstanding). Revenue by period and plan. Credit notes. The financial-controller dashboard.
New customers, archived customers, lifetime value distribution, top customers by revenue. Drill into the source customer record with one click.
Trial → active → past-due → suspended → cancelled. Conversion at each stage, cohorted by signup month. The product-management dashboard.
Tenant: which modules are used, how often. Host: which modules drive renewal, which are abandoned. Data-driven module product-management.
Active users (DAU / WAU / MAU), conversation volume, copilot usage when installed. The customer-success dashboard.
Six categories ship at v1. Each lights up only when its source module is installed — no broken widgets, no empty charts. Every installed module also registers any additional metric definitions it wants surfaced.
Any module that wants its own metrics on the page registers them through IMetricCatalogProvider. Custom tenant events route through IInsightsEmitter — declared once with a JSON schema, emitted as needed, queryable through IMetricQuery within a minute.
Dashboards are passive — they wait for you to look at them. Insights also reaches out: detecting anomalies, delivering scheduled reports, generating AI narratives, and letting you click any widget through to the source record.
Threshold, percent-change, and rate-of-change rules at v1; seasonal-baseline and change-point at v1.x. Detection runs every 5 minutes per tenant. Breaches publish AnomalyDetectedV1 — turned into an in-app alert and an optional email by the host's notification pipeline.
Weekly executive summary, monthly investor snapshot, daily operations digest — any saved dashboard with a cadence and recipient list. Rendered as PDF through the host's existing renderer, delivered through the host's existing email and in-app channels.
When ai-copilot is installed, the Weekly Executive Summary job translates the dashboard snapshot into a plain-language paragraph in the user's locale. When it isn't, the same surface degrades to a structured stats block — no errors, no broken widgets.
Each renewal event carries its own currency. Conversion is deferred to the read path — the widget setting picks booking-date FX or report-date FX. Stale rates never get locked into history, and the display currency stays per-dashboard.
Click the MRR widget's '12 new subscriptions' link and navigate straight into subscription-manager's list, pre-filtered to the right cohort. Back-navigation returns to the same dashboard scroll position. No data duplication, no detail pages reinvented here.
Your modules (or your tenant code) declare a custom event vocabulary with a JSON schema, then emit through IInsightsEmitter. The event routes through the bus so other modules can subscribe too. Queryable through IMetricQuery within a minute.
Per-tenant DB isolation, no raw SQL access, declared dimensions only, per-metric retention, anonymization on the host cross-tenant view, and a full export audit — every guardrail is on by default and surfaces in the audit log.
Every MetricEvent, MetricRollup, Dashboard, and CustomEvent lives inside the tenant's own SQL Server database. No shared time-series store, no row-level-security retrofit, no accidental cross-tenant joins. Aligned with CleverInit's DB-per-tenant model.
Tenants never get a SQL prompt or raw-event API. Only IMetricQuery (typed, paginated, permission-checked) and audited CSV / PDF exports leave the boundary. The 'general-purpose BI tool' attack surface simply isn't there.
Every metric declares an allow-list of dimensions. Events with unknown dimensions go to a dead-letter table for investigation — never silently absorbed. Cardinality explosions and inconsistent labels can't corrupt the rollup.
Raw events 90 days by default, hot rollups 13 months, cold rollups 5 years — each tenant-overridable per metric. The retention pruner runs daily, deletes raw events past the cap, and keeps the corresponding rollups intact.
The host operator's cross-tenant dashboard tier strips tenant-identifying labels by default. Toggling anonymization off is logged as an audit entry. Aggregated metrics by tenant size or plan tier stay available; named-tenant views require explicit unmasking.
Every CSV / PDF export is recorded with who, what, when, and the file reference. The export request lives in the host's file storage with a presigned URL and an expiry. Insights.Audit gates the visibility of the export log itself.
Install from your marketplace and your Executive Overview, Revenue, Customer Health, Subscription Funnel, Module Adoption, and Engagement dashboards populate from the events your platform already publishes — before lunch, in your locale, with no analyst in the loop.
Tell us where you want to take your business. We'll show you the fastest path to get there — whether you want a fully managed platform, a custom module built exclusively for your tenant, or a fully branded product to sell to your own clients.