Embedded & IoT · Intermediate · 1–2 weeks
ESP32 Air Quality Station
A connected sensor node that measures CO₂, PM2.5, temperature, and humidity, and streams readings over MQTT to a live dashboard.
- ESP32
- C++ (ESP-IDF or PlatformIO)
- MQTT
- InfluxDB
- Grafana
Features
- Sensor drivers over I²C and UART with calibration
- Deep-sleep power management for battery use
- MQTT with reconnect and local buffering during outages
- Over-the-air firmware updates
- Dashboard with thresholds and alerts
Bonus: A custom PCB designed in KiCad and a 3D-printed enclosure, shown in photos in the README.
Embedded & IoT · Advanced · 2–3 weeks
PID Motor Controller on FreeRTOS
A closed-loop DC motor speed and position controller on an STM32, with a desktop app for live plotting and tuning.
- STM32
- C
- FreeRTOS
- Quadrature encoder
- Python (PyQt, pyqtgraph)
Features
- Encoder reading using hardware timer peripherals
- PID loop running at a fixed rate in its own RTOS task
- Serial protocol with framing and checksums
- Desktop GUI with live plots and gain sliders
- Host-side unit tests for the control logic
Bonus: An auto-tuning routine (relay or Ziegler–Nichols) with a before/after step-response plot.
Embedded & IoT · Advanced · 2–3 weeks
FPGA Game Console with VGA Output
Pong or Breakout built entirely in hardware with Verilog, driving a VGA monitor straight from an FPGA board with no CPU at all.
- Verilog or SystemVerilog
- Vivado or Quartus
- Basys 3 or DE10-Lite board
- Verilator
Features
- VGA timing generator for 640×480 at 60 Hz
- Sprite drawing and collision logic in hardware
- Debounced button input and a score on the seven-segment display
- Testbenches with automated waveform checks
- Clean module hierarchy with resource and timing reports
Bonus: Sound effects generated in hardware through PWM audio output.
Systems · Advanced · 2–3 weeks
LSM-Tree Key-Value Store
A persistent key-value database built from scratch with a write-ahead log, memtable, SSTables, and compaction, like a tiny RocksDB.
- Rust or C++
- TCP
- criterion / Google Benchmark
Features
- Write-ahead log with crash recovery
- Memtable flushed to sorted SSTable files
- Bloom filters to skip unnecessary disk reads
- Background compaction
- Simple TCP protocol with a CLI client
Bonus: Benchmarks against SQLite with throughput and latency graphs in the README.
Systems · Advanced · 2–3 weeks
RISC-V Emulator with Debugger
An RV32I CPU emulator that runs real programs compiled with GCC, plus a step debugger for registers and memory.
- C++ or Rust
- RISC-V GCC toolchain
- SDL2 (optional)
Features
- Fetch, decode, and execute for the full RV32I instruction set
- ELF loader for compiled binaries
- Memory-mapped UART so programs can print
- Step debugger with register and memory views
- Passes the official riscv-tests suite
Bonus: A 5-stage pipeline view that visualizes hazards, stalls, and forwarding cycle by cycle.
Systems · Advanced · 2–3 weeks
Mini Container Runtime
Your own version of docker run, built from scratch: isolated processes with their own filesystem, process tree, network, and resource limits.
- Go or C
- Linux namespaces
- cgroups v2
- OverlayFS
Features
- PID, mount, UTS, and network namespaces
- Root filesystem set up with pivot_root from an image tarball
- CPU and memory limits using cgroups v2
- Layered filesystems with OverlayFS
- veth networking so containers can reach the internet
Bonus: Pull and run real images from Docker Hub by implementing the registry API.
Systems · Advanced · 2–3 weeks
Compiler for a Small Language
A compiler for your own small language, with variables, functions, loops, and structs, that outputs WebAssembly or x86-64 assembly and runs real programs.
- Rust, C++, or OCaml
- WebAssembly (WAT) or x86-64
- A test harness
Features
- Hand-written lexer and recursive-descent parser
- Type checker with clear error messages that point at the source
- An intermediate representation with constant folding and dead-code elimination
- Code generation to WebAssembly or assembly
- Test suite of example programs with expected output
Bonus: A web playground that compiles and runs programs right in the browser.