How it works, without the hand-waving.
If you're the person who'll be blamed when a number is wrong, this page is for you.
One question, end to end: you ask it in plain English, we map it to your schema, write and verify the SQL, run it in your database, and return a designed dashboard. Here it is on a real question, with the SQL and the reasoning available if you want them.

You ask in plain English.
Understand
We map your question to your schema. “Churn” resolves to a specific table and column in your database, not a generic definition. If it maps to more than one, we ask.
Write
We generate SQL against the indexed schema: real table names, real column names, real join paths.
Verify
Before execution, the query is checked against the live schema: do these tables exist, do these columns exist, are these joins valid, are these types comparable. A query that fails this never runs and never reaches you.
Sanity-check
The result gets compared against recent history for the same metric. A number that moves more than expected gets flagged, not hidden.
Every one of these is a rule an analyst applies without thinking. We wrote them down.
| What came back | What you get | Why |
|---|---|---|
| One number | Large figure + sparkline | You want the value and the direction, not a bar of one |
| Metric over time | Line | Continuity is the point |
| Categories, ≤7 | Horizontal bar, sorted by value | Sorted bars beat alphabetical; horizontal fits long labels |
| Categories, >20 | Bar with top-N + grouped remainder | 40 bars is a texture, not a chart |
| Parts of a whole | Stacked bar | Never a pie. Humans compare lengths, not angles |
| Two measures, many rows | Scatter | You're looking for the relationship |
| Distribution | Histogram | Averages hide bimodality |
| Flow between stages | Sankey | Where the drop-off is |
The honest version. This is the section that makes the rest of the page believable.
Ambiguous business terms
If your schema has three plausible definitions of ‘active user,’ we still can’t guess which you mean. But you define it once in the semantic layer, and we use that definition everywhere after. Until it’s defined, we ask.
Deeply denormalized schemas
If your production database has a metadata JSONB column holding thirty semantically distinct fields, we’ll find it and we’ll struggle with it. Tell us what’s in there and we improve immediately.
Multi-hop questions with implicit filters
“Revenue from customers who churned and came back” involves assumptions we may get wrong. Open the SQL on questions like this.
What we won't do
We don’t forecast, we don’t run statistical tests, and we don’t tell you why a number moved. Those are analyst jobs and we’d rather be honest than plausible.
We index your schema: table names, column names, types, relationships. We never copy, cache, or persist your rows. Queries run against your database and results stream to your browser.
Connect a database directly. We index the schema, not your rows.
See how it answers your question.
Tell us about your stack and we'll walk you through a live demo with your own data.

