A dashboard is a grid of widgets, each reading from one data model. Widgets recompute as new records arrive, so a dashboard left open on a wall stays current without anyone refreshing it.
Outcome
A saved dashboard whose widgets update themselves as your workflows produce records.
Before you start
- A data model that already holds records. A widget pointed at an empty model shows nothing, which is hard to tell from a broken one.
- A desktop or laptop browser. Building dashboards is desktop only.
Dashboards in the sidebar lists what you have, with a Visibility filter for Public and Private.
1. Create the dashboard
Create Dashboard starts a new one, named Untitled dashboard until you rename it.
A dashboard opens in view mode, where the topbar has Share, Edit, and Delete. Press Edit and it swaps for Add widget, Auto layout, Discard, and the save button.
Checkpoint: you are in edit mode, with Add widget visible.
2. Add a widget
Add widget does not place anything yet. It opens the inspector on a blank widget, where the Shape section is the type picker; choosing a type is what commits the widget to the grid. Until then the inspector says Choose a widget type to add it to the dashboard.
There is a second, faster route. Press Cmd/Ctrl + K and search across two
sections: Widget Types, which are the ten built-in types, and
Your Library, which is your saved reusable widgets.
| Type | What it shows |
|---|---|
| Stat Card | Single metric display |
| Gauge | Single metric against a scale |
| Line Chart | Time-series visualization |
| Bar Chart | Categorical comparison |
| Pie Chart | Proportional breakdown |
| Region Map | World-country or U.S.-state choropleth |
| Heatmap | Hour × day-of-week activity |
| Table | Display data in rows and columns |
| Pivot Table | Rows × columns crosstab |
| Activity Feed | Live chronological record stream |
| Text | Markdown notes & annotations |
The Shape section groups them as Charts, Tables, Feed, and Layout, using short labels — Stat, Gauge, Line, Bar, Map, Pie, Heatmap, Table, Pivot, Activity, Text.
Checkpoint: the widget appears on the grid, and the inspector shows its sections.
3. Point it at data
The inspector's sections change with the type, but the order is always the same: Shape, then Data, then any type-specific field pickers, then Format.
Data is where you pick the data model. Everything below it stays empty until you do — Select a data model to configure field encoding.
Then you tell the widget which field to bucket by and which to measure. Bar charts ask for Group by, pie charts for Name field, maps for a geography and matching Region field, heatmaps and time-series lines for a Time field, tables for their Columns, activity feeds for a Title field, and pivots for both Rows and Columns. Line charts can plot against time, a numeric X field, or a category, chosen with the X axis toggle.
World maps are interactive on viewing surfaces. Selecting a country focuses the map on that country; selecting the United States opens the built-in state boundary map. The breadcrumb returns to the previous level without changing the widget's saved Map area. A World widget still aggregates country-level values, so its United States drill-down shows state boundaries without inventing state-level values.
Aggregation is how many records become one number:
| Group | Aggregations |
|---|---|
| Basic | Count, Distinct count, Sum, Average, Min, Max |
| Distribution | Median, Percentile, Std deviation, Variance |
| Time-based | First, Last, and Latest on stat cards |
Aggregations that need a number are hidden when the selected field does not hold one, with a note saying which kind of values it holds instead. Percentile asks for the percentile you want; First and Last ask which timestamp to Order by.
Format holds the presentation knobs: Max buckets and Sort on grouped charts, Max points on time series, Pagination and Max rows on tables, Decimals and Suffix on stat cards, Max items on activity feeds. Stat cards can also show Compare to previous period — a percentage delta against the preceding equal-length window, which needs a dashboard time range to have something to compare to — and a Show trend sparkline mini chart.
Checkpoint: the widget renders a value or a chart rather than a placeholder.
4. Save
Every change you make in edit mode is buffered in the browser. Nothing is written, and nobody else sees anything, until you press Save changes — at which point the whole set of additions, edits, moves, and removals commits together.
The button reads Saved and greys out when there is nothing pending, which is also your unsaved-changes indicator. Discard throws the buffer away after confirming.
The save button stays disabled while any widget is incomplete, and a bar names the offending widget and the reason, with Open to jump to it. The reasons are short and specific: Pick a data model, Add at least one column, Select a Value field, and so on.
Checkpoint: the button reads Saved.
Verify the result
- Leaving edit mode shows the dashboard with real values.
- The Live toggle in the topbar has a green pulsing dot.
- A new record produced by your workflow changes the widget without a refresh.
Live updates
In view mode the topbar carries a toggle that reads either Live, with a green pulsing dot, or Paused. Live is the default: new records stream in and the widgets recompute in place. Pausing freezes the data where it is, and resuming re-anchors any relative time window to now and pulls a fresh frame.
The toggle is hidden in edit mode, because edit mode is about the layout rather than the data.
Time ranges
One picker in the dashboard header governs every widget. There is no per-widget time range.
| Preset | Window |
|---|---|
| All time | Everything, unfiltered |
| Last 1 hour, Last 24 hours, Last 7 days, Last 30 days | Rolling windows counted back from now |
| Today, Yesterday | Calendar days |
| This week, This month, Last month | Calendar weeks and months |
| This quarter, Last quarter | Calendar quarters |
| This year, Last year | Calendar years |
| Custom… | Two From / To inputs and an Apply button |
The range filters by each record's observed time — when the thing happened, not when Hodoflow stored it.
In view mode the picker changes what you are looking at, and mirrors itself into the URL, so a link you copy carries the range with it. In edit mode it is labelled Default: and sets the dashboard's saved default instead. The saved default covers All time, the four rolling windows, and a custom window; the calendar presets apply to the view in front of you rather than persisting as the default.
Calendar presets resolve against your profile timezone. Rolling windows do not depend on a timezone at all.
The widget library
Dashboards → Widget Library holds standalone widgets that are not tied to one dashboard. Its list shows each widget's Type, Data model, how many dashboards it is Used on, and when it was Updated.
New widget opens a full-page builder with the same inspector plus a live
preview and a Preview time range that is never saved. Its topbar has
Save, Discard, and Delete, and an unsaved badge while there are
pending changes. A library widget cannot be deleted while it is attached to a
dashboard.
Library widgets are created here, not promoted from a dashboard. To put one on
a dashboard, use the Cmd/Ctrl + K palette's Your Library section.
Two behaviours are worth knowing before you rely on them. Remove on a library widget detaches it from that dashboard and leaves the library copy alone. But editing a library widget's fields or configuration from a dashboard's inspector writes through to the library copy, and therefore to every other dashboard using it.
Sharing
Share opens Dashboard settings. Turn on Public embedding — Allow this dashboard to be embedded externally — and Hodoflow mints a share token and shows an Embed snippet with Copy snippet and Regenerate token beneath it. The header button then reads Shared.
Sharing is embed-only. There is no public dashboard page to link to; the token works through the embed element and nowhere else, and the token itself is only ever shown inside the snippet. Anyone holding it can render the dashboard without signing in, so treat it as a secret.
Regenerate token breaks every existing embed immediately. Turning Public embedding back off is how you revoke access altogether.
Common problems
A widget is empty. Either the data model holds no records yet, or the time range excludes them. Try All time first.
The save button is disabled. A widget is incomplete. The bar above names which and why, with Open to jump to it.
Someone else's changes overwrote mine. A bar appears when this happens — This dashboard was updated by someone else. — with Reload. Edits are buffered per browser, so the last save wins.
Widgets overlap after I resized things. Auto layout packs them upward, removing gaps and resolving overlaps.
Changing a widget's type cleared my fields. Switching type clears field selections, and warns before it does.
Editing a widget changed another dashboard. It is a library widget. Edits from any dashboard's inspector write through to the library copy.
The numbers differ from the same dashboard in an embed. Calendar presets resolve in your profile timezone in the app, and in UTC inside an embed. See Embed a dashboard.
Next step
Embed a dashboard to put it in someone else's page.