Build a widget
Widgets are the tiles on your dashboard. Each one reads from one or more sources and renders as a number, chart, table, or one of the other shapes below. Ploxir ships 1,200+ built-in widgets across 50+ integrations, plus custom, formula, and tool widgets you compose yourself.
Building, editing, and arranging widgets requires the Editor role or above. Viewers see the same dashboards read-only — no add tiles, no widget menus. See Teams & roles.
Widget kinds
Every widget is one of nine kinds:
| Kind | What it shows | Good for |
|---|---|---|
| KPI ("Number") | One number with an animated value, a change-vs-previous-period delta, and an optional sparkline | MRR, total customers, today's revenue |
| Ratio | One value divided by another, with its own delta | Refund rate, ARPU, LTV:CAC |
| Chart | Full-tile time-series area chart with a headline total | Revenue over time, daily visitors |
| Table | Recent rows from the source, each cell in its own true currency for money columns | Latest transactions, recent orders |
| Breakdown | Top-N bar list, items summed by label | Top countries, top pages, top customers |
| Status | Green/red state dots | Uptime monitor results |
| Cohort | Retention grid (join week × activity week) | User retention from webhook events |
| Funnel | Conversion-step bars across 2–8 ordered events | Signup → activate → pay funnel |
| Tool | Utility tile with no data source | Clock, countdown, note, goal tracker, quick links |
Cohort and funnel widgets are built from webhook events; both need a user_id field in the event payload, since retention and funnel steps are tracked per user. Status widgets come from the uptime monitor source.
Adding a widget
- On a project dashboard, click Widget on the Add to project tile. On the workspace portfolio, click Add widget.
- The project picker opens with a search box, a Build & tools group (the custom composer plus dashboard tools), then a Platforms grid — click a platform to drill into its widgets. Every built-in connector widget appears under its platform. The portfolio picker is organised as sections instead: the Custom widget card on top, then Combined totals, Ratios & formulas (see below), Dashboard tools, and the per-platform groups.
- Pick a widget. If the concept can render more than one way, the configure form shows a Display as toggle (e.g. Number vs. Chart vs. Breakdown). Pick the source it should read from, adjust the display options, and click Add.
- The widget renders immediately from the source's most recent sync — adding a widget doesn't trigger a new fetch, and it doesn't need to: sources sync when connected and on a regular cadence after that.
Editing a widget
Every widget has a ⋯ menu in its top-right corner. Edit widget… opens a form matched to the widget's type. The common fields:
- Name — leave it empty for a clean, title-less tile.
- Source — when the project has more than one compatible source, a picker lets you switch which one the widget reads. Portfolio widgets can be edited to change which sources contribute to the merge.
- Number format — plain number (
1,234), currency ($1,234), or percent (12.3%). - Currency — a 3-letter code (shown only for the currency format; an empty field falls back to
USD). - Decimals — 0–4, or leave blank for automatic (currency values show cents until they get large).
- Suffix — up to 20 characters appended after the value ("users", "orders", …).
- Show change vs previous period — untick to hide a KPI's delta badge.
The rest of the ⋯ menu:
- Display as — switch between Number / Chart / Table / Breakdown on the same data. This entry only appears when the widget actually has alternative renderers; many widgets have exactly one sensible shape.
- Range — pin a per-widget date range (see below). Hidden for point-in-time widgets and for tools, cohorts, funnels, and status tiles, where a range is meaningless.
- Resize — free width × height inputs.
- Style — colors and effects (see below).
- Move left / Move right — or just drag the tile anywhere on the grid; the order persists.
- Remove — deletes the widget.
Sizes and the grid
The grid fits as many columns as your screen allows — the density setting in the dashboard toolbar (Comfortable / Compact / Dense) controls the cell size, and mobile always uses 2 columns. A widget's size is cols × rows, both free from 1 to 6 — set them from ⋯ → Resize. Common shapes:
- 1×1 — small square KPI
- 2×1 — wide KPI
- 2×2 — square breakdown or tool (the default for both)
- 3×2 — chart (the default for charts)
- 4×2 — bigger chart, or a funnel / status board
- 6×2 — wide table or cohort grid (the default for both)
Content scales with the tile: KPI digits grow on bigger tiles, tables fit more rows, charts fill the available space. On mobile, 1-column widgets stay half-width; anything wider takes the full width.
Date ranges
The range switcher in the dashboard toolbar offers Today, 7 days, This month, 30 days, 1 year, All time, and Custom (a from → to date picker). The chosen range lives in the URL, so a shared link opens on the same window. Day boundaries follow the workspace timezone (Settings → General), and custom ranges snap to whole local days.
How a widget picks its range
Each widget resolves its effective window with a strict precedence:
- Per-widget range lock — set from
⋯→ Range. Always wins. Options: Follow timeline, Today, Last 7 days, This month, Last 30 days, Last year, All time (no per-widget custom range). - The page range you explicitly chose with the range switcher.
- The widget's own default range — many built-in widgets ship one (revenue widgets default to 30 days, for example).
- The implicit page default, Today.
In practice: a fresh revenue widget shows the last 30 days when you first open the dashboard (step 3), switches to whatever you pick in the range switcher (step 2), and ignores all of that if you lock its range (step 1).
Range chips
Range-following widgets show a small chip next to their title with the effective window — (1D), (7D), (MTD), (30D), (1Y), (ALL). Custom ranges show no chip — the chart's x-axis already shows the dates.
Point-in-time widgets
Some numbers are a current state, not a sum over a window: MRR, ARR, active subscriptions, account balances, open tickets, live visitors, uptime status. These widgets ignore the date range entirely — no chip, and no Range entry in the ⋯ menu. Ploxir knows which widgets are point-in-time from each connector's own metadata; webhook widgets using the latest value or running count aggregations are treated the same way.
The "vs previous" delta
KPI deltas compare against the window of the same length immediately before the current one (a 30-day window compares to the 30 days before it). Hide the delta per widget with the "Show change vs previous period" toggle.
Custom widgets — combining multiple sources
The composer exists on both dashboards: it's the Custom widget card at the top of the portfolio picker, and under Build & tools in the project picker. Name the widget, then add one or more parts. Each part is a source plus a metric from it — a built-in recipe for native connectors, an event name + aggregation (count, running count, sum, average, latest value, distinct) for webhook sources, or a JSON path for your own HTTP endpoint.
Pick how to display the result: Number, Text, Chart, Table, Breakdown, or List. Options a chosen source can't produce are disabled — webhook sources can use everything except Text; HTTP-JSON endpoints offer Number, Text, Breakdown, and List. The parts are then combined into one tile:
- Number — values are summed across parts (Stripe MRR + Paddle MRR = total MRR)
- Chart — series merge by date; the same day from different sources sums together
- Table — rows interleave by timestamp
- Breakdown — same-label items sum together
Money parts are grouped by currency during the merge. If your parts settle in different currencies, the widget shows per-currency values instead of fabricating one mixed total. Set a workspace reporting currency (Settings → General, or the currency switcher in the toolbar) to convert every part with daily ECB FX rates first — then you get a single, honest total.
Formula widgets
The portfolio picker's Ratios & formulas section (portfolio only — not available on project dashboards) ships eight templates that compute a SaaS metric from your existing portfolio widgets and, where a value isn't on your dashboard, a constant you type in:
| Template | Formula | Inputs |
|---|---|---|
| ARPU | revenue ÷ customers | two widgets |
| LTV | ARPU ÷ churn rate | ARPU widget + churn-rate constant |
| CAC | spend ÷ new customers | spend constant + widget |
| LTV:CAC ratio | LTV ÷ CAC | two widgets (typically the two formulas above) |
| Rule of 40 | growth % + profit margin % | two constants |
| NRR | (start + expansion − churn − contraction) ÷ start | four MRR constants |
| Gross margin | (revenue − COGS) ÷ revenue | revenue widget + COGS constant |
| CAC payback | CAC ÷ (ARPU × gross margin) | two widgets + margin constant |
Widget inputs are live references: the formula recomputes whenever the underlying widgets update. Constants stay fixed until you edit them.
Notes & dashboard tools
Tool widgets need no data source and appear under Dashboard tools in both pickers:
- Clock — any timezone, analog or digital, 12h/24h, optional seconds and date. Handy for distributed teams.
- Countdown — days/hours to a target date, with a label ("Launch day", "Quarter end").
- Note — a markdown sticky note. Edit it directly on the tile; it auto-saves as you type, with copy and clear buttons in the tile header.
- Goal progress — a target plus a manually updated current value, formatted as a number, currency, or percent.
- Quick links — a grid of shortcuts to the outside tools you jump to most.
Styling
From ⋯ → Style, per widget:
- Background — brand-color a tile (e.g. Stripe purple); the tile keeps a subtle gradient so it still reads as a surface
- Text — override the text color to stay readable on your chosen background
- Chart — the line/area color, shown when the widget renders a chart or sparkline
- Glossy background — a glass-like sheen toggle
- Reset to defaults — clear all overrides at once
FAQ
My widget shows $0 — what's wrong?
Usually the range. If the page range is Today and nothing has happened yet today, a range-following widget correctly reads 0 — switch the page range or lock the widget to a longer window. For webhook widgets, the most common cause is an event-name mismatch: the widget listens for page_view but your app sends pageview. Check the Event types received table on the webhook source card for the exact names arriving. And check the source itself: a source with a dead credential shows a red Reconnect chip on its widgets — if you see one, reconnect the source rather than debugging the range.
Why is there no range chip (or Range menu) on my widget?
It's a point-in-time widget. MRR, balances, active subscriptions, open tickets, and similar "current state" numbers don't follow a date window, so the chip and the Range menu are hidden on purpose. Also: custom from→to ranges never show a chip (the chart axis shows the dates), and tools, cohorts, funnels, and status tiles have no range at all.
The page is untouched but my widget shows a (30D) chip — why?
Many built-in widgets ship a default range (revenue widgets default to 30 days). That default applies whenever you haven't explicitly picked a page range and the widget has no lock — it's step 3 of the precedence above. Explicitly choose a page range or set a per-widget lock to override it.
How do I combine Stripe and Paddle MRR into one number?
Add a Custom widget, displayed as a Number, with two parts: your Stripe source's MRR and your Paddle source's MRR. Parts are summed. If the two platforms settle in different currencies, set a workspace reporting currency first so both convert before summing — otherwise the widget shows the currencies separately rather than silently adding EUR to USD.
My percent widget looks wrong (0.4% instead of 40%)
The percent format treats the value as already being in percent units: 47.5 renders as 47.5% — no multiplication happens. Built-in widgets already produce percent units, so this only bites custom data: if your webhook or HTTP endpoint sends 0.475, it renders as 0.475%. Send 47.5 instead.
Can a custom widget subtract or divide its parts?
No — the composer only sums. For divisions and derived metrics, use a formula widget on the portfolio (ARPU, gross margin, and friends divide and subtract per their templates). Free-form expressions aren't supported yet.
My widgets vanished after I deleted a source — are they gone?
Deleting a source removes its widgets with it, by design — a widget without its source would only ever show frozen data. For Stripe, reconnecting the same account restores the source and its widgets together. For other platforms, connect the source again — it starts fresh, with starter widgets seeded.
Why can't I add or edit widgets?
You have the Viewer role in this workspace. Building and editing widgets needs Editor or above — ask a workspace admin to change your role. See Teams & roles.
Can I change how a widget displays without rebuilding it?
Often, yes: ⋯ → Display as switches between Number, Chart, Table, and Breakdown on the same data — but only where alternative renderers exist for that widget. If the entry isn't in the menu, that widget has exactly one shape.
