Decoded is a free site of computer science courses that tie each piece of theory to the tools it powers: finite automata to regex engines, context-free grammars to parsers, sorting analysis to the library call you make every day.
Most CS courses teach the abstract model and stop there. Theory of Computation is the usual example. DFAs, transition graphs and accepted languages can feel like they have nothing to do with real work, yet the same ideas run regex engines, compilers and a good part of security tooling. The theory isn't the problem. What's missing is a map from what you learn to what you can do with it.
Decoded tries to draw that map. Every lesson answers one question:
How does this theory turn into skills, tools and technologies I'll actually use?
| Course | Status | Lessons |
|---|---|---|
| Theory of Computation | Available | 17, across Foundations, Finite Automata and Context-Free Languages |
| Algorithm Design & Analysis | Available | 14, from Big-O through sorting, searching, graphs, greedy and DP |
| Advanced Algorithms & Analysis | Available | 24, from recurrences and hashing through red-black trees, shortest paths and P vs NP |
| Computational Mathematics | Available | 31, across matrices, polynomials, number theory and cryptography, in MATLAB with Python and ML links, plus a project that cleans noise out of a voice recording |
| Computer Organization | Available | 10, a top-down tour of the CPU, buses, memory and storage |
| Logic Design | Available | 23, from gates and K-maps to latches, flip-flops and a memory unit, with live circuits |
| Microprocessors | Available | 12, real 8086 assembly with a step-through simulator |
| Computer Architecture | Available | 15, instruction sets, cache, virtual memory, I/O, pipelines and parallelism |
| Operating Systems | Available | 17, from system calls and processes through synchronization, CPU scheduling and virtual memory, with Linux and Java threads labs |
| Discrete Mathematics | Available | 23, across logic, sets, proof, counting, graphs and probability, with interactive truth tables, relations and proofs |
| Data Structures | Available | 16, from arrays and linked lists through hash maps, heaps, tries and union-find, in Python with Java and C++ |
| Computer Networks | Available | 13, from layers and packets through subnets, routing, TCP, congestion control, DNS and HTTPS |
| Computer Graphics | Available | 20, from pixels, color depth and resolution through CRT and flat-panel displays to DDA and Bresenham line drawing, step by step |
| Computer Literacy | Available | 3 |
| The Exam Mind | Available | 4 |
| Distributed Systems | Coming soon |
Lessons mix reading with step-through visualizers, practicals and end-of-module quizzes. Progress is saved in your browser, and signing in with GitHub or Google is optional if you want it to follow you between devices.
You need Node.js 18 or newer. Bun works too and is what CI uses.
npm install
npm run dev # http://localhost:8080| Command | What it does |
|---|---|
npm run dev |
Vite dev server on port 8080 |
npm run build |
Production build, plus social preview images and per-page HTML |
npm run preview |
Serve the production build |
npm run lint |
ESLint |
npm run test |
Vitest, one run |
docs/development.md covers the directory layout and config files, and docs/brand.md covers the visual identity.
Lessons are MDX files under src/content/<course-slug>/. src/content/registry.ts lists every course, module and lesson, and the pages look everything up there. To add a lesson, write the .mdx file, import it in the registry and add an entry to its module.
To add a whole course, follow docs/building-a-course.md, which includes a prompt you can give a coding agent.
Important
There is no MDXProvider. An MDX file that uses Callout, PracticalApplication or another custom component has to import it from @/components/mdx/MdxComponents itself.
Every push to main builds the site and publishes it to GitHub Pages at decoded.stack42.tech. The CI workflow runs lint, typecheck, tests and a build on each push and pull request.
Sign-in and saved progress run on a Cloudflare Worker in worker/, which pushing doesn't deploy. Run npm run migrate (if there's a new migration) and then npx wrangler deploy from that folder, before pushing any site change that depends on it.
