C Systems Lab Course — Overview
A ground-up systems programming curriculum targeting developers with OOP backgrounds (Java, C#, JavaScript). The project has two deliverables:
Web App (complete)
A free, self-hosted React/Vite site with a dark terminal aesthetic. 10 modules, each containing 5 lessons + 1 capstone project. Deployed to Cloudflare Pages. Progress tracking via localStorage. Key design choice: inline styles + CSS variables (no Tailwind). Fonts: JetBrains Mono (body/code), Bebas Neue (headings).
Content is data-driven — each module lives in src/data/modules/m{N}.js exporting a structured object with lessons and sections. Section types include text, heading, code, callout, breakdown, stages, list, action, shell, expect. A simulated terminal (terminalScripts.js) provides interactive practice per lesson.
Companion PDF (complete — pre-publish)
A paid Typst-based PDF sold on Gumroad. Adds what the static site can’t: exercises with annotated solutions, deeper “why” explanations, real-world codebase connections (SQLite, Redis, CPython, Linux kernel), a debugging chapter, and interview prep. All 11 chapters written plus Appendices A (Debugging) and B (Interview Prep). Appendix C (repo guide) pending public GitHub URL.
Module Map
| # | Title | Subtitle | Lessons | Project |
|---|---|---|---|---|
| 1 | m01-c-is-not-java | Mindset shift for OOP developers | 5 | CLI Calculator |
| 2 | m02-pointers-memory-model | The core of C | 6 | Implement the String Library |
| 3 | m03-dynamic-memory | You own the heap | 5 | vec_t — Dynamic Array |
| 4 | m04-structs-unions-bitfields | Laying out data in memory | 5 | Free-List Allocator |
| 5 | m05-c-preprocessor | A separate language inside .c files | 5 | Debug Logging System |
| 6 | m06-file-io-syscalls | Your code talking to the OS | 5 | xxd — Hex Dumper |
| 7 | m07-processes-signals | The Unix process model | 5 | Minimal Shell |
| 8 | m08-sockets-networking | Network code that works | 5 | HTTP/1.1 Static File Server |
| 9 | m09-concurrency | Threads, mutexes, race conditions | 5 | Thread Pool with Work Queue |
| 10 | m10-going-below-c | Registers, assembly, hardware | 5 | Coroutine Library |
Concept Progression
The curriculum follows a deliberate bottom-up path: compilation model → types → pointers → heap → data layout → preprocessor → OS interface (files → processes → network) → concurrency → hardware. Each module assumes mastery of previous ones.
Key Design Decisions
- OOP audience framing: Every concept is introduced relative to what a Java/C# developer already knows, then stripped down to what C actually does.
- No textbook structure: Lessons read like guided walkthroughs, not reference material.
- Projects are substantial: Shell, HTTP server, thread pool, coroutine library — these are real systems, not toys.
- PDF as paid upsell: The web app is free and complete; the PDF adds structured practice and depth for serious learners.
Open Work
- meta-project-status: Detailed completion tracking
- Game Boy emulator ch12 — PDF-exclusive capstone chapter; recommended Option A. Not yet written. See meta-gb-emulator.
- Terminal rework — simulated terminal is honest but not functional. Phased plan: WASM for Modules 1–4, local companion binary for Modules 5–10. See meta-terminal-plan.
- Strategic questions — PDF versioning, long-term pricing, exercises repo as independent product, expansion beyond C. See source-product-strategy.