# TroveSnap Web — page/tab → feature breakdown (build list)

What each web page/tab is today and the **feature-level work to make it contract-ready**
(from `built-unwired`/demo → live). Grounded in the route + component audit (see the
**UI/UX** tracker tab and `docs/tracking/ui-readiness.json`). Each feature notes the
**gate(s)** that unblock it and the **wave** it lands in.

Status key: 🟢 live · 🟡 built-unwired (UI exists, demo or bypassing) · 🟠 partial · ⚪ planned.
The recurring theme: **the UI mostly exists; the work is live-wiring it to the enforced
contracts** (P2/P3 for vision, P5/P6 for data, the P9 gateway for all writes).

---

## Capture & vision  *(serves Web + App · Wave 3)*
- **Hunt / new-sale capture** 🟡 — `hunt` (demo), `EstateSaleForm`, `PhotoUploader` (live).
  - Wire capture to the **P1 scan I/O contract** + **P2 provider gateway** (no direct model calls).
  - Bulk capture: multi-photo, queue, progress (the Step-4/5 throughput pain).
  - Replace hunt demo data with live sale/candidate data.
- **Appraise panel** 🟡 — `AppraisePanel` (448L) → `/api/appraise` (tier-1 bypass).
  - Route through **P2/P3** (validated `TrustedScanResult`) + **P8** cost; kill direct Gemini.
  - No invented comparables (contract-enforced); show provenance + confidence.
  - Progressive inference UI (partial → refine), not "instant full appraisal" (D1).

## Review, promote & seller workspace  *(serves Web + App · Wave 4)*
- **Review queue + workflow center** 🟡 — `InventoryReviewQueue` (273L), `WorkflowCenter` (277L), demo.
  - Back with **live P5 candidates**; promote via **`promoteInventoryCandidate`** (one-door) under **P6 RLS**.
  - **Bulk review**: select-many, bulk price/tag/approve (high-volume Step-4 pain).
  - Keyboard-fast triage; reviewer assignment (P7 actor).
- **Sale workspace · item editor · publish** 🟡 — `SaleWorkspace`/`ItemEditor`/`PublishPreview` (live via `troveSnapApi`).
  - Move canonical writes to **P6 auth/RLS/domain functions** (retire `troveSnapApi` write path).
  - Publish = approval-gated; private candidate media vs. published media split.

## Sources & import  *(serves Web + Harness · Wave 4)*
- **Sources dashboard + connectors** 🟡 — `SourcesDashboard` (live), Drive/Photos/OneDrive OAuth.
  - **CSRF/tenant-bound OAuth state**; **D34 secret split**; durable media copy; **P5 candidate-only** writes.
- **CSV import wizard** 🟡 — `CsvImportWizard` (207L, demo) → live import-run + P5 candidates; idempotent replay.
- **Harness ingest** (web side of the desktop harness) — device/tenant register; metadata-only; redact paths.

## Marketplace & buyer  *(serves Web · Wave 4)*
- **Marketplace, map, sale pages, saved searches** 🟡 — `MarketplaceClient` (178L), `SaleMap`, `buyers/saved` (demo).
  - Replace demo data with **P6 public-safe projections**; retire `using(true)` RLS → membership RLS.
  - **`/api/out`**: approved-destination check (no open redirect); privacy-safe attribution.
  - Saved searches + **buyer alerts/notifications** (live events).
- **QR landing (`/go`) + outbound** 🟡 — resolve against the **Spine** QR/identity backbone + P6 data.

## Intake (public)  *(serves Web · Wave 4)*
- **Garage-sale submission + admin review** 🟡 — `GarageSaleSubmissionForm` (203L), `SubmissionReviewQueue` (demo).
  - Submit → **P5 candidate** → admin review → promote; spam/quality guard.

## Demand & analytics  *(serves Web · Wave 3)*
- **Demand + analytics** 🟡 — `demand` (127L), `analytics` (185L), demo.
  - Real numbers from **P4 ranking** + **P8 metrics**; **disposition / demand-recovery** for unsold items (Step-8 pain).
  - **Client reports / reconciliation** (Step-8 pain): per-sale payout report, sold/unsold, fees.

## Identity & agent  *(serves Web · Wave 2)*
- **Login / signup / identity** 🟠 — `AuthPanel` (demo+live) → real **tenant/membership** identity, server-side resolution via the **P9 gateway** (D33), **P6** RLS.
- **MCP read/candidate tools** 🟡 — `packages/mcp-server` → **P7** actor/tenant + **P5** candidate chain; idempotency; drop broad service-role.

## Admin & notifications
- **Admin: imports + submissions** 🟠 — ride the P5/P6 path; bulk ops.
- **Notification center** 🟠 — `NotificationCenter` (106L, demo) → live events + delivery (P8).

---

## Cross-cutting (applies to every page)
1. **The P9 gateway (D33)** — all surfaces call a trusted server/edge gateway, never Supabase directly; service-role server-only.
2. **Demo → live** — most components read `*DemoData`; the build is swapping those for contract-backed data (a `demo mode` flag can preserve the showcase).
3. **Bulk operations everywhere** — capture, price, tag, approve in batches (the dominant estate-seller time sink).
4. **Design-system consistency** + responsive/density pass (see [ui-ux-enhancements](ui-ux-enhancements.md)).
