Area: mobieusLearn (audit p8) · Surface: CourseCatalogController@catalog; templates/courses/catalog.php · Dimension: ui-ux · Severity: major
LearnWorlds, Teachable and Thinkific catalogs offer keyword search, category/tag filters, level and price filters, and sort (newest/popular). mobieusLearn renders every published course as one ungrouped grid with no way to find anything. The product intentionally ships rich taxonomy (learn_categories, learn_tags) and even ~300 marketplace categories elsewhere, but none of it is exposed to the learner browsing courses. Why it matters: once a tenant has more than ~10 courses the catalog becomes unusable, hurting discovery and sales of the long tail.
Evidence
src/Controllers/CourseCatalogController.php catalog() only fetches `TenantCourseOffer::published()` and optionally filters out free ones — it passes no search/category/tag/sort vars. templates/courses/catalog.php renders a flat `grid-template-columns:repeat(auto-fill,minmax(300px,1fr))` of offers; grep for `search|<form>|<select>|filter|sort|level` in the template finds only an incidental `strip_tags` match — there is no search box or filter UI at all.
Suggested fix. Add a search input + category/tag filter chips + sort dropdown to the catalog, backed by the existing learn_categories/learn_tags joins; paginate. Group by category when no filter is active.
Filed by the automated tenant-app audit and adversarially evidence-verified. Status: verified. Open — not yet actioned.
Patrick Bass
@mobieus