DEV Community

Cover image for The reporting tool gap nobody talks about — and what I'm building to fix it
Lahiru Gambheera
Lahiru Gambheera

Posted on

The reporting tool gap nobody talks about — and what I'm building to fix it

Every SaaS product eventually gets the same support ticket.

"Can I customise the report layout?"
"Can I export this with my own columns?"
"Can we add a subtotal by region?"

And every team picks one of three bad answers.

Option 1: Say no.
You lose the power user. They switch to the competitor who said yes.

Option 2: Use an enterprise reporting tool.
Stimulsoft, DevExpress, Crystal Reports descendants. Powerful. $500–$2,000 per developer seat. SQL-first, built before REST APIs existed. Embedding them cleanly in a web app your customers use is painful glue code.

Option 3: Build it yourself.
You spend 6–8 weeks building something that half-works, then maintain it forever while your actual roadmap waits.

There's a fourth option nobody has done well yet for modern SaaS teams. That's what I'm building.

ReportKit — a JSON-native embeddable report designer

The architecture is simple by design.

The designer: a drag-and-drop canvas you embed directly in your app. Your users — not your developers — add tables, charts, labels, and images. They bind data fields using {{placeholder}} syntax. When they save, the output is a plain JSON object.

The viewer: a component you drop into your app.

Pass it templateJSON and dataJSON. It renders the report — on screen, as PDF, or formatted for print. That's the entire integration surface.

If your API returns JSON, ReportKit works with it. No SQL views. No data pipeline changes.

Why JSON-native matters

Every legacy reporting tool was designed around SQL queries. You write a query, the tool runs it, the report renders. That made sense in 2004.

Modern SaaS teams work differently. Your data comes from REST APIs, GraphQL endpoints, microservices. Wiring that into a SQL-first reporting tool means building a translation layer you'll maintain forever.

ReportKit skips the translation layer entirely. Your existing API response is the data source. The template is just JSON. The viewer combines them.

What I'm validating

I'm at the pre-launch validation stage — not looking for thousands of users, just 20 paying customers who actually have this problem.

Offering lifetime Product licenses to the first 20 buyers at $399. Includes self-hosted deployment, source access, and all future updates. First 5 buyers also get a 30-min architecture call.

If you've been putting off a "custom reports" feature because the existing options were too expensive or too painful to embed — drop a comment. Brutal feedback is equally welcome. "I'd never pay for this because X" is exactly what I need to hear at this stage.

Top comments (0)