Bully Pulpit International
Client-facing analytics dashboards with substantial charting work, built over a GraphQL API for a data-driven public affairs agency.
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.
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.
A typed query layer so each view retrieves the slice it renders, rather than trimming a generic payload on the client.
Reusable chart components covering the comparison, distribution and time-series views the reporting actually required.
Rendering and query work so dashboards stayed responsive as series length and dimensionality grew.
Interaction designed around the questions strategists ask, keeping the underlying query model out of the interface.
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.
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.