← Past performance
Case study 07Public affairs · Data visualization · Prime

Bully Pulpit International

Client-facing analytics dashboards with substantial charting work, built over a GraphQL API for a data-driven public affairs agency.

The challenge

Campaign measurement, read by people who do not write SQL

BPI measures whether public affairs and advocacy campaigns actually persuade anyone, which produces data with a lot of dimensions: spend, channel, audience, geography and time, all of which a strategist may want to pivot on mid-conversation.

The audience is the constraint. These dashboards are read by campaign strategists and clients, not analysts, so the interface has to make a multi-dimensional dataset explorable without exposing the query model underneath it.

Our approach

A typed contract between the data and the charts

GraphQL let the dashboards ask for exactly the shape each view needed instead of over-fetching wide result sets, and TypeScript carried that shape through to the chart layer so a schema change broke the build rather than the dashboard.

01
GraphQL API over the campaign data

A typed query layer so each view retrieves the slice it renders, rather than trimming a generic payload on the client.

02
Complex chart system

Reusable chart components covering the comparison, distribution and time-series views the reporting actually required.

03
Performance on large series

Rendering and query work so dashboards stayed responsive as series length and dimensionality grew.

04
Built for non-technical readers

Interaction designed around the questions strategists ask, keeping the underlying query model out of the interface.

Outcome

Reporting surfaces put in front of clients

Rainier delivered the client-facing dashboard layer and the GraphQL API behind it as prime, across a three-year relationship, for an agency whose measurement practice is central to how it sells its work.

Surface
Client-facing
external reporting
Data layer
GraphQL
typed query contract
Focus
Visualization
complex charting

Have a system with the same constraints?

Send us the scope and the compliance requirements. We will tell you what the architecture should look like before you commit to anything.