Wave

Web — Desktop destination creation

SCOPE (decided 2026-07-26): desktop web supports create/view/edit/delete for all 14 types, matching native except physically encoding an NFC chip. This wave owns CREATE only; edit/delete/detail belong to w_c454001a. BOTH BLOCKING DECISIONS ARE ANSWERED AND IMPLEMENTED (2026-08-05, Matthew) — branch feature/web, PR #224. D1 — APPROACH: extract the core, keep UI per-app. DONE. packages/destinations-core now owns the iOS-mirroring catalog, the builder routes, the worker wire contracts @tactile/sdk-js does not wrap, and the phone mask (~950 lines that were already host-agnostic). The host seam is two members — { apiBaseUrl, getAccessToken } — because those were the only couplings in the original 373-line API client. Builders stay per-app deliberately: they import web-mobile-local BottomSheet/Switch/ColorPicker/Icon (464 lines) and are phone-shaped, so hoisting them would mean porting a phone design system into packages/ to serve a desktop app. Same split as design-plugin-core/-ui. apps/web-mobile keeps its four module paths as thin re-export shims, so its ~12 call sites were untouched and it type-checks clean — that is what proves the seam. depcruise reports 0 new violations, which is the gate that would have caught a cross-app import. D2 — IA: "same as how we have iOS structured." Read from the iOS source, that means destinations are a TAB INSIDE ASSETS, not a top-level route: RootView.swift has four tabs with no Destinations among them, and AssetsViewModel.swift:21-22 is `enum Tab { case qrnfc, destinations, families }`. Implemented — apps/web Assets has a Destinations tab with a "Create destination" pill, and creation lives at /assets/destinations/new. SHIPPED: the three-screen flow (category grid → source picker → builder, with `forms` skipping the picker exactly as iOS does), plus six builders — url, notes, wifi, bluetooth, payment, and action with all eight sub-types. Coverage is partial and fails LOUDLY: an unmapped builder kind renders a named "not on desktop yet" state, never a blank pane. A new CI gate (tests/unit/destination-symbol-icons.test.ts) asserts every SF Symbol the shared catalog names maps to a real desktop icon. REMAINING: · t_8a9f7a37 — the 8 builders needing file upload or a nested editor: linkHub, contact, connectCard, document, gallery, video, menu, form. · t_a9f6f55e — fold Groups into the Triggers tab to finish iOS Assets parity. apps/web currently has FOUR tabs where iOS has three; iOS carries groups as expandable rows inside Triggers. Deliberately not done blind — removing the tab first would strand /assets/group/[id]. · t_cab15ca2 is done but one gap is worth its own task: iOS resolves the `location` action through a place-search geocoder; desktop takes lat/lng/address by hand. The wire shape is identical, so a geocoder can be added later with no migration. STALE CLAIM, CORRECTED: the original goal said apps/web-mobile "has partial creation for 7 of 14 types." False since merge 99e5e0d4 (2026-08-04) — it had all 14, 8,058 lines, which is why this wave became an extraction rather than the from-scratch build it was planned as.

TacTileLaunch TacTileWebWeb — Desktop destination creation
14/16 done2 open1 open blocker
Selected taskclear

Design the desktop creation flow

DoneOwner · Vivt_63012d03
Show the prompt
To doIn progressDoneBlockedPick a wave on the left · tap a task to expand it