Skip to the page
Get started

Docs · Getting started

What Mosaic does

The problem Mosaic solves, the four stages every Check goes through, and where it stops.

A retail estate runs on systems that were never designed to agree with each other. The tills were chosen in 2009, the ERP came with a merger, the webshop is somebody else's platform entirely, and the warehouse still exports a file at 02:00. Each of them is internally consistent. Between them, nobody can promise anything.

So the month closes and finance asks why the channel total is 86 when the till report said 91. The answer exists. Finding it means somebody exporting both sides, pasting them into a spreadsheet, and matching rows by hand until the five turns up — usually a returns adjustment nobody mapped, or four shops on a different calendar.

Mosaic does that matching, on a schedule, and keeps the answer.

#The four stages

Every comparison you build goes through the same four stages. They are worth knowing by name, because the whole product is arranged around them.

1. Connect. A data source is one query against one system — a SQL statement against the till database, a REST call to the ERP, a file the warehouse drops. A Check has at least two, because there is nothing to compare otherwise.

2. Normalise. The two sides rarely speak the same way. One returns S014, the other 014. One dates a sale when it rang, the other when it settled. Normalising fixes that per source, before anything is compared, so the comparison itself stays simple.

3. Aggregate. You choose what identifies a row — the keys — and what gets added up — the measures. Keys might be store code and business date; a measure might be net sales. Mosaic groups each side the same way and lines them up.

4. Compare and grade. Matching keys are compared measure by measure. What comes out is every row that differs, by how much, and which side is missing it. If you have set Rules, the run is also graded: pass, warn or fail.

That last distinction matters. A Check with no Rules is still useful — it shows the differences. Rules are what let it tell you, without being asked, that tonight's run is worse than last night's.

#The part people underestimate

The hard part is rarely the comparison. It is that the two systems disagree about what a column means.

A real example, with invented names. An ERP has a column called CUST_GENDER. It holds RETAIL, WEB, PARTNER and OUTLET. At some point a decade ago somebody needed a sales channel field, found a spare column, and used it. The name was never changed. Every report built on that table since has either known the secret or been quietly wrong.

Mosaic keeps that knowledge next to the data rather than in somebody's head: you record what a column actually means, once, and every Check built afterwards uses it.

#Where Mosaic stops

It is worth being clear about the edges.

Mosaic reads. It does not write back to your systems, and it does not correct them. When it finds that the till and the ERP disagree about Store 014, it tells you precisely how — it does not pick a winner.

Mosaic compares what you tell it to compare. It does not go looking for anomalies on its own, and it does not learn your estate by watching it. A Check is something a person designs, because deciding what ought to match is a business judgement.

Mosaic is not a dashboard. Dashboards show you a number. The whole point here is the second number, and the gap.

There is AI inside the product — it can draft a query from a schema, propose what a column means, or write the summary on a run. It sits under the features that use it, and every one of its suggestions waits for a person to agree before it counts as fact.

#What you build

In the sidebar you will mostly be making one of two things.

A Check compares systems. It is the main event: two or more sources, an aggregation with keys and measures, optional Rules, and a history of runs.

A Report is the flat kind: a single source, shown as it comes. Useful when you want a query on a schedule, published to people who should not have database access. It compares nothing, so it has no Rules and no differences — just rows.

Both can be scheduled, both keep a run history, and both can be published as a page with its own address.