Operational dashboards over your data items, portals and groups — widgets that filter each other, stored on the server, shared by person, group, link or publicly.
Open Hyz DashboardsA Haiyz Dashboard is an operational screen you assemble from widgets — numbers, gauges, charts, tables, lists, a map, selectors, text and images — each bound to your data and wired to react to the others. It is stored on the server as a versioned document, so it lives with your data and your groups rather than in a file. Yours are at /dashboards.
Four ways to start:
.haiyz-dashboard.json exported elsewhere.The builder then opens: the catalog on one rail, the canvas in the middle, the inspector on the other. Drag a widget by its header, resize from the corner, or move the selected one with the arrow keys. The inspector has three tabs — Data, Appearance, Actions. Save with ⌘S / Ctrl+S: a save carries the version you opened, so if a colleague saved first you are asked to reload rather than overwrite them.
A widget binds to one of these, or carries a static value:
Every answer says how it was obtained: Layer, read from the data item's Hyz Layer as it stands (edits and approved field records included — the usual case for an item that is online); Live, asked of the provider just now; or Snapshot, computed from the stored file copy, with the time it was taken — the fallback for an item with no Hyz Layer, such as a table. The mode setting is auto (live when the provider can answer, else the snapshot), live only or snapshot only, and the inspector warns in advance whether your query will really resolve live. Not every question can: grouping, buckets and the rarer statistics are computed here, on the snapshot.
Only data you can view can be bound, and a public or link-shared dashboard exposes only what is public or yours. Sharing a dashboard never widens access to the data behind it.
| Purpose | Widgets |
|---|---|
| Numbers | Indicator (one value with unit, target and thresholds), Gauge (a value against a range, with bands) |
| Charts | Serial chart (bar, line, area, scatter), Pie chart |
| Records | Table, List, Details (the fields of the selected record), Group card |
| Map | Map, Legend |
| Selectors | Category, Number, Date — these filter the other widgets |
| Content and layout | Text (markdown-lite with tokens), Image, SVG, Embed, Spacer |
Each widget sits in the grid, in the sidebar, or in the header.
A binding is a question, not a table dump. Five kinds:
A filter narrows any of them: field, operator (equals, greater than, contains, in, between, is empty…), value. A filter value may carry a dashboard parameter token, so one control drives many widgets. Widgets can also refresh on a timer.
A chart or an indicator can carry several series — each a statistic over a field, with its own key, bilingual label, colour slot and (for charts) its own bar/line/area form. Grouping by a date field lets you bucket time by hour, day, week or month.
Indicators and gauges accept a calculation over those series keys — pct(load, capacity), (a - b) / b * 100, round(x, 1) — plus a comparison against another series that renders the change as ▲/▼. Text widgets embed other widgets' values with tokens such as {{w.kpi-load}}.
Selectors, charts, tables, lists and the map emit events: a chosen value, a selection, or the map's visible extent. In the Actions tab you say what an event does, and to which widgets:
| Effect | What happens |
|---|---|
| Filter | The target widgets re-ask their question with the emitted clause added |
| Zoom / Pan | The map moves to the emitted geometry or extent |
| Flash | The matching feature blinks on the map |
| Set | A dashboard parameter takes the emitted value |
A header dropdown narrowing every widget to one region, a map whose extent drives the KPIs, a bar you click to filter the table — all are actions. Reset filters clears every one at once.
The map draws its bound features and any overlays — extra data items under the primary layer, such as transmission lines beneath substations. Each overlay has its own colour slot, line weight, label and an option to obey the dashboard's filters, and can animate as flow: the dashes travel along the line, faster where a numeric field you nominate is larger.
A layer can take its label, size and colour from fields. Clicking a feature selects it; panning emits the extent. A Legend widget renders any map widget's symbology.
A table or list can colour itself by rule. Each rule is: a field, an operator (≥, >, ≤, <, between, equals, not equals, contains, in), a value, one of four colours — green, blue, red or orange — and a scope: just the cell, or the whole row.
Rules are ordered and the first one that matches wins, so put the strongest condition first: a rule for "over 90" placed below a rule for "over 70" will never fire. In a list, the rule can also colour the value chip on the end of the row.
A dashboard can have several pages, shown as tabs. The header carries a title and subtitle, an optional logo and clock, a theme toggle, and any widget placed in the header slot — typically a selector. The sidebar holds selectors and legends, on either side, at a width you set.
Theme is auto (following the site), light or dark; accent, density and background are per dashboard too. On phones the grid stacks in reading order, or in the mobile order you arrange in Settings — which is also where parameters are declared, named text, number or date values that filters and text widgets reference.
Create takes your chosen sources, reads their schema — field names, types, ranges, distinct counts — and designs a whole dashboard from a sentence: pages, widgets, bindings, actions, even the table colour rules. Revise does the same to a dashboard you have: it starts from the sources it already binds plus the config on screen, and its answer arrives as one undoable step you review and then save.
Both offer an extra-context box (what the data means, what "status = 3" is) and a sample-rows switch letting a few rows travel with the schema, identifiers masked; it is off by default. See Hyz AI.
Save as template in the builder keeps the layout, the widgets and the fields each widget reads — and nothing about your sources: every source becomes a placeholder. Starting from a template (New dashboard → Saved templates, or Use on a catalog entry) shows one slot per source with the fields it needs; pick your data item, and missing fields can be aliased to one of its columns or that slot's widgets are left out. A public template can be picked by anyone; a private one only by you.
Visibility is private, link (anyone holding a link you can rotate to revoke) or public. On top of that you can invite people as viewer or editor, and grant a group view or edit. Viewers open and query; editors also save the layout; only the manager changes sharing, grants and deletion. See Sharing.
Export downloads the dashboard as a bundle: layout, widgets, bindings by column name, map symbology — never data. On import, every source the file names is re-mapped to something local, with a live "columns found" check so a wrong pick shows before the import, not after.
While a dashboard is open, Haiyz watches the data items and maps it depends on. When one publishes a new version every widget refetches and the dashboard says the data updated — no reload needed.