portal.riversync.com — customer device monitoring: live telemetry, configuration and connection health for every RiverSync converged micro data center across your sites, whatever its model, plus the service that keeps it running.
RiverSync ships three product families across six models. The fleet is heterogeneous — generations, series and module counts differ — so telemetry shape differs by family and model. Every device on a customer's sites appears in the Portal regardless of family.
| Family | Models | In the field | Telemetry schema |
|---|---|---|---|
| frigo 20 · frigo 30 | Edge / small-site enclosures | Refrigeration family — established shape | |
| koelkast 20 · koelkast 30 | Larger enclosures, more cooling modules | Refrigeration family — wider module set | |
| nevera 30 · nevera 40 | Newest generation new to the model | Newer generation/series — additional fields |
Product-facing summary only — the pipeline, schema registry and storage strategy are specified in the Devices domain (SVC-DVC, SVC-9). The Portal does not own this data; it reads it.
Each device emits three independent streams to RiverSync's ingest plane (mTLS, never through the user gateway): telemetry (the live readings), the device twin (reported state + desired configuration), and connection (online/offline transitions). Readings land in a time-series store outside the relational model — the ⚠ the ERD records under PTL-1 — and only Alert rows cross into Postgres. A device catalog maps each unit to its (family, schema-version) so the Portal renders the right metrics per device; a device with no registered schema is read unknown-safe — never silently null-mapped (see PTL-7).
Live device monitoring — the device list and per-device telemetry (temperature, power, PUE and per-module readings), health states and alert/alarm streams across all site locations. Devices is the Portal landing surface — there is no separate dashboard. Values stream live and tween in the UI; deltas shown are factual. Telemetry is served from the time-series store, not Postgres (the ERD ⚠). On device detail, the readings are read as a single full-width multi-metric time-series stack (one card, the DS TimeSeriesStack): several panes share one time axis with a synchronized crosshair, one overview brush for the whole period, and a header carrying event-milestone annotations (toggle), a Live / Paused control and a time-scale selector (5m · 30m · 1h · 1d · 1mo · 1y · 3y). The refrigeration schema stacks three panes — (1) air temperature & humidity: return-air, supply-air and ambient air on the left °C axis (with the setpoint band) and humidity on the right %RH axis (40–55% band); (2) power draw & COP: metered power (kW, area) on the left and the cooling COP on the right; (3) door access: the enclosure's front · back · side doors as open→close state bands that escalate to alarm past the 5-min threshold (a single door never opens again while already open). Event milestones line up across every pane. The converged/Nevera schema renders the same three panes plus its extra tiles (PUE, battery, bus voltage). Build-ready detail in SPEC-UIX-DEV §7.
Alarms are actionable — acknowledge, see cause and effect ("MDC-6610 return air at 41.4°C — 6.4°C above setpoint"), and open a ticket from the alarm. Alarms are read on the device detail's Alarms tab, scoped to that device — there is no standalone Alerts & alarms page (removed, prototype Jul 2026); cross-device alarm context is surfaced through the device list's attention ranking and the top-bar notification bell.
Per-device maintenance visibility — on the device detail's Maintenance tab (there is no standalone Maintenance menu — removed, prototype Jul 2026), each device shows its single active maintenance agreement — tier (Silver 8×5 NBD · Gold 24×7 ND), servicing partner, period and expiration — above the full list of its previous agreements, sorted latest to oldest. Renewals surface ahead of time (master PRT-2). Specified in the Maintenance PRD (SPEC-PRD-MNT, MNT-1/2).
Service & messaging — tickets are the single Service conversation surface: each ticket carries engineer visit scheduling and the message thread with RiverSync support or the servicing partner. Messages is merged into Tickets (prototype Jun 2026) — there is no separate Messages menu; the conversation lives inside the ticket. A customer opens a new ticket from the command bar through a comprehensive composer — affected device, category → sub-category, priority, subject & message, and image / log attachments — with live RiverSync Assist (suggested classification with one-click apply, mentioned-device detection, similar tickets, a recommended runbook); the opener and classification are recorded (OpenedByParty=customer, DM-60). The build-ready design of this multi-party surface — reused by the Admin (agent) and Partners apps — is specified in SPEC-UIX-TKT (entities ServiceTicket · TicketMessage, rules DM-55/56/60, SVC-19).
Role-gated — what a member sees and controls (acknowledge, configure, control equipment, firmware) follows the Portal column of Account's permission matrix.
Family & model identity — every device is shown with its family (Frigo · Koelkast · Nevera), model and serial. The family reads as the canonical family badge (PRO-17, SPEC-PRD-PRO §3) — capability-axis glyph on the family hue with the capability tooltip — never a generic icon or a text-only label. The device list is a card view — each card is a considered at-a-glance summary (not the full device detail): the header carries identity, status, family and firmware; a schema-aware telemetry panel shows the family's key readings with sparklines (refrigeration: return-air, supply-air & ambient temperature, humidity, power and efficiency; converged/Nevera: return, supply, ambient, PUE, power and battery); and a right rail organises the maintenance agreement (tier, servicing partner, term-progress bar and expiry) and active-alarm state (count + top alarms). Sorting and filtering live in dropdowns on the right of the device command bar. Sorting offers needs-attention · id · status · active alarms · site · family · model · firmware · agreement-expiry · commissioned with an order toggle; the list is paged. Filtering — built on the design-system form controls — covers family, status, one or more sites (tag autocomplete), maintenance tier and active-alarm state, plus free-text search which lives inline in the command bar as an autocomplete combobox (to the left of Sort): typing matches up to seven devices by id / model / site / serial — arrow keys navigate, Enter opens the highlighted device, Esc / ✕ clears — while the same text narrows the card grid live. The customer never needs to know about schema versions; the Portal resolves them. The build-ready detail of the command bar, sort/filter dropdowns and card is SPEC-UIX-DEV.
Schema-aware telemetry — metric and field sets differ per family, model and schema version (e.g. Nevera carries fields Frigo does not, and multi-module units report per module). The Portal renders the correct metric set for each device. A device whose schema is uncataloged or unregistered degrades gracefully: identity and connection state still show, its readings are marked unavailable rather than guessed, and it is flagged for RiverSync to catalog — never silently null-mapped or dropped.
Device twin visibility — each device shows its reported state (firmware version, operating mode, current setpoints) and, where permitted, its desired configuration. Configuration changes (setpoints, mode, firmware) are role-gated commands (PTL-5), always audited, and reconcile against the twin's reported state.
Connection state — online/offline, last-seen and link health come from the connection stream. Offline devices are visibly distinct, telemetry gaps are explained by connection loss rather than read as zeroes, and a device going offline can itself raise an alert (PTL-2). The Portal's own live telemetry feed (a WebSocket) carries its state in a command-bar Live / Offline indicator: online it is success-toned and the broadcast icon pulses; offline it is neutral and static, and all real-time motion pauses (card tile tweens and sparkline streaming hold their last value — nothing is read as zero). Presentation, cadence and the reduced-motion / hidden-tab pausing are specified in SPEC-UIX-DEV §6.
History — telemetry is browsable over selectable time windows (with the time-series brush). On device detail the brush drives the whole multi-metric stack at once (PTL-1) — dragging it selects one period across every pane and pauses the live feed. The prototype simulates a continuous 3-year record per device at adaptive resolution (dense recent, coarse far back), so a scale from 5m to 3y reads the same history — fine live detail up close, seasonal cycles across years. History depth follows the time-series store's retention; any gap from the legacy-store cutover is surfaced, not hidden. Data export is not offered — the Portal provides no telemetry or device-inventory export function.
Service scheduling — the customer agrees the visit time. The Portal's Schedule surface lets the customer (a) set standing scheduling preferences — preferred service windows, blackout dates and a minimum lead time, org-wide or per site — and (b) review the time options RiverSync proposes for each corrective, maintenance or preventive visit and select one (or decline all and request alternatives). The selected slot schedules the visit for Field execution. The propose → select model and its entities are specified in SPEC-PWF-SCH (VisitProposal · VisitProposalOption · SchedulingPreference, DM-57…59); the counterpart sides are Admin ADM-7 (RiverSync proposes) and Partners PAR-15 (the servicing partner works its assigned visits within scope). The surface is the shared PV.Schedule engine (persona=customer), specified in SPEC-UIX-SCH. Acting — setting preferences, accepting a slot — is role-gated to Editor or above (PTL-5); all four roles can view the schedule.
Portal is customer-facing (entitlement: customer tenant — master AUTH-2). Partner members service devices in Partners; riversync staff monitor every customer's devices in the Operations console (the staff side of Portal). The sidebar below is the shell HUB_NAV model; Devices is the landing surface (no dashboard). Every customer role (Owner · Administrator · Editor · Viewer) sees the whole sidebar — Portal gates by action within a surface (PTL-5), not by hiding menu items — so the matrix reads Full vs read-only rather than hidden. Capabilities follow the Portal column of Account's permission matrix (SPEC-APP-ACC ACC-2).
| Menu item | Owner | Admin | Editor | Viewer |
|---|---|---|---|---|
| Monitoring | ||||
| Devices | Full | Full | Full | Read |
| Support | ||||
| Schedule | Full | Full | Full | Read |
| Tickets | Full | Full | Full | Full |
Within Devices, Editor can configure and set thresholds but cannot control equipment or push firmware (Owner / Admin only) — the cell reads Full for the surface, with those two commands reserved. Site locations are managed entirely in Account (ACC-1) and are not a Portal surface — the Portal carries no Site Locations page; each device shows its site as read-only context only (devices group and filter by site, PTL-6).
| Version | Date | Changes |
|---|---|---|
| 0.1 | 12 Jun 2026 | Initial draft — scope and five requirements from the platform model |
| 0.2 | 13 Jun 2026 | Vocabulary — fleet → devices: lead and PTL-1 now read "device monitoring" (SPEC-PRD v0.12); requirements otherwise unchanged |
| 0.3 | 26 Jun 2026 | Telemetry grounding + device taxonomy. Added §1 device families/models (Frigo · Koelkast · Nevera, six models — Nevera new, Device Model enum updated in SPEC-ERD; further cascade logged as an open question) and §2 telemetry data source (three IoT streams — telemetry · device twin · connection — and the time-series store, referencing SPEC-DDD-DVC / SVC-9). PTL-1 expanded (per-module readings, live stream). New requirements PTL-6…10: family/model identity, schema-aware telemetry for the heterogeneous fleet, device-twin visibility, connection state, history & export. PTL-2…5 meaning unchanged. |
| 0.4 | 26 Jun 2026 | Maintenance menu. PTL-3 reworked: the Portal surface is the Maintenance menu (renamed from Agreement) showing each device's single active maintenance agreement with its expiration above the previous-agreement history (latest→oldest). Detail consolidated into the new Maintenance PRD (SPEC-PRD-MNT). No change to PTL-1/2/4…10. |
| 0.5 | 27 Jun 2026 | Navigation & menu visibility (new §4). Documents the Portal sidebar (shell HUB_NAV) and a role × menu-item visibility matrix for the four customer roles. Records that Portal gates by action within a surface (PTL-5) rather than hiding menu items, with control/firmware reserved to Owner / Admin. Open questions and revision history renumbered §5–§6. No requirement-structure changes. |
| 0.6 | 28 Jun 2026 | Site Locations removed from Portal — sites are an Account-only surface. The Network → Site Locations menu group is dropped from the §4 nav rail and visibility matrix; site management lives solely in Account (ACC-1), and Portal shows a device's site only as read-only context (PTL-6). The shell HUB_NAV model and prototypes are updated to match. No change to the data model — the ERD already records Account as the owner (C·R·U·D) with Portal read-only. |
| 0.7 | 29 Jun 2026 | Messages merged into Tickets. The standalone Messages menu item is removed from §4 (nav rail + visibility matrix); the support/partner conversation now lives inside each ticket (PTL-4). The Service group is Maintenance · Tickets only. Prototype (apps/portal/Portal.html) updated to match. No data-model change — ChatThread/Ticket already share the conversation shape. |
| 0.8 | 29 Jun 2026 | Sidebar group renamed Service → Support. The second nav group (Maintenance · Tickets) is now labelled Support in §4 (nav rail + visibility matrix) and the prototype. Label only — no change to surfaces, requirements or gating. |
| 0.9 | 29 Jun 2026 | Dashboard removed — Devices is the landing surface. The standalone Dashboard menu item is dropped from the §4 nav rail and visibility matrix; the Portal now opens on Devices. PTL-1 reworded ("the device list and per-device telemetry", no dashboard) and PTL-6 ("the device list groups and filters"). Prototype (apps/portal/Portal.html) updated to match — the fleet-overview view and its layout Tweak are removed, default view is Devices, persisted dashboard landings migrate to it. No data-model change; PTL-1/6 IDs unchanged so traceability holds. |
| 0.10 | 29 Jun 2026 | Service scheduling (PTL-11 added). The Portal's Schedule surface gains the customer side of scheduling \u2014 standing preferences (windows \u00b7 blackout \u00b7 lead time) and accepting one of the time options RiverSync proposes for a corrective / maintenance / preventive visit (or declining all). Specified in the new SPEC-PWF-SCH workflow with entities VisitProposal \u00b7 VisitProposalOption \u00b7 SchedulingPreference (DM-57\u202659); Admin ADM-7 (propose) and Partners PAR-15 (read-only) are the counterpart sides; master ERD \u00a75 + master PRD updated the same turn. Nav/menu reflection in the prototype is a follow-up. |
| 0.12 | 30 Jun 2026 | Ticket creation & the comprehensive composer (PTL-4 extended). The Tickets command bar's right-edge primary is now New ticket; it opens a full-width composer (affected device, category → dependent sub-category, priority, details, image/log attachments) in place of the thread reader with the list still visible, plus RiverSync Assist live classification/similar-tickets/runbook suggestions. Expanded the ticket Category set and added SubCategory + OpenedByParty to ServiceTicket (new rule DM-60); the same composer is reused by Admin (ADM-6) and Partners (PAR-14) with role-aware authoring. Cascaded to SPEC-UIX-TKT v1.1, the ERD/Domain/DWF catalogs and the Admin/Partners PRDs the same turn. |
| 0.13 | 1 Jul 2026 | Data export removed (PTL-10 amended). PTL-10 History & export is now History only — telemetry stays browsable over selectable time windows, but the Portal offers no data-export function (neither telemetry nor device inventory); export is not a permitted capability. Prototype (apps/portal/Portal.html) updated the same turn: the Devices command bar's Export command is removed and the page is card view only (the list/table view toggle is dropped) — cards remain sortable, filterable and paged. No data-model change; PTL-10 ID unchanged so traceability holds. |
| 0.14 | 1 Jul 2026 | Device list filtering, sorting & the live feed indicator (PTL-6 detailed). PTL-6 now specifies the Devices surface as a sortable, paged card view with filtering consolidated into a comprehensive Filter dropdown on the command bar — family, status, site, region, maintenance tier and active-alarm-only, plus id/model/serial search. Prototype (apps/portal/Portal.html) updated the same turn: the always-on filter row became the command-bar dropdown, the command-bar icon aligns to the Portal app pill, the redundant “Devices” label is dropped, a live/offline telemetry-feed (WebSocket) indicator sits beside the device icon, and the Filter dropdown anchors to the command bar's right edge. No data-model change; PTL-6 ID unchanged so traceability holds. |
| 0.15 | 1 Jul 2026 | Richer at-a-glance device cards (PTL-6). Each device card is redesigned as a considered at-a-glance summary: a header (identity / status / family / firmware), a schema-aware telemetry panel with sparklines — now including supply-air, return-air and ambient temperature and humidity alongside power and efficiency/PUE — and a right rail that organises the maintenance agreement (tier, partner, term-progress bar, expiry) and active-alarm state. Card telemetry is live — values tween and sparklines stream (~2s cadence, paused when hidden, honouring reduced-motion) so the list simulates real feed data at a glance (PTL-1). An Ambient telemetry reading was added to both the refrigeration and converged schema builders in the prototype dataset (apps/portal/portal-data.js), plus supply-air on the converged card. No relational data-model change (telemetry lives in the time-series store, PTL-1 ⚠); PTL-6 ID unchanged so traceability holds. |
| 0.16 | 1 Jul 2026 | Filter dropdown on design-system controls; Region removed; Sites multi-select. The Filter dropdown is rebuilt on the DS form kit — Select (family, status), Segmented (maintenance tier) and Switch (active-alarms-only) — and Site is now a tag-autocomplete multi-select (each chosen site shows as a removable tag). The Region filter is removed: region is a partner sales-territory concept, not a customer device attribute. Device cards are aligned to the command bar (equal left/right gutters). Prototype updated the same turn. No data-model change; PTL-6 ID unchanged. |
| 0.17 | 1 Jul 2026 | Sort moved to the command bar & expanded; maintenance rail tidied. The Sort control moves to the right of the command bar (left of Filter) and becomes a comprehensive dropdown — an order toggle plus ten fields (needs-attention, id, status, active alarms, site, family, model, firmware, agreement-expiry, commissioned). On the card's right rail the redundant “Maintenance agreement” heading is removed (the tier badge is self-evident) and the tier SLA tooltip is no longer clipped by the card. Prototype (apps/portal/Portal.html) only; no data-model change; PTL-6 ID unchanged. |
| 0.18 | 1 Jul 2026 | Build-ready UI spec + monitoring fine-tuning. A dedicated device monitoring UIX spec (SPEC-UIX-DEV) now specifies the three monitoring surfaces to every control, state and realtime contract; cross-referenced from the header, PTL-6 and PTL-9. Folded the latest prototype fine-tuning into the requirements: PTL-6 records the inline autocomplete search moved into the device command bar (id/model/site/serial, keyboard-navigable, jump-to-device) and the Sort control now reading a plain “Sort” (no selected-field echo); PTL-9 records the command-bar Live / Offline feed indicator (animated broadcast icon) and the online/offline behaviour that pauses all real-time tile/sparkline motion (a prototype Online Tweak simulates feed loss). Added an on-page contents nav. Prototype (apps/portal/Portal.html) is the source of truth; no data-model change (telemetry lives in the time-series store, PTL-1 ⚠); PTL-6/9 IDs unchanged so traceability holds. |
| 0.19 | 2 Jul 2026 | Canonical family badge adopted (PRO-17). The §1 family table and PTL-6 now bind the family identity to the canonical product family badge (SPEC-PRD-PRO §3 — capability-axis glyph, --fam-* hue, capability tooltip). Prototype already composes it (FamilyChip → apps/account/rs-family.js); the pre-badge thermometer / snowflake / server icons are retired. No data-model change; PTL-6 ID unchanged so traceability holds. |
| 0.20 | 2 Jul 2026 | Square device-card chassis (PTL-6, presentation). The inventory card drops its corner radius — square chassis per the shell-chrome idiom — specified in SPEC-UIX-DEV v1.1 §5.2; prototype (apps/portal/portal.css) updated the same turn. No data-model change; PTL-6 ID unchanged so traceability holds. |
| 0.21 | 2 Jul 2026 | Device-detail multi-metric telemetry stack (PTL-1, PTL-10). PTL-1 now specifies the device-detail telemetry as a single full-width TimeSeriesStack card: three shared-time-axis panes — air temperature & humidity (return · supply · ambient air on °C, humidity on %RH), power draw & COP, and a door-access events pane (front · back · side doors, alarm past 5 min) — with event-milestone annotations, a Live / Paused control and a time-scale selector; PTL-10 notes the overview brush drives the whole stack. Prototype landed the same turn (apps/portal/portal-device.jsx · portal-data.js panes/markers · portal-charts.css). Build-ready detail added as SPEC-UIX-DEV §7; new telemetry fields (ambient, COP, door state) reflected in the Devices domain and Master ERD §5. PTL-1/10 IDs unchanged so traceability holds. |
| 0.22 | 2 Jul 2026 | Telemetry stack tuned to the DS reference (PTL-1, presentation). Time-scale set aligned to the design system — 5m · 30m · 1h · 1d · 1mo · 1y · 3y (default 1h); the Events milestones drop door-open (doors own a dedicated pane); the door pane's alarm threshold is 5 min and a single door never opens again while already open (non-overlapping per-door events); the air-temperature pane is taller so the lines aren't cramped. Prototype + SPEC-UIX-DEV §7.1 updated the same turn. No requirement change; PTL-1 ID unchanged. |
| 0.23 | 2 Jul 2026 | Continuous 3-year telemetry record + card header removed (PTL-1, PTL-10). The prototype now simulates one continuous 3-year history per device at adaptive resolution (30s recent → 1-day far back) with a diurnal + seasonal shape, so every scale (5m…3y) reads the same record — fine live detail at 5m, seasonal cycles at 3y. PTL-10 notes the 3-year record; the Telemetry card's header band is removed (the stack's legend/control row is the header). Prototype: portal-data.js seriesLong/cache, portal-device.jsx; SPEC-UIX-DEV v1.4. No requirement change; IDs unchanged. |
| 0.24 | 2 Jul 2026 | Alerts & alarms and Maintenance menus removed — both read on the device detail (PTL-2, PTL-3, §4). The standalone Alerts & alarms and Maintenance sidebar items and their pages are dropped; the sidebar is now Devices · Schedule · Tickets. PTL-2 (acknowledge · cause→effect · open-a-ticket) is served by the device detail's Alarms tab; PTL-3 (single active agreement + history, read-only) by its Maintenance tab. The §4 nav rail + visibility matrix and the caption are updated; cross-app alarm/agreement links (Tickets) now deep-link to the device's Alarms / Maintenance tab, and legacy alerts/maintenance routes redirect there. Prototype (apps/portal/portal-app.jsx, portal-tickets.jsx; portal-alerts.jsx / portal-maintenance.jsx deleted). Capabilities unchanged — only their surface; PTL-2/3 IDs unchanged so traceability holds. |