Reports that build themselves
Name the models you already have. The Commerce, Users and Content reports appear with real numbers in them, covering everything in your database rather than starting at zero today.
application free, with unlimited reports. No card.
A sample report, drawn by the same components the product uses. The numbers are made up; the charts are not.
Three steps, and you write none of the reporting
Install it into the application
One package and a migration, in Stacks or in Laravel. No service to deploy beside it, no connection into production to hand out, and nothing to keep upgrading separately from the app it reports on.
Name the models you already have
An order, a customer, a subscription. Say which fields are measures and which are dates, and the reports have real numbers in them immediately, at the grain you described. A question the description cannot answer correctly is refused rather than guessed at.
Then make them yours
Drag blocks onto a grid, pick a measure and a dimension, and watch each one redraw. Publish when it is right, so a half finished edit is never what a teammate opens.
In a Stacks app
In a Laravel app
composer require reportshq/laravel
php artisan vendor:publish --tag=reportshq-config
// config/reportshq.php
'models' => [
'order' => [
'class' => App\Models\Order::class,
'measures' => [
'revenue' => ['aggregate' => 'sum', 'column' => 'total_amount'],
],
'time' => ['placed' => 'created_at'],
'dimensions' => ['status' => 'status'],
],
],
What you get
A builder that behaves
Twelve columns, drag to move, corner to resize, keyboard for everything. Blocks push each other out of the way while you hold them, and the server settles the layout so two blocks can never share a cell.
Every block explains itself
One sentence, derived from the query the block actually runs. Two charts called Revenue can count different things, and a reader deserves to know which one they are looking at.
Share without an account
A link shows one published report and nothing around it. Revoke it and it stops working on the next request. Embed it in your own page if you would rather.
Delivered on a schedule
The headline numbers by email, daily, weekly or monthly, in your own timezone, with a spreadsheet attached if you want one. The hour stays the hour after the clocks change.
Yours to host
A Stacks application with public source. Run it yourself and every tier limit falls away, because there is nothing left to enforce them against.
Honest about its numbers
Comparisons say when there was no previous period rather than inventing a percentage. Bounded dimensions say what went into Other. Sampling keeps whole people, so funnels still mean something.
Written down, not implied
How a model is described, what the compiler will and will not answer, and why it refuses rather than guessing. Every bound the query API enforces is stated.
The Stacks package
Installing it, describing your models, and what the builder can compose once they are described.
The Laravel package
The same engine and the same charts, described in PHP and mounted through your own routes.
The query API
The JSON surface the charts read, and the refusals it returns rather than answering a question wrongly.
Self-hosting
There is no other kind. What a licence covers, and what happens when you leave the key unset.
Describe one model and see
Install the package, name a model you already have, and drop a block on the grid. It reads rows that are already in your database, so the first chart covers all of them.
Create an account