snipe/web/src/views
pyr0ball f48f8ef80f feat: multi-platform scaffolding — phase 1 (eBay-only, wire complete)
Backend:
- app/platforms/__init__.py: add SUPPORTED_PLATFORMS frozenset (single
  source of truth for platform validation); add must_include_mode and
  adapter fields to SearchFilters dataclass
- api/main.py: add platform: str = Query("ebay") to both /api/search
  and /api/search/async; validate against SUPPORTED_PLATFORMS (422 on
  unknown platform); thread platform into structured log lines; document
  Phase 2 registry extension point in _make_adapter

Frontend:
- SearchView.vue: platform tab strip (eBay active, Mercari + Poshmark
  disabled with "soon" badge) above search bar; eBay-specific controls
  (category select, data source, pages, keywords) hidden when platform
  !== 'ebay'; platform passed to SearchProgress
- search.ts: platform?: string added to SearchFilters; included in
  async search params when non-eBay
- SearchProgress.vue: platform prop + PLATFORM_LABELS map; status line
  reads "Searching eBay for…" / "Searching Mercari for…" dynamically
2026-05-02 20:09:36 -07:00
..
BlocklistView.vue fix(css): replace hardcoded rgba colors with color-mix(var(--token)) for light/dark parity 2026-04-13 20:56:07 -07:00
ListingView.vue feat: listing detail page with trust score ring, signal breakdown, seller panel 2026-04-16 11:48:30 -07:00
SavedSearchesView.vue feat: scammer blocklist, search/listing UI overhaul, tier refactor 2026-04-03 19:08:54 -07:00
SearchView.vue feat: multi-platform scaffolding — phase 1 (eBay-only, wire complete) 2026-05-02 20:09:36 -07:00
SettingsView.vue feat(prefs): display.currency preference with live exchange rate conversion 2026-04-20 11:02:59 -07:00