Demo
One warehouse, five clients, one monthly report each
A scheduled platform loads every source for every client, checks the numbers before anyone sees them and makes each client’s monthly deck. Run one month of it here.
This is a simulation. The clients, sources, figures, answer engines and dashboard file are all invented, and every figure comes from a small fixed generator, so the page is the same on every visit. No AI model runs on this page and no real source is called. Nothing leaves your browser or is kept, and reloading the page starts again.
1. The monthly ingest
Each client has four feeds, one per source. A run reloads each feed’s last 3 months, because sources still revise recent figures, and it replaces those months only after the fetch has succeeded. One feed will fail on this run.
| Client | Site visits | Search | Social | Ads |
|---|---|---|---|---|
| Quill | 11 of 11 | 11 of 11 | 11 of 11 | 11 of 11 |
| Lotus | 11 of 11 | 11 of 11 | 11 of 11 | 5 of 11 |
| Petal | 11 of 11 | 11 of 11 | 11 of 11 | 11 of 11 |
| Saucer | 11 of 11 | 11 of 11 | 11 of 11 | 11 of 11 |
| Lingo | 11 of 11 | 11 of 11 | 11 of 11 | 11 of 11 |
A feed with far fewer months, such as Lotus ads, is normally quiet: that studio runs ads only a few months a year.
Run 13
Petal social, month by month
As it stands: fetch first, reload only after success
- Month 1:
- Month 2:
- Month 3:
- Month 4:
- Month 5:
- Month 6:
- Month 7:
- Month 8:
- Month 9:
- Month 10:
- Month 11:
- Month 12:
For comparison, had the run cleared those months before fetching
- Month 1:
- Month 2:
- Month 3:
- Month 4:
- Month 5:
- Month 6:
- Month 7:
- Month 8:
- Month 9:
- Month 10:
- Month 11:
- Month 12:
2. Quality gates
Each gate is a query that returns rows only when something is wrong, on the rule that a wrong number is worse than a missing one. Two faults are already in the warehouse, planted on purpose.
The gates have not run yet.
No negative figures
Not runReturns any row with a figure below zero.
Clicks within impressions
Not runReturns any search or ads row with more clicks than impressions.
Search position in range
Not runReturns any search row whose average position is below 1 or above 100.
Channels add up
Not runReturns any month whose channel buckets do not add up to its sessions.
One load per month
Not runReturns any feed and month loaded by more than one run, which would double every figure made from it.
Fresh where expected
Not runReturns a feed with no data for the latest month only if it had data in nearly every earlier month, so a normally quiet feed is left alone.
3. AI answer visibility
Every month the same frozen set of 25 questions goes to each invented answer engine, and each answer is recorded as a row: did it mention the client? The report shows the share of answers with a 95% interval, and says “no change” whenever this month’s interval overlaps last month’s.
Month. Each mark is the month’s rate and each line its 95% interval; a thick coloured mark is a real change, a thin grey one is no change. The dashed line is where a fourth engine joined, before month 7: the count of mentions jumps there, and the rate does not.
Quill: mention rate from 31% in month 1 to 56% in month 12. A real change: up in month 10. Every other month reads as no change.
| Month | Answers mentioning | Rate and 95% interval | Against the month before |
|---|---|---|---|
| 1 | 23 of 75 | 31% (21% to 42%) | First month |
| 2 | 20 of 75 | 27% (18% to 38%) | No change |
| 3 | 23 of 75 | 31% (21% to 42%) | No change |
| 4 | 23 of 75 | 31% (21% to 42%) | No change |
| 5 | 21 of 75 | 28% (19% to 39%) | No change |
| 6 | 22 of 75 | 29% (20% to 40%) | No change |
| 7 | 29 of 100 | 29% (21% to 39%) | No change |
| 8 | 26 of 100 | 26% (18% to 35%) | No change |
| 9 | 28 of 100 | 28% (20% to 37%) | No change |
| 10 | 53 of 100 | 53% (43% to 62%) | Up |
| 11 | 60 of 100 | 60% (50% to 69%) | No change |
| 12 | 56 of 100 | 56% (46% to 65%) | No change |
4. The monthly deck
The generator makes one deck per client for the latest month, from the warehouse, with fixed metric definitions and a slide left for a person’s commentary. It runs the gates first, and holds a client’s deck back while any gate fails for that client.
Deck
Held back.
5. The dashboard check
All clients share one dashboard with a client picker. A checker builds the file the dashboard should have from its specification and compares it, read only, with the live dashboard’s saved file. It only lists differences: a person makes every fix. Both files are toy files written for this page.
Expected, built from the specification
overview: page
date range = previous full month
compare to = previous month
client picker = on
channels: chart
measure = sessions
split by = channel
order = largest first
clicks: tile
measure = clicks
filter = source is search
visibility: chart
measure = mention rate
show interval = onLive, the saved file
overview: page
date range = last 30 days
compare to = previous month
client picker = on
channels: chart
measure = sessions
split by = channel
order = largest first
clicks: tile
measure = clicks
visibility: chart
measure = mention rate
show interval = off
draft: tile
measure = sessionsNot compared yet.
What the demo shows
- A failure that keeps history. Each feed replaces its recent months only after its fetch succeeds, so a source that fails leaves the client’s months as they were, and the run log raises an alert.
- Gates before anyone sees a number. Queries catch impossible values, a month loaded twice and a feed gone quiet, and leave a normally quiet feed alone.
- An honest visibility measure. A rate from a frozen question set, with a 95% interval, and “no change” when months overlap, instead of a raw count that rises whenever engines are added.
- Reports made, not assembled. One deck per client with fixed definitions and a slide for a person’s commentary, held back while a gate fails for that client.
- Checks on the dashboard itself. The live file is compared with the one its specification builds, and every difference becomes a line on a punch list for a person.