Content repos — publishing your own repository¶
Adaptive Learner ships an official content library, but the content system is open: you can run your own content repository on GitHub, connect it in the app, and make it available to other learners. This page is the overview; the full step-by-step instructions are in the Content-Repo Guide.
What is a content repo?¶
A content repo is a GitHub repository that holds content sets in the Adaptive Learner format. A set is a collection of lessons for one language pair and level (for example "Spanish A1 for German speakers") or for one knowledge domain (for example "Python basics").
The official library and all user repos use the same format -- there is no separate "official" schema. The moment your repo passes validation, it is a first-class content source. You never need a server of your own: a content repo is just files in a Git repository.
Prerequisites¶
- A GitHub repository (public; private is possible too, via a per-repo token).
- A root
manifest.yamlthat lists your sets. - Lessons in the lesson format (schema v1.3+; current is v1.4).
- Python 3 with PyYAML, to validate locally before you publish.
The authoritative format references live in the official content repo:
Directory layout¶
A content repo follows a fixed tree. The source language (the language the explanations are written in) is the top folder; the target language and level form the next one:
my-content-repo/
manifest.yaml # root manifest: lists every set
sets/
de/ # source language (German speakers)
es-a1/ # target language + level (Spanish A1)
manifest.yaml # set manifest: lists the lessons
lessons/
01-greetings.json # one JSON file per lesson (NN-slug.json)
assets/ # optional: images / audio
scripts/validate_content.py # the validator (from the starter kit)
Validate locally¶
Exit code 0 when every set passes, otherwise 1 with a per-file report. It checks the schema, the directory structure, and the quality minimums (at least 5 exercises, 2 exercise types, 1 theory step per lesson, non-empty card fields, and so on).
How is it listed in the app?¶
Once your repo validates, a learner connects it under
Settings > Data > Content repositories: paste the URL, the app
fetches the root manifest, validates technically, syncs and caches the
sets. They then appear in the Content Browser with a source badge.
Repos can also be shared via an /add-repo link plus a QR code.
A repo reaches the in-app Recommended repositories section only
through the project team's curated recommended-repos.json -- the
channel for official endorsement (Trust 3).
Trust levels¶
The trust level tells the learner how much vetting the content has had. It is about provenance and review, not a quality verdict.
| Level | Name | Meaning |
|---|---|---|
| 1 | Validated | Schema correct, quality minimums pass -- automatically on sync. Content not individually reviewed. |
| 2 | Verified | Contributed by the community and reviewed by a maintainer for content correctness. |
| 3 | Official | Curated and quality-assured by the project team. |
Trust 2+ expects more than the technical minimums: accurate translations, correct articles/genders, complete accents, sensible progression, plausible distractors, and cultural accuracy. An optional in-app AI review helps authors catch such issues before sharing (see EXP-033); it is advisory and never blocks sharing.
Reciprocity for courses and websites (EXP-029)¶
Lessons and domains can carry companion media (videos, podcasts,
articles, books, courses, websites). The filter for commercial media is
reciprocity, not price: free media is always allowed; commercial
courses/websites only when the provider links back, runs their own
content repo, or has a documented partnership. This turns content
authors into ecosystem partners rather than advertisers. Details in
docs/explorations/EXP-029-media-reciprocity.md.
Starter kit as a template¶
The fastest start is the ready-made starter repo
astrapi69/adaptive-learner-content-test:
it contains docs/, per-domain templates, a complete example lesson
(the Inception effect), a runnable example set, books.yaml, and the
validator. Fork it, replace the example lesson with your own, register
it in the root manifest.yaml, validate, and connect the repo in the
app.