Discovery
Touchpoints
| Touchpoint | Component / endpoint |
|---|---|
| Featured carousel | useAgents() → GET /agents?featured=true |
| Browse grid | BrowseAgents component → GET /agents |
| Tag filter chips | Derived from useTags() + client-side count |
| Search | SearchContext (header input) + client-side filter |
| Card → detail transition | Framer Motion layoutId="agent-icon-{prefix}{slug}" etc. |
| Detail page | useAgentBySlug(slug) + useAgentPricing + useAgentReviews |
Status filtering
The frontend never sees draft or inactive agents — the backend's findAll filters them out by default unless the caller has platform_admin role and explicitly requests them.
coming_soon agents ARE returned and rendered, but with a "Coming soon" badge and a non-navigable card that opens the NotifyDialog instead of routing to detail.
Pagination
The catalog endpoint paginates by cursor (?cursor=&limit=20). The current marketplace UI requests limit=50 and renders the lot — there's no infinite scroll yet. If the catalog grows past ~100 agents, switch to a real paginated grid.
Search semantics
The current implementation is client-side filtering of the full catalog. Substring match against name + tagline + description. No fuzzy match, no synonyms.
If you want server-side search, add a ?q= query param to GET /agents and route to ILIKE (Postgres) or a dedicated search index.