Skip to content

fix(map-studio): fix editor save model, kiosk live data and other UX issues - #590

Merged
MrYuion merged 2 commits into
developfrom
t3/map-studio-ux-review
Oct 19, 2026
Merged

MrYuion merged 2 commits into
developfrom
t3/map-studio-ux-review

Conversation

@MrYuion

@MrYuion MrYuion commented Oct 19, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

A UI/UX audit of Map Studio found these problems:

  • The editor's "Leave without saving?" prompt is false. Edits are already stored, and a plain click marks the plan unsaved.
  • Delete and Ctrl+D act on one object of a multi-selection. Deleting a layer hides its objects, but they still get published.
  • Changing a publish dropdown writes system links to live PlaceOS at once.
  • The kiosk always shows random availability, because it never passes the level zone. It also has no error states, no touch pan or zoom, and no idle reset.
  • There are many smaller gaps: no rename or reorder, synced items that come back after delete, an import wizard that accepts empty SVGs, and missing accessible names.

Solution

Editor

  • Autosave is the model. A canDeactivate guard saves before you leave. The status shows "Saving…", "Changes pending" or "All changes saved".
  • Drags commit only past the drag threshold.
  • Multi-select delete and duplicate are one undo step each. So are a desk group and a layer delete; a layer delete also confirms first.
  • A plain wheel pans, and pinch or Ctrl+wheel zooms.
  • Ctrl+S never opens the browser's Save Page dialog.
  • Hit tests work on rotated objects.
  • Drawing on a locked or hidden layer shows a toast.
  • Panels keep their state when you switch tabs.
  • The validation panel also runs the publish preflight checks.
  • The editor has a complete shortcuts dialog, an empty-canvas hint, and fixes for ARIA roles, labels and states.

Panels

  • Publish keeps link changes local until you confirm. It prevents duplicate links, shows the current map, and shows the result with the level and URL.
  • Sliders and colour pickers commit once, when you release them.
  • Property inputs are validated.
  • Auto-number shows a preview and asks for confirmation.

Pages

  • The projects page shows the PlaceOS sync state, with a Retry button.
  • Deleted synced projects and floors are not imported again.
  • Opening a level from Concierge brings back a floor that was deleted locally.
  • Imported SVG floors show a preview from their stored markup.
  • You can rename projects, buildings and floors, and reorder floors.
  • Import wizard: blocks empty SVGs, keeps your choices when you go Back, imports into an existing project, and cleans up after a failed import.
  • Settings tests the connection before it saves.
  • Project cards use a real link, and forms have real labels.

Kiosk

  • Live availability comes from the level zone. A failed poll keeps the last good states, and the header shows when the data was last updated.
  • Offline and demo-data banners.
  • "Map not found" and empty-floor states.
  • Pan, pinch and wheel zoom, with a Reset view button.
  • A tap opens space details, also for rooms and desks from an imported SVG.
  • After 60 seconds with no input, the kiosk resets.
  • ?kiosk=1 hides Back and Share.
  • Status uses a legend with symbols, not colour only.
  • Search covers every floor.
  • Touch targets are at least 44px.

Testing

  • nx test map-studio: 112 tests pass. New tests cover batch actions, drag threshold, rotated hit tests, layer delete and reopen, shift-click selection, sync tombstones and availability polling.
  • nx lint map-studio and nx build map-studio pass.
  • I checked the projects page, project detail, editor and kiosk in a browser against a local server with no backend.

Known gaps

  • Redo after a layer delete leaves the empty layer behind.
  • The editor still uses mouse events only, so it has no touch drawing.
  • Failed local IndexedDB object writes are still swallowed. This behaviour predates this change.

Reviewed with sol-loop: 3 rounds with GPT-6.1-Sol on high, 4 more on the rebase onto #570, and 1 on the rebase onto #589 (final verdict: approve).

Changes made by Claude Opus 5.5 (claude-opus-5-5) in Claude Code, running in T3 Code.

🤖 Generated with Claude Code

@vercel

vercel Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated
frontend-templates Ignored Ignored Preview Oct 19, 2026 6:47am UTC

@MrYuion
MrYuion force-pushed the t3/map-studio-ux-review branch from d6ac22f to adc4fbf Compare October 19, 2026 04:59
…issues

The UI/UX audit of Map Studio found false save prompts, actions that
silently did less than they said, live PlaceOS writes without warning,
and a kiosk that always showed random availability.

- Editor: autosave with a leave guard, no dirty flag on a plain click,
  multi-select delete/duplicate, trackpad pan and pinch zoom, safer
  shortcuts, rotated hit tests, layer and placement feedback, kept-alive
  panels, validation that matches publish, and accessibility fixes.
- Panels: publish stages link changes and confirms before it writes,
  validated property inputs, and an auto-number preview.
- Pages: sync status, sync tombstones, rename and reorder, import
  wizard fixes, settings test-before-save, and accessible cards.
- Kiosk: live data from the level zone, offline and demo banners, error
  states, touch pan and zoom, tap details, idle reset, kiosk mode, and a
  non-colour status legend.
Rooms and desks from an imported SVG are drawn inside the source
picture. The kiosk now adds invisible tap targets for them in one
back-to-front draw order: zones, imported rooms, drawn rooms,
imported desks, drawn desks, then other objects.
@MrYuion
MrYuion force-pushed the t3/map-studio-ux-review branch from 462d3be to fe209ee Compare October 19, 2026 06:43
@MrYuion
MrYuion merged commit 485e916 into develop Oct 19, 2026
2 checks passed
@MrYuion
MrYuion deleted the t3/map-studio-ux-review branch October 19, 2026 06:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant