Platform-Wide Vendor Picker

Replaces the flat vendor dropdown on campaign deliverable assignment with a searchable, filterable, recommendation-ranked picker. Vendors are now discoverable platform-wide (cross-workspace) for assignment.

2nd release that day

Replaces the flat vendor dropdown on campaign deliverable assignment with a searchable, filterable, recommendation-ranked picker. Vendors are now discoverable platform-wide (cross-workspace) for assignment.

Architecture change

  • Migration b0c1d2e3f4a5 adds is_platform_wide BOOLEAN NOT NULL DEFAULT TRUE to vendors table; existing vendors backfilled to true
  • Vendors can now be found and assigned across workspaces; existing tenant-scoped endpoints (GET /vendors, /vendors/me, /vendors/{id}) preserved untouched for backward compatibility

Backend

  • New GET /vendors/service-types — public master taxonomy (21 standardized service types across 8 categories: Video, Visual, Content, Audio, Marketing, Development, Advisory)
  • New GET /vendors/search — platform-wide, role-gated to advertiser/agency/SA. Supports q, service, category, rating_min, verified_only, currency, max_budget, sort (recommended/rating/rate/name), for_deliverable_id for context-aware recommendations
  • Returns per-vendor derived fields computed from single pre-query (no N+1): active_deliverables_count, on_time_pct, distinct_clients_30d
  • Recommendation score blends: service match (25%) + category overlap (20%) + rating (15%) + on-time delivery (15%) + prior jobs with advertiser (10%) + verified bonus (8%) + workload inverse (5%), with explainable match_reasons per card
  • Fuzzy fallback matching for freetext vendor.services values against standardized service types

Frontend

  • New VendorPickerModal component (searchable filters + paginated card grid + match-reason chips)
  • New useVendorServiceTypes hook (module-cached, static fallback)
  • /campaigns/[id]/deliverables page — "Browse Vendors" button replaces the flat vendor dropdown

Preserved (untouched)

  • GET /vendors (agency's own roster, tenant-scoped) still returns 200
  • Vendor self-access, deliverables, invoices, approvals — all intact

---

Want to see it in your own workspace?

Bring planning, discovery, delivery, and measurement into one platform.