Polish: imperial display, mobile ergonomics, clear-bed, keyboard nudging #18

Closed
opened 2026-07-18 18:19:39 +00:00 by steve · 0 comments
Owner

Part of epic #20 · Design: DESIGN.md

Context

With the core loop complete (#15), this pass makes pansy feel good day-to-day — especially on a phone in the garden with dirty hands. Grab-bag by design, but every item is small and shippable independently; check them off as they land.

Scope

  • Imperial sweep: audit every place a measurement appears (inspectors, forms, labels, garden dims) — a garden with unit_pref: imperial shows ft/in everywhere, inputs accept ft/in, storage stays cm. Consolidate any stray conversion helpers into web/src/lib/geometry.ts.
  • Mobile ergonomics: touch targets ≥44px (handles, palette, plop selection at low zoom — enlarge hit areas beyond visual size via transparent hit circles); bottom-sheet inspector drag-to-dismiss + snap points; palette as a thumb-reachable bar; touch-action/overscroll audit so the browser never scrolls/refreshes mid-gesture; test with DevTools throttling and a real phone.
  • Clear bed: action on a focused plantable object — confirm dialog ("Clear N plantings from ?") → sets removed_at on all its active plantings (loop of PATCHes is fine; a bulk endpoint arrives with #19's ClearObject — use it if already merged).
  • Keyboard nudging (desktop): arrows move the selected object/plop 1cm, Shift+arrows 10cm; PATCH debounced on key-idle (~400ms) so held keys don't spam.
  • Empty states: no gardens (→ create prompt, exists per #8 — verify), empty garden (hint to drag from palette), empty bed in focus (hint to plant), /plants search with no hits.
  • Small paper cuts: favicon + page titles per route; loading/error states for the editor query; a 404 route.

Out of scope

  • New features (undo/redo, grid snapping, background images — all post-v1). Anything backend beyond what clear-bed needs.

Key files & patterns

  • Touches most of web/src/editor/; unit helpers in web/src/lib/geometry.ts.

Dependencies

Blocked by #15.

Acceptance criteria

  • Phone walkthrough of the full core scenario (create garden → bed → plant → share-view) feels deliberate, with no accidental browser scrolls, missed taps, or unreadably small targets.
  • An imperial garden never leaks a metric value anywhere in the UI; a metric garden never shows ft/in.
  • Clear-bed empties a bed after confirm and survives reload; nudging moves precisely and persists.
Part of epic #20 · Design: [DESIGN.md](https://gitea.stevedudenhoeffer.com/steve/pansy/src/branch/main/DESIGN.md) ## Context With the core loop complete (#15), this pass makes pansy feel good day-to-day — especially on a phone in the garden with dirty hands. Grab-bag by design, but every item is small and shippable independently; check them off as they land. ## Scope - [ ] **Imperial sweep**: audit every place a measurement appears (inspectors, forms, labels, garden dims) — a garden with `unit_pref: imperial` shows ft/in everywhere, inputs accept ft/in, storage stays cm. Consolidate any stray conversion helpers into `web/src/lib/geometry.ts`. - [ ] **Mobile ergonomics**: touch targets ≥44px (handles, palette, plop selection at low zoom — enlarge hit areas beyond visual size via transparent hit circles); bottom-sheet inspector drag-to-dismiss + snap points; palette as a thumb-reachable bar; `touch-action`/overscroll audit so the browser never scrolls/refreshes mid-gesture; test with DevTools throttling and a real phone. - [ ] **Clear bed**: action on a focused plantable object — confirm dialog ("Clear N plantings from <name>?") → sets `removed_at` on all its active plantings (loop of PATCHes is fine; a bulk endpoint arrives with #19's ClearObject — use it if already merged). - [ ] **Keyboard nudging** (desktop): arrows move the selected object/plop 1cm, Shift+arrows 10cm; PATCH debounced on key-idle (~400ms) so held keys don't spam. - [ ] **Empty states**: no gardens (→ create prompt, exists per #8 — verify), empty garden (hint to drag from palette), empty bed in focus (hint to plant), `/plants` search with no hits. - [ ] **Small paper cuts**: favicon + page titles per route; loading/error states for the editor query; a 404 route. ## Out of scope - New features (undo/redo, grid snapping, background images — all post-v1). Anything backend beyond what clear-bed needs. ## Key files & patterns - Touches most of `web/src/editor/`; unit helpers in `web/src/lib/geometry.ts`. ## Dependencies Blocked by #15. ## Acceptance criteria - Phone walkthrough of the full core scenario (create garden → bed → plant → share-view) feels deliberate, with no accidental browser scrolls, missed taps, or unreadably small targets. - An imperial garden never leaks a metric value anywhere in the UI; a metric garden never shows ft/in. - Clear-bed empties a bed after confirm and survives reload; nudging moves precisely and persists.
steve added the frontendpolish labels 2026-07-18 18:19:39 +00:00
steve closed this issue 2026-07-19 04:44:26 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: steve/pansy#18