We are currently using Tutor with the Open edX Ulmo release and are planning a structured course categorization and filtering system using the existing LMS and Course Discovery setup.
The required metadata includes:
- Primary knowledge domain
- Primary competency field
- Optional secondary competency field
- Course format
- Certification type
- Catalog visibility
- Last relevant update date
These fields need to be available in Discovery and the search index so they can support filtering, faceting, sorting, dynamic counters, and deduplicated results. For example, a course may match through both its primary and secondary competency fields, but it should still appear and be counted only once.
Our current idea is to create a Django plugin or backend extension that manages the taxonomy and course metadata, synchronizes it with Discovery or Meilisearch, and updates the indexing and search behavior.
This would initially be implemented for our current Tutor Ulmo setup and the existing Discovery-based catalog. However, we plan to upgrade to Verawood later, where the catalog experience may move to the Catalog MFE. We therefore want to avoid tightly coupling the solution to the current Discovery frontend.
Has anyone implemented a similar structured taxonomy and filtering system in Course Discovery?
We would particularly appreciate guidance on:
- Whether an existing plugin or reusable implementation already exists
- Whether the taxonomy should be managed in Studio, a Django plugin, or Discovery
- How custom metadata should be synchronized and indexed
- How primary and secondary mappings, counters, and deduplication should be handled
- How to design the backend and API so the Ulmo implementation can later be reused or adapted for Verawood and the Catalog MFE
Any examples, repositories, or architectural recommendations would be very helpful.

