Skip to content

Dashboards

Dashboards turn the reports your agents send into the view your team actually watches — no frontend work. Each workspace can have many dashboards, plus an auto-generated Overview so the page is never blank, and exactly one default that loads first.

pulsedeck.app
An uptime dashboard with an alert feed and status widgets.

Drop widgets onto a 12-column grid. Each widget has a spanfull, half, or third of the row — and a row index for vertical order. There are five types:

WidgetShowsKey config
stream_feedThe latest reports from one streamstreamId, limit (1–20)
metricThe latest value of a metric (with delta vs previous)streamId, metricKey, label?
chartA metric over timestreamId, metricKey, variant (line/bar/area), range (24h/7d/30d)
report_countReport volume over timescope (stream/category), targetId, bucket (hour/day), range
alert_feedRecent warning/critical reports from a categorycategoryId, limit (1–20)

A dashboard layout is just a small JSON document — for example:

{
"version": 1,
"widgets": [
{ "id": "w1", "type": "metric", "span": "third", "row": 0,
"config": { "streamId": "str_mrr", "metricKey": "mrr", "label": "MRR" } },
{ "id": "w2", "type": "chart", "span": "half", "row": 0,
"config": { "streamId": "str_mrr", "metricKey": "mrr", "variant": "area", "range": "30d" } }
]
}

(You build this visually in the app; the JSON is shown to make the model clear.)

New reports appear instantly. The web app subscribes over Server-Sent Events; if SSE isn’t available it automatically falls back to polling, so dashboards stay current either way. Redis is only needed to fan events across multiple API replicas — a single instance needs nothing extra.

  • Use cases — full walkthroughs building an uptime and a revenue dashboard.
  • Architecture — how live updates and retention work under the hood.