Keeping courses & content current
Full runbook: OPERATING.md in the repo. The essentials:
The golden rule
Code alone doesn't change what learners see, courses render from the database. After a merge to
main, two GitHub workflows do it for you: Migrate production database applies new migrations,
then Seed production courses re-runs seed:courses, refreshes the course chat's source
index for the courses whose files changed, and embeds any new or changed lesson of a CYOA course for
its crossroads (pnpm cyoa:index:prod --list shows what still needs it). Other seeds are still run by hand:
pnpm db:migrate:prod # only if the automatic run failed
pnpm seed:courses:prod # only if the automatic run failed
pnpm seed:<another seed>
When a lesson was edited in the app
A seed never overwrites a lesson someone edited in the app since the last seed. It leaves it as it is and the course's instructor (and the platform owner) see a warning on Teach on every visit. Open the course's Teach page, compare the app's text with the course file's, and choose Keep the app edit (the warning stays quiet until the course file changes again) or Take the course file's version.
Which seed owns what
- seed:courses, civics (incl. all state-civics), the AI ladders, Hoodoo, Ed.L.D., cyber, and most authored courses.
- seed:languages, Spanish / French / Portuguese / Italian.
- seed:langchain, the 3 LangGraph courses.
- seed:health, NASM / ECS / Read-Your-Body. seed:speedway, ElementaryMBA.
- seed:faa, FAA Part 107. seed:bvc:real, Better Vice Club. seed:map, the maps.
Every seed is idempotent (upserts by slug, skipping lessons edited in the app), so re-running is always safe. On a fresh database, run seed:tenants first, then the content seeds.
Editing without a seed
Lesson text, glossary, sources, and quick-recall prompts can be edited in-app on the
Curriculum tab at /teach/<courseId>, those save straight to the database, no seed needed.
Learner reports
pnpm reports:list (or /admin/reports) shows what learners filed via "Report a problem".