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 (shipped)
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 12 chapters are written (ch12 = Game Boy
Emulator capstone, PDF-exclusive) plus 4 appendices. The product now builds
four local outputs: companion.pdf, companion-demo.pdf,
companion-solutions.pdf, and companion-complete.pdf. The 2026-04-15
revision/QA pass validated the current baseline at 48 exercises / 12 chapters / 4 appendices.
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
- PDF promotion gate — Gumroad listing updates (P1.6), price floor adjustment (P1.7), distribution priming HN/Reddit/Bluesky (P1.8). Active plan:
VHCosta/csl → plans/2026-04-20-design-companion-v1x-plan.md. - PDF pre-publish audit — GUI viewer audit, full visual artifact pass all four outputs, release sign-off note.
- Strategic questions — PDF versioning, long-term pricing, exercises repo as independent product, expansion beyond C. See source-product-strategy.