Mobile Canvas UX Analysis

Tauri mobile (WKWebView on iOS, WebView on Android). A QNTX mobile app is a node in a decentralised mesh network — it can operate offline via WASM (query parsing, attestation storage in IndexedDB, fuzzy search, classification) and gains more capabilities by connecting to other QNTX nodes. The canvas is the primary workspace; the glyph tray is the main navigation surface.

Glyph Tray: Touch Browse

The tray's desktop interaction (mouse proximity morphing) has been extended to touch.

How it works

Touch near the tray enters browse mode. Thumb slides up/down through glyphs — the same proximity morphing pipeline (easing, baseline boost, text fade) drives the visual feedback. Lifting the thumb opens the glyph with highest proximity.

touchstart near tray → browse mode, preventDefault (block scroll)
touchmove            → feed coordinates into proximity system
touchend             → find peaked glyph → morphToWindow/Canvas → collapse rest

Implementation

CSS

What still works

Window Manifestation: Already Touch-Aware

manifestations/window.ts:316-401 handles both mouse and touch for window dragging. No changes needed.

Canvas Manifestation

For a viewer/monitor, the canvas needs to display the current state legibly and allow navigation.

Canvas Pan — Single finger drag (mobile/touch)

canvas-pan.ts implements touch-based panning for mobile and responsive design mode. Single finger drag anywhere on the canvas (including on glyphs) pans the viewport. Desktop uses two-finger trackpad scroll and middle mouse button drag.

Touch handlers are always set up (even on desktop) to support browser responsive design mode testing.

Canvas zoom — Pinch-to-zoom (mobile/touch)

Two-finger pinch gesture zooms the canvas (0.25x–4x). Zoom origin tracks the pinch center so the point between your fingers stays stationary. Desktop uses Ctrl+wheel / Cmd+wheel. Both touch and desktop handlers are always registered regardless of viewport width.

Rectangle selection — Works at all viewport widths

Rectangle selection (click-drag on canvas background) is registered unconditionally. Previously gated behind a one-time isMobile media query check that prevented it from working if the canvas was opened at narrow width.

Canvas editing interactions are mouse-only

Glyph drag, resize, spawn menu, meld — all use mousedown/mousemove/mouseup exclusively. On mobile/touch devices, these interactions are not currently available. Glyphs can be viewed, the canvas panned and zoomed, and rectangle selection works, but glyph manipulation requires desktop.

Future work could add touch-based glyph editing via long-press, dedicated edit mode toggle, or gesture-based interactions.

Tap Target Inventory

ElementDesktopTouch (pointer: coarse)Status
Glyph dot (tray, mobile)8×8px + 44px activation zone12×12px + 44px zoneFixed — touch browse bypasses dot size
Window title bar32px tall44px tallFixed
Window minimize btn24×24px44×44px, 20px fontFixed
Window close btn24×24px44×44px, 20px fontFixed
Canvas minimize btn32×32px48×48px, 20px fontFixed
Canvas action bar buttons22×22px40×40px, 16px fontFixed
Canvas spawn buttons40×40px48×48px, 22px fontFixed
Window title bar (drag)100%×32px100%×44pxWorks (touch handlers exist)

All touch sizing is gated behind @media (pointer: coarse) — desktop unchanged. Inline style.width/style.height removed from window button creation in window.ts so CSS class rules (and the media query) control sizing.

Recent Fixes

Status Indicators (status-indicators.ts)

Command Palette (symbol-palette.css)

Layout (core.css)

Canvas Pan (canvas-pan.ts)

Canvas Zoom (canvas-pan.ts)

Canvas auto-open (main.ts)

Safe areas (responsive.css)

Responsive handler registration (canvas-workspace-builder.ts)

Offline Capability (WASM)

The browser WASM module (web/wasm/, 488KB) provides local compute without a server connection:

CapabilityRust corebrowser.rsTS wrapperUI wired
Query parsingYesYesYesYes (fuzzy search)
Attestation CRUDYesYes (IndexedDB)YesYes (ax-glyph, ts-glyph)
Fuzzy searchYesYesYesYes
ClassificationYesYesNoNo
Merkle syncYesYesNoNo
Cartesian expansionYesNoNoNo
Claim grouping/dedupYesNoNoNo

See ADR-005 for the integration strategy. "Rust core" = the shared qntx-core crate. "browser.rs" = #[wasm_bindgen] exports. "TS wrapper" = web/ts/qntx-wasm.ts. Each column is a step in the wiring pipeline.

Remaining Work

GapPriorityNotes
Offline ax-glyph fallbackHighUse WASM queryAttestations() when server unreachable
Unified search (SPACE to open)HighReplace left-panel query bar with floating search overlay on canvas
Light mode (#221)MediumUI is dark-mode first; light mode is a large feature
Touch-based glyph editingLowGlyph manipulation currently desktop-only; acceptable for now
Remove root canvas minimizeLowBlocked on unified search — canvas becomes permanent background
App Store packagingLowIcons, launch screen, privacy manifest — blocked on Apple Developer account