UI/UX readiness

Three surfaces — what's built today vs. what each becomes when its contract lands. Rows = the wave that makes a feature contract-ready; each card shows today's audited state + the gates it's gated by. · Design & enhancement docs → · Pain points →

live Built and contract-backed — ready   built · unwired UI exists but bypasses or still awaits its contract (needs wiring)   partial Partially built   planned Not built yet. Built ≠ ready — much of the web UI exists but bypasses its contract (⚠ bypassing), per the legacy quarantine (D32). QA gates/sprints attach to a surface as its features here reach live.

Contract-ready ↓
Desktop Harness

Local 'credentials stay on your machine' folder-watch → review candidates (apps/harness).

TroveSnap Web

The full web product — marketplace + buyer, seller mgmt, the /trovesnap workspace, admin, connectors (apps/web).

TroveSnap App

Expo/React-Native native scan loop → hosted API (apps/mobile).

Agent surfacebuilt · unwired
MCP read / candidate tools
packages/mcp-server · tier-1 quarantine
MCP server exists; live mode must resolve actor/tenant, use the P5 candidate chain, enforce idempotency, drop broad service-role access.
P7P5⚠ bypassing
Identitypartial
Login / signup / identity
AuthPanel 143L · demo + live-call
Auth panel present (demo + some live); real tenant/membership identity + server-side resolution come with P6 + the P9 gateway (D33).

Capturebuilt · unwired
Folder-watch → review candidates
apps/harness/harness.mjs 99L · POST /api/harness/ingest
Watches a folder, POSTs new images to /api/harness/ingest → review queue. Works, but writes outside the P5 one-door (guard: metadata-only, redact local paths, register device/tenant, idempotent).
P5⚠ bypassing
Identitypartial
Device / tenant registration + token
static harness token today
Uses a static harness token; needs device+tenant identity through the P9 gateway.
Review & promotebuilt · unwired
Review queue + workflow center
InventoryReviewQueue 273L + WorkflowCenter 277L + ReviewQueue 125L · all on demo data
Substantial review/promote UI, but it's demo-backed — no live P5 promoteInventoryCandidate / P6 RLS behind it yet.
P5P6⚠ bypassing
Sellerbuilt · unwired
Sale workspace · item editor · publish
SaleWorkspace 240L + ItemEditor 219L + PublishPreview 205L · live-call via troveSnapApi (tier-1 bypass)
Built and live — but canonical writes go through troveSnapApi, not P6 auth/RLS/domain functions; needs the P6 path.
P6P5⚠ bypassing
Sourcesbuilt · unwired
Sources + cloud connectors + CSV import
SourcesDashboard 243L + SourceImportPanel 103L (live) · CsvImportWizard 207L (demo) · Drive/Photos/OneDrive OAuth
OAuth connector flows built; need CSRF/tenant-bound state, D34 secret split, durable media, and P5 candidate-only writes.
P5P6⚠ bypassing
Sellerbuilt · unwired
Seller dashboard + discounts + harness setup
seller 87L + DiscountPhaseEditor 140L + HarnessSetupCard 108L · demo data
Seller management UI built on demo data; needs P6 tenant/membership + live persistence.
Marketplace / buyerbuilt · unwired
Marketplace, map, sale pages, saved searches
MarketplaceClient 178L + SaleMap 104L + buyers/saved 143L · demo data; /api/out live
Buyer/marketplace UI built on demo data; public reads still on `using(true)` RLS (tier-1 retire → P6 membership RLS + public-safe projections); `/api/out` needs an approved-destination check.
P6⚠ bypassing
Intakebuilt · unwired
Garage-sale submission + review
GarageSaleSubmissionForm 203L + SubmissionReviewQueue 118L · demo data
Public intake + admin review UI built on demo data; the submit→review→promote path needs P5/P6.
Buyer / QRbuilt · unwired
QR landing + outbound (/go, /api/out)
/go 212L · demo data; depends on the Spine QR resolver
QR landing built on demo data; resolves against the Spine identity/QR backbone + P6 public-safe data once live.
Notificationspartial
Notification center
NotificationCenter 106L · demo data
Notification UI built on demo data; needs live events + delivery.
Review & promoteplanned
Save / sync to review queue
in-session list only — no durable save yet
Items currently save to the in-session list only; durable save → P5 candidate + sync needs the gateway.

Capturebuilt · unwired
Hunt / new-sale capture
hunt 220L (demo) · EstateSaleForm 198L + PhotoUploader 107L (live-call)
Capture UI is real, but scan I/O isn't on the P1 contract / P2 provider gateway yet; hunt runs on demo data.
Visionbuilt · unwired
Appraise (vision result panel)
AppraisePanel 448L · demo + live-call → /api/appraise (tier-1 bypass)
Big, fully-built panel — but `/api/appraise` calls Gemini directly (no P1/P2/P3 validation, can emit invented comps, no P8 cost). Must route through the provider gateway.
P2P3P8⚠ bypassing
Demand / analyticsbuilt · unwired
Demand + analytics
analytics 185L + demand 127L · demo data
Analytics/demand dashboards built on demo data; depend on P4 ranking + P8 metrics for real numbers.
Capturebuilt · unwired
Native scan loop (photo → item)
apps/mobile/App.tsx 673L · hosted API (Expo POC)
Expo POC: photo → hosted API → review/edit → save in session. Calls the backend (secrets server-side) but not yet the P1/P2/P3 contract via the P9 gateway.