Contribute

The catalog is only as complete as the people who fill it.

MADRASA currently holds 51 research structures but only 5 education programs. Morocco has far more of both. Every addition is reviewed in public, against an official source.

Share what is missing

Send a proposal to the MAIR team without a GitHub account, or contribute through the project’s GitHub workflow.

Suggest an entry

Easiest · takes two minutes

Fill in a short GitHub issue template with the name, host institution and official link. A maintainer turns it into a catalog entry.

Open a submission issue

Open a pull request

For contributors comfortable with Git

Edit the JSON directly, run the validator locally, and submit. Your entry lands in the dataset exactly as you wrote it.

Read CONTRIBUTING.md

Inclusion rules

What gets accepted

Taken directly from the project’s contributing guide · these are the rules maintainers actually apply at review.

Include

  • Offered by a Moroccan university, school, faculty, research center or recognised training institution.
  • Clearly related to AI, machine learning, data science, big data, robotics, computer vision, NLP, bioinformatics, AI-adjacent cybersecurity, digital health or smart systems.
  • A Moroccan research structure with visible AI-related teaching, supervision, projects or publications.
  • A doctoral structure, lab, center or team that supervises AI-related research · even if its official name is broader than AI.

Leave out

  • Generic computer science programs with no visible AI, data or research component.
  • Private training offers without a reliable source.
  • Expired calls, unless marked as nonactive.
  • Entries without at least one URL.
  • Personal opinions, rankings or unverified claims.

Adding an entry, step by step

  1. Check it is not already listed

    Search the catalog first · entries are deduplicated by name, city and host institution.

  2. Find an official source

    A university, school, lab or ministry page. Official PDFs on an institution domain count. Secondary sources only when nothing official exists.

  3. Add one JSON object

    Programs go in catalog/education_programs.json, labs and centers in catalog/research_structures.json. Keep list fields as lists.

  4. Set last_checked to today

    Every entry records the date a human last confirmed the source, in YYYY-MM-DD form.

  5. Run the validator

    python scripts/validate_catalog.py must pass, and python scripts/build_stats.py regenerates the counts if they changed.

  6. Open a pull request

    CI re-runs validation on every pull request. A maintainer reviews the source before merging.

Run the checks locally

# validate every record against the schema
python scripts/validate_catalog.py

# regenerate api/stats.json and the badges
python scripts/build_stats.py

# confirm the generated files are in sync
python scripts/build_stats.py --check

# preview this site locally
python scripts/serve.py

The same validator runs in CI on every pull request, so a failing check locally means a failing check there too.

56Entries today
18Institutions covered
7/12Regions with an entry
August 2026Most recent verification

Five of Morocco’s twelve regions have no entry at all yet. Southern and eastern institutions are the biggest known gap.