Draft for review. Columns are devices and their tracks, rows are knowledge areas.
Every box is a path, and a path is an ordered set of courses. Click a box to see its courses;
the boxes it builds on light up.
written all courses writtenin review waiting on a pull requestpartial some courses writtenplanned not written yet
How paths and courses split
A course is the unit a learner enrolls in and finishes: one topic, one track, a few hours.
It is named <Device> <Track> <Topic>, for example ESP Bare Metal GPIO.
A path is a box in the grid: a row (what you learn) crossed with a column (on what).
On the site a path is a Program, and the LMS enforces the course order inside it.
Some rows span every column: Foundations, Drivers and Embedded Development with AI do not depend on a track.
A driver written against embedded-hal runs on every column, so it is one path, not nine.
A course has one home. A device intro (ESP-00, STM-00) opens every Peripherals path of its device;
it is the same course in both, so a learner who switches tracks does not repeat it.
On the async columns (embassy-rp, embassy-nrf, embassy-stm32) the peripherals are already async,
so their Async row is only synchronization and concurrency. On ESP the async row repeats the peripherals async,
because the Peripherals path there is blocking.
How dependencies get covered
Course level stays as it is. The prereqs in each course.yaml are the truth for a course.
They show on the course page and the panel here.
Path level, new: a requires: list per path in paths.yaml, holding other paths.
The rule is simple: every path requires the Peripherals path of its column. The few cross edges are written down:
bare-metal Connectivity requires bare-metal Async (esp-radio and embassy-net are async),
Capstones require Drivers, and On-Device AI on ESP requires Connectivity for CSI.
Foundations are recommended, never enforced. Many readers come from the book or the newsletter and already know them.
Soft gate, not a lock. A path shows "Builds on" with a tick per finished path. A learner can still enroll,
and sees a one-line note with a link to what is missing. Hard locks only stay inside a path, where the LMS already orders courses.
Skip ahead. Each Peripherals path ends with its assignments chapter; a learner who passes the
assignment quiz of a path counts it as done for requires:, without enrolling in every course.
One check in CI: a path may only require a path in the same column or a spanning row, and no cycles.
path_sync writes the requirement into the Program description until the portal tab reads it.