docs: add UX and UI guide
This commit is contained in:
1 parent
39832fcf80
commit
4656714837
1 file changed
+559
@@ -0,0 +1,559 @@
|
||||
# MinerOps UX/UI Guide
|
||||
|
||||
## Status
|
||||
|
||||
This document is the authoritative baseline for shared MinerOps user-experience
|
||||
principles and application-wide interaction rules. Focused companion documents
|
||||
will define detailed information architecture, screen behavior, and visual
|
||||
system decisions.
|
||||
|
||||
MinerOps uses the product identity:
|
||||
|
||||
**MinerOps**
|
||||
**Operational Intelligence for Mining**
|
||||
|
||||
The current interface is an early-stage, integrated application rendered by the
|
||||
FastAPI backend. The repository does not contain a separate frontend project or
|
||||
commit to a final frontend framework. Existing pages and controls are working
|
||||
foundations, not evidence that every experience described here is implemented.
|
||||
Future capabilities are identified as such throughout this guide.
|
||||
|
||||
## Product Experience Goal
|
||||
|
||||
MinerOps should help a technician or manager understand:
|
||||
|
||||
- what is happening;
|
||||
- where it is happening;
|
||||
- why it may be happening;
|
||||
- what happened previously; and
|
||||
- what action should happen next.
|
||||
|
||||
The interface should connect live observations to durable identity, physical
|
||||
location, repair and component history, operational context, and safe actions.
|
||||
It should never trade operational truth for visual simplicity.
|
||||
|
||||
## Primary Users
|
||||
|
||||
### Technician
|
||||
|
||||
Technicians need fast identification, floor-friendly navigation, repair context,
|
||||
clear next actions, and minimal avoidable data entry. Their common workflows
|
||||
must work on phones, tablets, and workstations.
|
||||
|
||||
### Manager / Site Operator
|
||||
|
||||
Managers and site operators need fleet state, site and room context, trends,
|
||||
work queues, risk concentration, and permission-controlled operational actions.
|
||||
They often move between summary and detail views.
|
||||
|
||||
### Read Only / Auditor
|
||||
|
||||
Read Only users and auditors need a coherent view of current state, immutable
|
||||
history, actors, timestamps, and outcomes without controls that imply they can
|
||||
change authoritative records.
|
||||
|
||||
### Administrator
|
||||
|
||||
Administrators need account, permission, configuration, deployment-health, and
|
||||
audit context. Administrative capability must not obscure the operational views
|
||||
they also use.
|
||||
|
||||
The same underlying data may be presented at different density or with different
|
||||
actions according to role and permission. Presentation differences must not
|
||||
change the meaning of the data.
|
||||
|
||||
## Core UX Principles
|
||||
|
||||
### Technician First
|
||||
|
||||
Optimize frequent floor workflows for fast recognition and safe completion.
|
||||
Prefer direct lookup, durable identifiers, clear state, and focused commands over
|
||||
multi-page data entry.
|
||||
|
||||
### Operational Awareness
|
||||
|
||||
Show scope, location, urgency, impact, freshness, and intentional operating state
|
||||
together. Users must be able to distinguish a fault from planned curtailment,
|
||||
repair work, stale data, or an unknown condition.
|
||||
|
||||
### Distinct Information Roles
|
||||
|
||||
Use each interface according to its strength:
|
||||
|
||||
- maps explain location and spatial concentration;
|
||||
- graphs explain trends and comparisons;
|
||||
- timelines explain history and causality; and
|
||||
- tables explain detail and support precise review.
|
||||
|
||||
Do not use a visually impressive representation when another format answers the
|
||||
operational question more clearly.
|
||||
|
||||
### Mine Map Is Primary
|
||||
|
||||
The Mine Map is a primary operational interface, not a decorative page. It
|
||||
should connect physical layout, current state, work context, and drill-down
|
||||
without forcing users to abandon spatial context.
|
||||
|
||||
### Search Everything
|
||||
|
||||
Durable identities, mutable network observations, serials, repairs, components,
|
||||
locations, users, and relevant events should be discoverable through one
|
||||
consistent search entry point, subject to authorization.
|
||||
|
||||
### Live By Default
|
||||
|
||||
Show the freshest trustworthy state by default. Always expose when it was
|
||||
observed, its source when useful, and whether it is stale or incomplete.
|
||||
|
||||
### Explicit Actions
|
||||
|
||||
Use explicit commands for operational changes. Do not hide lifecycle, repair,
|
||||
component, location, or fleet actions inside generic edits or implicit UI state.
|
||||
|
||||
### Immutable History Remains Visible
|
||||
|
||||
Historical facts, actors, timestamps, and corrections remain visible. A current
|
||||
projection may summarize history but must not replace it.
|
||||
|
||||
### Surface Operational Context
|
||||
|
||||
Place relevant location, neighboring assets, current repair, component, alert,
|
||||
and recent-history context near the object being inspected. Avoid making users
|
||||
reconstruct one situation across unrelated pages.
|
||||
|
||||
### Progressive Disclosure
|
||||
|
||||
Lead with the current status and likely next decision. Reveal diagnostics,
|
||||
history, raw values, and advanced controls as users ask for more detail.
|
||||
Progressive disclosure must not conceal critical risk or uncertainty.
|
||||
|
||||
### Three-Click Goal
|
||||
|
||||
Frequent workflows should normally be reachable and actionable within three
|
||||
meaningful interactions from the user's current operational context. This is a
|
||||
design goal, not permission to skip confirmation or validation for consequential
|
||||
actions.
|
||||
|
||||
### Keyboard And Touch Friendly
|
||||
|
||||
All core workflows must support keyboard navigation and appropriately sized
|
||||
touch targets. Hover-only controls and precision pointer interactions cannot be
|
||||
the sole path to an action.
|
||||
|
||||
### Accessible By Default
|
||||
|
||||
Accessibility is a design constraint from the first implementation, not a later
|
||||
polish phase.
|
||||
|
||||
### Honest Uncertainty
|
||||
|
||||
Unknown, stale, partial, estimated, and unavailable data must look different
|
||||
from known healthy or zero values. Do not invent certainty or interpolate across
|
||||
unsupported gaps.
|
||||
|
||||
### No Silent Mutation
|
||||
|
||||
Show the action being requested, the affected object, and the resulting state.
|
||||
Never alter authoritative records merely because a view opened, refreshed, or
|
||||
changed selection.
|
||||
|
||||
### Preserve Operational History
|
||||
|
||||
Authoritative history is not physically deleted. Use explicit void, correction,
|
||||
retire, or archive workflows. Confirmation language must name the operation and
|
||||
its consequences rather than asking only “Are you sure?”
|
||||
|
||||
## Application Shell
|
||||
|
||||
The application shell should provide:
|
||||
|
||||
- persistent primary navigation appropriate to the viewport;
|
||||
- one global search entry point;
|
||||
- an alerts and notifications area;
|
||||
- the current user, role, and session area;
|
||||
- a clear page title and current site, location, asset, or workflow context;
|
||||
- role-aware primary and secondary actions;
|
||||
- an optional contextual side panel; and
|
||||
- responsive behavior that preserves critical actions and state.
|
||||
|
||||
Desktop layouts may use a persistent navigation rail and side panel. Mobile
|
||||
layouts may collapse navigation and use a full-height drawer or sheet, but the
|
||||
current object, alerts, and primary action must remain easy to recover.
|
||||
|
||||
This guide does not choose final navigation labels or hierarchy. Those decisions
|
||||
belong in the future `docs/design/NAVIGATION.md`.
|
||||
|
||||
## Global Search
|
||||
|
||||
Global search should use one box without requiring a category selection first.
|
||||
Search targets include, where implemented and authorized:
|
||||
|
||||
- miners and Asset IDs;
|
||||
- miner and component serial numbers;
|
||||
- MAC and IP addresses;
|
||||
- repairs;
|
||||
- tracked components;
|
||||
- sites, rooms, racks, shelves, and operational locations;
|
||||
- technicians and users; and
|
||||
- events when event search provides operational value.
|
||||
|
||||
Results should be grouped by domain, show enough context to disambiguate similar
|
||||
identifiers, and support keyboard navigation and selection. A result preview
|
||||
must not reveal restricted data.
|
||||
|
||||
No-results states should repeat the interpreted query, distinguish no match from
|
||||
search failure, and suggest a narrower or alternate identifier without implying
|
||||
the record does not exist outside the user's permissions.
|
||||
|
||||
Recent and saved searches are possible future capabilities. They require clear
|
||||
retention, privacy, and permission behavior before implementation.
|
||||
|
||||
## Mine Map Principles
|
||||
|
||||
The Mine Map should show current spatial state and support drill-down through:
|
||||
|
||||
```text
|
||||
Site -> Room -> Rack -> Shelf or Position -> Miner
|
||||
```
|
||||
|
||||
It should represent both production and operational spaces, including:
|
||||
|
||||
- receiving;
|
||||
- diagnostics;
|
||||
- repair bench;
|
||||
- burn-in;
|
||||
- ready to install;
|
||||
- donor storage;
|
||||
- component storage;
|
||||
- quarantine; and
|
||||
- recycling or retired storage.
|
||||
|
||||
Map interactions should:
|
||||
|
||||
- expose status and future telemetry overlays;
|
||||
- reveal hotspots and concentrations rather than merely place objects;
|
||||
- support filters, single and multi-selection, and clear selection state;
|
||||
- open details in a side panel where space permits;
|
||||
- preserve pan, zoom, filters, and selection while inspecting details;
|
||||
- support site, room, rack, shelf, and miner drill-down; and
|
||||
- distinguish offline, in repair, intentionally curtailed, stale, degraded,
|
||||
unknown, and healthy states.
|
||||
|
||||
Current location foundations do not imply that this full Mine Map experience is
|
||||
complete. Historical map playback is future direction and is not required for
|
||||
an initial Mine Map implementation.
|
||||
|
||||
## Graph And Analytics Principles
|
||||
|
||||
Graphs are first-class operational interfaces, not dashboard decoration. They
|
||||
should support site, room, rack, selected group, and individual-miner scope as
|
||||
data becomes available.
|
||||
|
||||
Relevant measures include:
|
||||
|
||||
- hashrate;
|
||||
- power usage;
|
||||
- efficiency;
|
||||
- temperature;
|
||||
- availability; and
|
||||
- expected versus actual performance.
|
||||
|
||||
Graph interactions should provide:
|
||||
|
||||
- explicit time-range selection and timezone context;
|
||||
- comparison of compatible scopes and units;
|
||||
- synchronized operational-event annotations;
|
||||
- consistent unit formatting and axis semantics;
|
||||
- visible gaps, stale intervals, and missing sources;
|
||||
- aggregation and downsampling disclosure; and
|
||||
- detail values accessible without relying only on pointer hover.
|
||||
|
||||
Never draw misleading interpolation through unknown periods. Clearly label
|
||||
estimated, aggregated, or incomplete values. Graphs explain trends, maps explain
|
||||
location, timelines explain history, and tables explain detail.
|
||||
|
||||
Comparative fleet analytics and synchronized annotations are future capabilities
|
||||
unless a focused implementation task establishes them.
|
||||
|
||||
## Operational Context
|
||||
|
||||
Context panels or inline context may surface:
|
||||
|
||||
- neighboring miners with related faults;
|
||||
- shared PDU or network issues;
|
||||
- nearby temperature anomalies;
|
||||
- similar recent repairs;
|
||||
- component genealogy;
|
||||
- rack-level repair density; and
|
||||
- recent correlated outages.
|
||||
|
||||
Correlations must identify their scope, time window, evidence, and freshness.
|
||||
They may be rule-based and do not require AI. A correlation is supporting
|
||||
context, not proof of cause; the interface must not present it as certainty.
|
||||
Most correlation experiences remain future direction.
|
||||
|
||||
## Tables And Queues
|
||||
|
||||
Operational tables should be dense enough for repeated work while remaining
|
||||
readable. They should provide:
|
||||
|
||||
- a deliberate column hierarchy with identity and status first;
|
||||
- explicit sorting and allowlisted filtering;
|
||||
- discoverable row actions;
|
||||
- predictable single and multi-selection behavior;
|
||||
- preserved filters, sort, selection, and scroll when users inspect and return;
|
||||
- clear empty and no-results states; and
|
||||
- pagination or virtual scrolling for large fleets.
|
||||
|
||||
Keep bulk actions limited to operations with clear scope, authorization,
|
||||
validation, progress, and failure reporting. Selection must never imply that a
|
||||
bulk action is safe.
|
||||
|
||||
Saved views are a future capability. Their later design must define ownership,
|
||||
sharing, permission changes, and behavior when fields become unavailable.
|
||||
|
||||
## Forms And Explicit Commands
|
||||
|
||||
Forms and command dialogs should:
|
||||
|
||||
- use strong persistent labels rather than placeholder-only identification;
|
||||
- group fields by the operator's decision, not database layout;
|
||||
- validate structural input inline and preserve entered data after failure;
|
||||
- explain domain conflicts without exposing database details;
|
||||
- reveal every operational side effect before submission;
|
||||
- derive authoritative actor and timestamps from the session and server;
|
||||
- show only permission-appropriate actions;
|
||||
- explain why a visible control is disabled;
|
||||
- use confirmation only for consequential operations; and
|
||||
- return focus and context predictably after completion.
|
||||
|
||||
Optimistic UI is appropriate only when rollback is safe, obvious, and truthful.
|
||||
Do not optimistically show completion for miner control, repair transitions,
|
||||
component changes, or other multi-record operational workflows before the server
|
||||
confirms success.
|
||||
|
||||
## Timelines And History
|
||||
|
||||
Timelines show immutable chronological history. Each meaningful event should
|
||||
make the following visible when known:
|
||||
|
||||
- actor;
|
||||
- authoritative timestamp;
|
||||
- action;
|
||||
- affected object;
|
||||
- result; and
|
||||
- structured context needed to understand the change.
|
||||
|
||||
Use explicit database sequence when the domain defines one. Events may be grouped
|
||||
for scanning, but grouping must not reorder, merge, or erase facts. Historical
|
||||
events are not edited or deleted. Corrections appear as later correction or void
|
||||
events linked to the original.
|
||||
|
||||
Link directly to related miners, components, repairs, and locations when those
|
||||
records are authorized and available. Timeline filters may reduce the visible
|
||||
set, but the interface must indicate that filtered history exists.
|
||||
|
||||
## Status And Severity Language
|
||||
|
||||
Use stable semantic meanings across screens:
|
||||
|
||||
| Meaning | Use |
|
||||
| --- | --- |
|
||||
| Healthy / active | Operating within expected bounds or available for normal work |
|
||||
| Informational | Context that does not currently require intervention |
|
||||
| Waiting | Work is intentionally blocked on a dependency or next step |
|
||||
| Degraded | Operating outside expected bounds but not at immediate critical severity |
|
||||
| Critical | Immediate attention is required to avoid or address significant impact |
|
||||
| In repair | Removed from normal service under an active repair workflow |
|
||||
| Intentionally offline / curtailed | Not producing by deliberate operational decision |
|
||||
| Stale / unknown | Current truth cannot be established from sufficiently fresh data |
|
||||
| Retired / archived | No longer part of normal active operations but retained historically |
|
||||
|
||||
Domain states and alert severity are separate concepts. For example, `in repair`
|
||||
is not automatically critical, and stale data is not healthy merely because no
|
||||
fault is observed.
|
||||
|
||||
Final colors, typography, icons, patterns, and tokens belong in the future
|
||||
`docs/design/DESIGN_SYSTEM.md`. Every status must use text, icons, or patterns in
|
||||
addition to color.
|
||||
|
||||
## Notifications And Feedback
|
||||
|
||||
Feedback should distinguish:
|
||||
|
||||
- success confirmation;
|
||||
- validation error;
|
||||
- domain or concurrency conflict;
|
||||
- permission denial;
|
||||
- stale-data warning;
|
||||
- backend unavailable state;
|
||||
- background refresh failure;
|
||||
- long-running action progress; and
|
||||
- retryable versus non-retryable failure.
|
||||
|
||||
Success feedback should name the completed action and affected object. Validation
|
||||
feedback stays near the field and is summarized when necessary. Domain conflicts
|
||||
should explain what changed and what the user can do next.
|
||||
|
||||
Critical errors must not disappear on a timer. Long-running operations need
|
||||
progress, cancellation only when supported safely, and a durable final result.
|
||||
Retries must not duplicate non-idempotent commands.
|
||||
|
||||
## Loading, Empty, Error, And Offline States
|
||||
|
||||
Every data surface must distinguish:
|
||||
|
||||
- first load;
|
||||
- background refresh;
|
||||
- partial data;
|
||||
- stale cached data;
|
||||
- no matching results;
|
||||
- an empty new installation;
|
||||
- a permission-restricted section;
|
||||
- API failure;
|
||||
- database unavailable; and
|
||||
- network interruption.
|
||||
|
||||
First load should establish the shell and page context before progressively
|
||||
loading independent data. Background refresh should preserve usable content and
|
||||
show a restrained freshness indicator instead of replacing the page with a
|
||||
spinner.
|
||||
|
||||
Partial or cached data must identify what is missing and when the visible data
|
||||
was last known. “No data” must never be used for a failed request. Offline or
|
||||
interrupted workflows should preserve unsent user input and avoid claiming that
|
||||
an operational command succeeded.
|
||||
|
||||
## Responsive And Mobile UX
|
||||
|
||||
Technicians may use phones or tablets around the mine. Core workflows should
|
||||
provide:
|
||||
|
||||
- large, stable touch targets;
|
||||
- responsive drawers and side panels;
|
||||
- stacked layouts that preserve identity and status;
|
||||
- compact tables that prioritize essential columns and allow deliberate detail
|
||||
expansion;
|
||||
- mobile-first miner lookup and repair actions;
|
||||
- no desktop-only critical workflow; and
|
||||
- graceful recovery on unreliable Wi-Fi.
|
||||
|
||||
Do not shrink a desktop table until it becomes unreadable. Use prioritized
|
||||
columns, row detail, or a task-specific list at narrow widths.
|
||||
|
||||
Barcode and QR scanning are future capabilities. They should accelerate durable
|
||||
identity lookup without creating a competing identity system.
|
||||
|
||||
## Accessibility
|
||||
|
||||
All MinerOps interfaces must provide:
|
||||
|
||||
- complete keyboard navigation;
|
||||
- visible focus indicators;
|
||||
- semantic buttons, links, headings, dialogs, and form controls;
|
||||
- accessible names and screen-reader labels;
|
||||
- sufficient text and non-text contrast;
|
||||
- text, icons, or patterns in addition to color;
|
||||
- reduced-motion support;
|
||||
- accessible table headers, captions, and sort state;
|
||||
- chart summaries and keyboard-accessible data where charts carry meaning;
|
||||
- programmatic association between errors and fields; and
|
||||
- touch targets sized for reliable use in operational environments.
|
||||
|
||||
Focus must move intentionally when dialogs open, close, or report errors. Dynamic
|
||||
updates should announce important changes without flooding assistive technology.
|
||||
|
||||
## Performance And Live Updates
|
||||
|
||||
The expected experience includes:
|
||||
|
||||
- a fast initial shell;
|
||||
- progressive loading of independent data;
|
||||
- near-real-time updates where operational value justifies them;
|
||||
- no avoidable full-page refreshes;
|
||||
- preserved selection, filters, scroll position, and map context;
|
||||
- throttling or aggregation of high-frequency telemetry;
|
||||
- visible last-updated and freshness indicators; and
|
||||
- no layout or notification churn from insignificant changes.
|
||||
|
||||
Prioritize identity, status, freshness, and primary actions before secondary
|
||||
analytics. Live updates must merge safely with user interaction: they cannot
|
||||
clear input, move focus, close a dialog, reorder a selected row unexpectedly, or
|
||||
hide an error.
|
||||
|
||||
Near-real-time delivery mechanisms are an implementation decision. This guide
|
||||
does not require a particular client framework, polling strategy, WebSocket
|
||||
architecture, or state library.
|
||||
|
||||
## Permission-Aware UX
|
||||
|
||||
The UI should hide actions that are irrelevant and unauthorized, or disable them
|
||||
when seeing the action and its denial reason helps the user understand the
|
||||
workflow. A disabled control must explain what permission or state is missing.
|
||||
|
||||
The backend remains the authority for authentication and authorization. UI
|
||||
visibility is not a security boundary.
|
||||
|
||||
Read Only users must have a coherent inspection experience, including search,
|
||||
current state, freshness, and authorized history. Restricted records must not
|
||||
leak through search results, counts, previews, links, notifications, map
|
||||
aggregates, or error wording.
|
||||
|
||||
## Destructive And Irreversible Actions
|
||||
|
||||
Do not physically delete authoritative operational history. Use explicit:
|
||||
|
||||
- retire;
|
||||
- void;
|
||||
- archive; or
|
||||
- correction workflows.
|
||||
|
||||
Before an irreversible or high-impact action, show the affected objects, scope,
|
||||
operational consequences, and whether recovery exists. Use typed confirmation
|
||||
only for genuinely high-risk destructive actions where the additional friction
|
||||
meaningfully prevents mistakes.
|
||||
|
||||
Confirmation labels must name the command, such as “Void repair-part entry” or
|
||||
“Retire miner,” rather than “Confirm” or “Yes.” Never use an ambiguous dialog to
|
||||
mask an action's side effects.
|
||||
|
||||
## Design Documentation Structure
|
||||
|
||||
This guide governs shared experience principles. Future focused documents may
|
||||
define detailed behavior:
|
||||
|
||||
- `docs/design/DESIGN_SYSTEM.md`;
|
||||
- `docs/design/NAVIGATION.md`;
|
||||
- `docs/design/DASHBOARD.md`;
|
||||
- `docs/design/MINE_MAP.md`;
|
||||
- `docs/design/ANALYTICS.md`;
|
||||
- `docs/design/REPAIR_CENTER.md`;
|
||||
- `docs/design/MINER_DETAIL.md`;
|
||||
- `docs/design/COMPONENT_DETAIL.md`;
|
||||
- `docs/design/SEARCH.md`;
|
||||
- `docs/design/USER_WORKFLOWS.md`; and
|
||||
- `docs/design/OPERATIONAL_CONTEXT.md`.
|
||||
|
||||
These paths are planned documentation, not claims that the files or corresponding
|
||||
screens exist. Focused documents may add screen-specific requirements but must
|
||||
not weaken this baseline without a deliberate documented decision.
|
||||
|
||||
## Acceptance Criteria
|
||||
|
||||
A compliant MinerOps screen:
|
||||
|
||||
1. makes current status and scope clear;
|
||||
2. exposes data freshness and uncertainty;
|
||||
3. presents role- and permission-aware actions;
|
||||
4. preserves context during navigation and inspection;
|
||||
5. uses explicit commands for meaningful operational changes;
|
||||
6. keeps authoritative history and later corrections visible;
|
||||
7. handles loading, empty, partial, error, offline, and permission states;
|
||||
8. is keyboard accessible and uses semantic controls;
|
||||
9. remains usable at mobile widths and with touch input;
|
||||
10. does not imply certainty when data is stale, missing, or incomplete; and
|
||||
11. uses maps, graphs, timelines, and tables according to their proper roles.
|
||||
|
||||
## Final Principle
|
||||
|
||||
The interface should help users move from observation to understanding to action with the least possible friction, while preserving operational truth.
|
||||
Reference in new issue
Block a user