Every function brings its own numbers to the leadership meeting and the first twenty minutes go on reconciling them. Here is the model behind one dashboard, the prompts to build it, and what it takes to run it.
Your private status link is on its way to your inbox.
An executive KPI dashboard is four parts: a short list of metrics with agreed definitions, a target and an owner on every one, trend rather than a point in time, and a visible refresh state so nobody quotes a stale figure. The discipline is subtraction. A dashboard with forty numbers is a report nobody reads, and the value comes from the argument about which twelve matter, which is a leadership conversation rather than a build task.
Leadership dashboard
12
Metrics, capped at 15
8
On target
2
Stale right now
Q3 frozen
Snapshot taken 30 Sep
Coloured by progress against target, not by direction of travel. Pipeline cover is the flagged one: it went up this quarter and is still well short of where it needs to be.
You run a leadership meeting, or you prepare for one. Every function arrives with its own numbers and they do not agree. What you want is one page everybody trusts, with few enough numbers that people actually read it.
What happens between the data changing and a leadership team making a decision about it.
Ten to fifteen metrics with a cap enforced in the app, because every function will want theirs added.
Without a target it produces discussion; without an owner, an unanswered question.
A metric past its cadence reads as stale rather than showing an old figure as current.
Coloured by progress against target rather than direction, because some metrics going up is bad.
What moved, why, and what they are doing. That turns an agenda item into a decision.
So the September figure still reads the same in December, and later corrections show as a difference rather than a rewrite.
An executive dashboard is not every chart in one place. It is four parts, and the first one is an exercise in saying no.
Ten to fifteen metrics, chosen deliberately, each tied to something the leadership team can actually change. Everything else belongs on a functional dashboard.
Every metric has a number it is supposed to hit and a named person who would defend it. Without both, a metric produces discussion rather than decision.
Current value, previous period, same period last year, and the direction. A figure with no history tells a leadership team nothing about whether to act.
When each metric last updated, shown on the page. A dashboard that is quietly stale gets quoted in a board pack, which is the expensive version of the problem.
These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix
Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.
The build is easy. The subtraction is the work.
In this Helix project, build me an executive KPI dashboard.
A metrics table: name, a one-line definition in business language, the
function it belongs to, the unit, the target for the current period, a
named owner, and how often it refreshes.
Keep the list short. Ten to fifteen. Build a hard cap into the app with a
warning when somebody tries to exceed it, because the pressure will
always be to add rather than remove, and a dashboard with forty numbers
is a report nobody reads.
Require an owner on every metric, and require a target. A metric with no
target produces a discussion, and a metric with no owner produces a
question nobody answers.
Link each metric to its full definition, including what it deliberately
excludes. Most leadership disagreements about a number are about the
exclusions, and having the answer one click away saves the first twenty
minutes of the meeting.
I sign in through Helix, so do not build a login page. Read the signed-in
user from the runtime. And do not put any key or connection string in the
code: if this needs to reach another system, tell me and I will create the
connection in my workspace. Worth knowing. The cap is the feature. Without it, every function adds theirs and within two quarters you have the report you were trying to replace.
Because a number on its own is not a decision.
Now the display, and never show a bare number.
For each metric: the current value, the previous period, the same period
last year, the change as an amount and a percentage, the direction, and
progress against target.
Chart the trend rather than only the latest figure. A leadership team
needs to know whether something is improving, and a single number cannot
say.
Colour by whether the metric is on track against its target, not by
whether it went up. Some metrics going up is bad, and a dashboard that
does not know which is which teaches people to ignore the colour.
Handle missing data honestly. If a metric has not refreshed, say so
rather than showing the last known value as though it were current. Because the expensive failure is a quiet one.
Add refresh handling, and put it on the page rather than in a log.
Each metric records when it last updated successfully and what its
expected cadence is. Show the timestamp next to the number, and flag
anything that has missed its cadence.
If a source fails, the metric shows as stale rather than showing an old
figure as current. A number nobody knows is out of date is the one that
ends up quoted in a board pack.
Let me snapshot the whole dashboard at period end and keep it, so what
was reported in September still reads the same in December even after the
underlying data is corrected. Corrections then show as a difference
between the snapshot and the live figure, which is a useful thing to see
rather than a problem to hide. The part that turns a chart into a meeting worth having.
Two last things.
Let the owner of each metric add a short comment for the period: what
moved, why, and what they are doing about it. Prompt for it before the
meeting rather than during. A number with the owner's explanation
attached is a decision; a number alone is an agenda item.
And let me drill from any metric to the detail behind it, or link out to
the functional dashboard that owns it. The executive view should be the
top of a path rather than a dead end.
Then report: metrics on and off target over time, which metrics change
owner or definition most often, which is usually a sign the metric is not
settled, and how often each metric was stale when the meeting happened. Worth knowing. The owner comment is the highest-value field and the one most likely to be skipped. Prompting for it before the meeting is the only way it gets written.
The step that turns a working prototype into something with your data in it.
Now connect it to the systems we actually run, so it works on real data
rather than the rows you seeded.
Anything in angle brackets is a placeholder. Swap it for whatever we use
instead, and have the app name the connection it wants rather than assume
a vendor, so changing my mind later is a config change and not a rewrite.
<Snowflake>. Read most metrics from the warehouse, where the definitions
have already been applied consistently.
<Salesforce>. Read pipeline, bookings and retention where they are not
already modelled in the warehouse.
<NetSuite>. Read revenue, margin and cash figures for the finance metrics.
<Looker>. Link each metric to the functional dashboard that owns it, so
the executive view is the top of a path rather than a dead end.
<Okta>. Read the group that says who is on the leadership list, which is
the only thing the app should check before showing performance against
target.
<Amplitude>. Read product engagement metrics, which are usually the ones
missing from the finance systems.
<Zendesk>. Read support volume and satisfaction, which leadership asks
about and nobody has to hand.
<Slack>. Remind each owner to write their commentary before the meeting
rather than during it.
Only write where I have said to write. Everything else is read only.
Do not write a key, a token or a connection string anywhere in the code,
and do not ask me to paste one. Tell me which connections you need and I
will create each as an authentication in my Helix workspace. Reference
them by alias. Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.
The last step of every build: a URL, and the right people on it.
Deploy my app. Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. This shows company performance against target, so set Access Control before sharing and be deliberate about who sees the whole page.
An executive dashboard is almost entirely reads, from every system that holds a number somebody quotes.
Snowflake
Read most metrics from the warehouse, where the definitions have already been applied consistently.
Salesforce
Read pipeline, bookings and retention where they are not already modelled in the warehouse.
NetSuite
Read revenue, margin and cash figures for the finance metrics.
Looker
Link each metric to the functional dashboard that owns it, so the executive view is the top of a path rather than a dead end.
Okta
Read the group that says who is on the leadership list, which is the only thing the app should check before showing performance against target.
Amplitude
Read product engagement metrics, which are usually the ones missing from the finance systems.
Zendesk
Read support volume and satisfaction, which leadership asks about and nobody has to hand.
Slack
Remind each owner to write their commentary before the meeting rather than during it.
Each line says whether the app reads, writes or both. Anything not described as writing should be read only.
Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.
Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.
The build gets you a working dashboard. Its numbers reach a board pack and it reads from several systems of record, so it needs to be run properly.
AI Deployment
One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.
App Security
Company performance against target is among the most sensitive internal data there is. SSO means people sign in with their existing account, and access is scoped deliberately rather than by link.
App Security
Pulling metrics from finance, CRM, product and support systems on a schedule needs real access to each. Granting it to the app rather than pasting keys into it means credentials can be rotated or revoked without a redeploy.
App Registry
Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.
Cost Management
Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.
Subtraction. A functional dashboard can carry forty numbers because one team lives in it. An executive dashboard carries ten to fifteen, each tied to something the leadership team can change, and everything else belongs on the functional one it links to.
Ten to fifteen, with a hard cap enforced in the app. The pressure will always be to add rather than remove, and within two quarters an uncapped dashboard becomes the report it was built to replace.
Because without a target a number produces discussion rather than a decision, and without an owner a question about it goes unanswered. Both are required fields for a reason.
Visibly. Show the last refresh next to each number and flag anything past its cadence. A metric that fails to refresh should read as stale rather than quietly displaying the last known value, because that is the figure that ends up in a board pack.
Yes, at period end. Underlying data gets corrected and backfilled, and without a frozen snapshot the September figure changes after September has been reported. The gap between snapshot and live is itself worth seeing.
Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build. The hard part is not the build, it is agreeing which twelve numbers matter, and that is a leadership conversation.
Data and Analytics
One definition per metric, owned by a named person, versioned when it changes, and linked to every report that uses it. Prompts to build it, and what it takes to run it.
Data and Analytics
Ask for the decision rather than the columns, check whether the answer already exists, prioritise against capacity, and turn repeat requests into something self-serve. Prompts to build it, and what it takes to run it.
Data and Analytics
Check freshness, volume, nulls and referential integrity on the tables people actually use, with an owner per check and alerts nobody learns to ignore. Prompts to build it, and what it takes to run it.
Last reviewed September 2026.
Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.
Your private status link is on its way to your inbox.