Skip to content

Redesign Android + iOS operator app UI — Control tab needs quick-access feature surfaces (design doc first) #888

@SlyWombat

Description

@SlyWombat

Goal

Redesign the operator-mobile UI (Android today, iOS to be added) into an award-winning, smart, clean experience. The current Stage / Control / Status three-tab shape is the starting point — Stage and Status are largely retained; Control is the focus of the rework.

Per feedback_critical_path_spec_first: write/update an authoritative design doc first before any code lands. Operator vetoes piecemeal patches in critical-path subsystems, and the operator UI is exactly that.

Tab requirements

Stage — unchanged

Same functionality as v1.7.126. Layout view, fixture placement read-out, gyro/puck claim. Cosmetic refresh OK; behaviour identical.

Control — major rework

Today's Control tab is a fixed strip of widgets. The new design must expose quick access to any number of operator surfaces from a single screen, without nested menu diving:

  • Grab an individual DMX fixture and control it directly (e.g. trigger bubbles on the Chauvet Hurricane Bubble Haze X2 Q6 — bubble on/off, haze level, fan speed, LED colour, strobe). Should work for any fixture in the layout, profile-driven.
  • Grab a moving head and start aiming it (claim → live pan/tilt + colour, hands-on takeover).
  • Auto Brightness — one-tap enable/disable + master multiplier.
  • Pick and run a show — show selector + transport (play / stop / loop) without leaving Control.

Constraints:

  • Operator-only — no editing of layout, actions, timelines, profiles (per feedback_android_operator_not_editor).
  • Must work one-handed on a phone in a dim room (large tap targets, high contrast, no reliance on hover).
  • Must scale to many fixtures (12+) without becoming a search problem — favourites, recent, grouping.
  • Visual language follows the Kinetic Prism design manifesto: dark-first, bloom, Space Grotesk, shared tokens with desktop SPA.
  • UI parity rule still applies (feedback_ui_parity): any control surface that exists in the mobile Control tab must also exist on the desktop SPA.

Status — unchanged shape

Performer health, RSSI, uptime, last PONG. Cosmetic refresh OK.

Cross-platform

The same design must carry into a native iOS app. Implementation strategy is open (Kotlin Multiplatform / native SwiftUI mirror / React Native / Compose Multiplatform) — the design doc decides based on:

  • ability to reuse the existing UDP binary protocol + REST client code,
  • visual fidelity to Kinetic Prism,
  • App Store + Play Store distribution friction (operator currently sideloads APK — that won't fly on iOS).

Deliverables (in order)

  1. Design doc in docs/design/mobile_ui_redesign.md covering:
    • Information architecture for Control (how the quick-access surfaces compose without nesting).
    • Wireframes for each surface (fixture-direct, moving-head grab, Auto Brightness, show picker/transport).
    • Component inventory + Kinetic Prism token map.
    • iOS strategy decision + rationale.
    • Migration path from current Android app (incremental vs. greenfield).
    • Test strategy (Playwright is desktop-only; what's the mobile equivalent?).
  2. Operator review + sign-off on the doc before any code.
  3. Implementation broken into staged PRs per the doc.

Out of scope for this issue

  • Desktop SPA redesign (separate effort if needed).
  • Editing surfaces — operator app stays operator-only.

Acceptance

  • Doc merged and approved before any UI code.
  • Control tab demonstrably reaches each of {direct DMX fixture, moving head, Auto Brightness, run a show} in ≤2 taps from app open.
  • Android + iOS share a single design language and the same operator mental model.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions