Draft for review. Columns are devices and their tracks, rows are knowledge areas.
Every box holds one or more paths, and a path is an ordered set of courses. The colour is the path's status,
the badges are the hardware it uses. Click a path to see its courses and support; the paths it builds on get a dashed outline.
written (on main, synced or published)in review (pull request open)partly writtencontent ready (book, blog or code), not on the LMS yetplannedXIAO ESP32-C3 hardware in useXIAO RP2040 plannedµFerris on the µFerris baseboard
Paths that exist today
Every path builds on the learner's machine with ter-cli. Coming for all of them: coding in the browser,
sim86 (which boards it covers is to be decided) and remote boards (onMCU, µFerris bench). Click a path for its full detail.
Planned paths
In purple: the content exists in the book, the blog or learn-stm32f4-rs and only needs turning into courses.
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 sits in a box of the grid: a row (what you learn) crossed with a column (on what).
A box can hold more than one path when the topics are distinct, for example WiFi and Bluetooth LE under
ESP Bare Metal Connectivity, or a path would grow past about five courses.
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.