$ whoami

Hi, I'm Keith.

By day I design and build systems for people. This is where I go down the rabbit holes: kernels, instruction sets, sensors, and whatever broke last night. It's a lab notebook, not a highlight reel.

name
Keith Gangarahwe
based
Harare, Zimbabwe · UTC+2
day job
systems & software engineer, final-year student
writes in
Zig, C, C++, Go, TypeScript
targets
RISC-V (ESP32-P4, ESP32-C3), ARM7TDMI, QEMU virt, ESP32-S3
tools
QEMU, GDB, build.zig, ESP-IDF

What this is

A public research notebook. Posts get written while the thing is being built, not after it works, so the wrong turns stay in: the kernel that built, linked, ran with zero errors and printed nothing; the dissertation proposal that didn't land. If a post explains a fix, it probably also explains the three things I tried first.

What's on the bench

10 posts in total. The writing page has all of them, and the projects page groups them into series that read best in order.

Why so low-level?

Because that's where the interesting failures live. A microcontroller doesn't have an operating system to hide behind, and a translator either produces the right instruction or it doesn't. The same instinct runs through everything here, from the kernel to the farm controller: watch a signal you already have, model what "correct" looks like, and shout when reality departs from it.

How this blog is built

  • SvelteKit with every page prerendered, and posts written in Markdown (mdsvex).
  • Iosevka for code and Iosevka Aile for text, subset at build time to only the characters the site uses.
  • Link-preview cards rendered at build time, one per post.
  • Static files on Cloudflare. No analytics, no trackers, no cookie banner.
  • An RSS feed, because it's still the best way to follow a blog.

Elsewhere

  • keithgang.dev: the clean-cut version, with the systems I build, the products, and how to work with me.
  • GitHub: the code behind every series.
  • hello@keithgang.dev: corrections, questions, or "you're doing it wrong" are all welcome.

© 2026 Keith Gangarahwe