Uthman Oladele

Backend Engineer

Backend engineer. I write Go (sometimes it compiles).
I think first, build second — so it tends to hold up in production.
Don't take my word for it. Look below.

# Projects · 18

Kyu

Background work that must not get lost. Distributed job queue for Go — PostgreSQL is the durable source of truth, Redis only the priority index, so jobs survive a full Redis wipe. Dead-letter management, embedded dashboard, CLI, and Prometheus metrics. Benchmarked at 52ns/op with 0 allocations.

GoPostgreSQLRedisPrometheus

Phylax

Stop polling the database. Minimal PostgreSQL logical replication client — streams committed row changes from the WAL with a five-line OnChange callback, webhooks, or a live SSE console. Decode kept pace up to ~37k changes/s with lag draining to zero.

GoPostgreSQLWALSSE

Redis CDC

Cache invalidation nobody can forget to call. Watches Postgres's WAL with phylax and DELs the matching Redis key on every insert, update, and delete — from any writer, no polling, and no code change when writers are added. Scales horizontally: a producer publishes WAL events to a Redis Stream, and a consumer group shares the deletes across as many boxes as you want. 1.19M writes at P99 103ms, invalidation lag p50 7.5ms, zero drops.

GoRedisPostgreSQLWAL

Barrage

Load testing that finds the real bottleneck. Fires HTTP, database, and Redis load on one clock, correlates latency across all three layers, and ships a shareable HTML report.

GoPostgreSQLRedisCLI

Flick

Self-hostable feature-flag service backed by Postgres: flags live in your database and sync to flagd in real time — no polling, no extra platform, no vendor lock-in.

GoPostgreSQLflagd

Seal

JWT authentication library for Go. Rotating refresh tokens with theft detection via typed errors, and four pluggable storage backends: Redis, PostgreSQL, MySQL, SQLite.

GoJWTRedis

Limitz

Rate limiting library for Go. Five algorithms — fixed window, sliding window, token bucket, leaky bucket, sliding log — with pluggable storage backends. Swap Redis for Postgres without touching call sites.

GoRedisPostgreSQL

golexer

A comprehensive lexical analyzer (tokenizer) library for Go. Designed for building programming languages, domain-specific languages (DSLs), configuration parsers, and template engines.

GoCompilersDSL

vex

Git is opaque, so I rebuilt its core to see how it works. A working version control system from scratch in Go — init, add, commit, branch, checkout, status, log, and diff over content-addressed SHA-256 objects, with an LCS diff engine and a Bubble Tea TUI. ~1k lines, zero git libraries.

GoSHA-256Bubble Tea

Logos

Existing scripting languages felt either too heavy or too unreadable, so I wrote one. A scripting language in Go — Pratt parser, tree-walking interpreter, closures, goroutine-backed concurrency, sandboxed VM, and cross-platform binary compilation. Now the scripting layer for kyfram, a keyframe animation engine (linked below), and logos2d, a declarative 2D game framework.

GoCompilersAST

Raw-HTTP

HTTP/1.1 server built from TCP sockets. Keep-alive, TLS, static file serving, graceful shutdown. Buffer pooling pushed throughput from 5,000 to 11,000 RPS.

GoTCP/IPTLS

Odelade Ledger

private

Family savings platform in Go. Two isolated money pools, dual JWT auth via separate Seal instances for members and admins, and an async approval pipeline on Kyu with automatic retries. Pool transfers use SERIALIZABLE transactions with row-level locking to prevent race conditions.

GoPostgreSQLRedis

Kyfram

Video from code, no timeline editor. Keyframe-driven rendering engine — declare states at times and Go renders to mp4/png via gg and ffmpeg, with Logos as the scripting layer.

GoffmpegRendering

Nine-Fives

Systems-design tower defense, sim-first. Headless Go engine with 23 components, a balance-gated suite, and AWS-measured pricing.

GoJavaScriptSimulation

Goauntlet

Learn Go by playing. Guided lessons with a real compiler, quiz/speed/debug battle modes with lives and streaks, and daily quests — static frontend with a serverless compile proxy.

TypeScriptGoVercel

Screentime

Per-app screen-time tracker with productivity scoring. Go daemon records the focused window to SQLite across Hyprland, Sway, GNOME, and KDE; daily exports feed a Quickshell UI. CI builds and ships Linux release binaries.

GoSQLiteLinux

Dotfiles / Arch Rice

Dynamic wallpaper-based rice for Arch Linux on Hyprland, built over Omarchy. Matugen extracts a palette from any wallpaper and templates it into Waybar, Ghostty, btop, Cava, SwayNC, and GTK. Installer handles dependency checks, backups, and symlinking via GNU Stow.

HyprlandWaylandMatugen

DSA Notes

Complete DSA curriculum with Go implementations and 4000+ lines of study notes. Covers data structures, algorithms, and complexity analysis with working code examples.

GoAlgorithmsEducation
you made it to the end, respect. writing's below, and it's shorter ↓ More on GitHub →
# Writing
I Deleted the Cache Invalidation From Every Write Path

Manual cache invalidation is a promise every writer has to keep, and the promise nobody notices until it breaks. So I stopped asking the code to remember and made the database do the remembering — Postgres WAL to Redis DEL, zero polling, measured.

· 4 min · go · redis
HTML Is Enough

Build a website with only HTML and CSS. Form validation, modals, dropdowns — zero JavaScript. With the receipts.

· 3 min · html · css
I Load-Tested Kyu and the 'Optimization' I Added Was the Problem

I finally put my job queue under real load to see if it could actually handle the pressure. Turns out I was wrong about why it broke, twice, before I found the real problem: something I'd added myself.

· 4 min · go · postgres
How Far Can You Push an AI Before It Breaks Character?

I tried to get an AI to hardcode a throwaway API key. Two hours later I was accusing it of racism and testing whether it would abandon its principles to save a life. Here's what actually happened.

· 8 min · ai · claude
Just Use Go

Coming from PHP, JavaScript, and Ruby, Go is the first language that made me want to understand what my code was doing. Here's why.

· 3 min · go · opinion
Rice, Rice Baby

How I set up my Arch Linux rice the easy way with Omarchy, then broke it on purpose — Hyprland, Matugen, and a whole lot of tweaking.

· 3 min · arch-linux · hyprland
Setting Up an AI Coding Agent on Termux (Nobody Codes on a Phone, I Know)

Nobody codes on a phone. I do anyway, and I went down a real rabbit hole finding an AI coding agent light enough to actually live there. Here's what I found.

· 6 min · termux · ai