GIS-iPad

UI/UX Spec — iPhone Companion

Source And Scope

This spec is the canonical native implementation guide for the iPhone companion surface of Meridian. It is a scaled, scoped derivative of the iPad spec in ui_ux_spec.md. Where this file is silent, the iPad spec’s behavior, visual system, and Aero components apply, adapted to compact width per design_principles_iphone.md.

Build the UI with:

Do not copy prototype HTML/CSS/JS into production. Recreate behavior and the visual system natively. The iPhone is a universal-iOS build of the existing target gated by PlatformCapabilities.isPhone, not a fork.

iPhone Scope (Authoritative)

In scope for v1 iPhone:

Explicitly out of scope on iPhone (do not surface, not even disabled): geometry drawing/editing, snapping, the tool dock and draw bar, layer reorder/opacity/style/labels/ filters/lock/rename/delete/metadata, GeoJSON import, Open Data Library, spatial analysis, analysis history, field calculator, export, PDF map layout, blank project creation, duplication, and multi-selection workflows.

Global App Structure

Primary surfaces (only these exist on iPhone):

The Basemap, Bookmarks, and Measure entries live behind a single Map menu in the bottom action cluster so the cluster stays thumb-reachable on the narrowest iPhones.

There is no iPhone Settings screen, Project Gallery management grid, Attribute Table, Create Feature flow, Map Layout, or Open Data Library in v1.

Global state concepts the iPhone observes (narrow subset):

Reusable Components

Reuse the shared Aero components (glass, icon button, primary button, ghost button, coordinate readout). The iPhone replaces the iPad’s persistent panels and tool dock with a compact top status pod, a bottom action cluster, and sheets. The drawing-related components (tool dock, draw bar, multi-selection bar) do not appear on iPhone.

Aero Glass

Same three-layer anatomy (material + 1 px border + inner highlight + soft shadow + grain). Used sparingly: top status pod, bottom action cluster, coordinate chip, navigation cluster chips, toasts, and sheet headers. Sheet bodies that carry dense content (attribute form, layers list) use the near-opaque surface-sheet variant for legibility.

Phone Status Pod

Top-leading floating context, the iPhone analogue of the iPad Project Pod merged with save state.

Content:

Behavior:

Save Affordance

A single primary control that commits the local edit session and publishes the package to iCloud. It is the iPhone’s most important action.

Specs:

Bottom Action Cluster

Floating bottom-center glass cluster, the iPhone’s reachable command surface (replaces the iPad tool dock). It contains only viewing/annotation actions — never drawing tools.

Content (left to right):

While measuring, a compact glass measure bar appears above the cluster with the live distance/area readout (SF Mono), a Line⇄Area toggle (enabled once 3 points exist), an undo, and a Done action.

Specs:

Coordinate Readout

Same as iPad: bottom-leading glass chip, accent dot, latitude/longitude and zoom in SF Mono, legible over all basemaps. Updates with map-center/crosshair context.

Bottom-trailing map controls, compacted for iPhone.

Content:

Rules:

Screen: Phone Project Library

Purpose:

Layout:

Document-state badges (first-class, not color-only):

Behavior:

Screen: Phone Map Workspace

Purpose:

Layout:

Map interaction:

Selection:

Camera persistence:

Sheet: Layers (Visibility Only)

Purpose:

Layout:

Behavior:

Sheet: Feature Inspector

Purpose:

Layout:

Behavior:

Sheet: Attribute Form

Purpose:

Layout:

Behavior:

Flow: Add A Note

Purpose:

Steps:

  1. Tap Add Note in the bottom action cluster.
  2. Choose Text point or Callout (a compact picker; default to text point if only one is offered initially).
  3. Tap the map to place the note anchor.
  4. A compact editor sheet captures the note text (and callout target/leader for callouts), reusing createMarkupLayer / addMarkupItem / updateMarkupItem.
  5. Confirm places the note; it renders immediately on the map as non-authoritative markup.

Rules:

Flow: Save To iCloud (Publish + Conflict Detection)

Purpose:

Happy path:

  1. The Save Affordance shows dirty state with a change count.
  2. Tapping it commits the local edit session, checkpoints SQLite, and stages a clean package (omit -wal, -shm, and rebuildable cache artifacts; run integrity/privacy checks; keep basemap credentials and editor-only IDs out of the package).
  3. The app re-reads the source package revision/fingerprint in iCloud.
  4. If unchanged, it atomically replaces the iCloud package, advances the stored base revision, clears dirty state, and shows a confirmation toast.

Conflict path:

Sheet: Conflict Resolution

Layout:

Rules:

Document States And Status Display

The iPhone treats document availability and sync as first-class, visible state. Surface these consistently in the Project Library badge and the Status Pod line:

Do not rely on color alone for any of these — pair with glyph and text.

Camera And Pitch

Adaptive Behavior

Primary target: iPhone portrait.

Dark and light:

Accessibility

Required:

Map accessibility:

Implementation Checklist

Platform setup:

iCloud documents:

iPhone screens and sheets:

Camera:

State: