Writing.
Notes on building systems, understanding failures, and making software that works.
Start here
- Advising day: the afternoon a whole semester picks its seats at onceWanna know something crazy? A platform that sleeps most of the year, then takes thousands of requests a second in one afternoon and what bot defense did to the flood.
- Distributed rate limiting at the edge with Cloudflare Durable ObjectsWhy the per-colo rate-limit binding leaked my API limits, and how one single-threaded Durable Object per key running a sliding window counter fixed it.
- Postmortem: DocPipe v1 hung under loadA sanitised postmortem for the DocPipe v1 service hang — root cause, timeline, fix, and the soak test that prevents the failure mode from coming back. Google SRE Chapter 15 format.
All writing
2026
- UCAM Cloud: a realtime seat board that never blocks section selection
- Advising day: the afternoon a whole semester picks its seats at once
- ULID: the unique ID that sorts itself
- Distributed rate limiting at the edge with Cloudflare Durable Objects
- Counting views at the edge for a dollar a month without a single cookie
- Postmortem: DocPipe v1 hung under load
- Three bugs that hung my PDF service | DocPipe
- Beyond the Chat Window: How Claude Code Actually Persists Knowledge Between Sessions
- EduQueue Deep Dive: The Asynq Worker Pool, ChromeDP PDF Pipeline & Live-Reload Settings
- EduQueue Deep Dive: Multi-Provider Email Failover, Bounce Idempotency & Tracking Pixels
- EduQueue Deep Dive: OTP-Authenticated Operator Console & Append-Only Email Analytics
- From GitHub Actions to Self-Hosted CI/CD: My Woodpecker Migration Guide with Docker
2024
- Understanding IPFS: The InterPlanetary File System
- Architecting Distributed Real-Time Translation with WebSockets and Redis
- OpenChat's Architecture: Scaling Real-Time Chat with Go, Redis, and WebSockets
- Building an App in 5 hours | Experimenting with AI (claude.ai) Capabilities for Flutter
- dated - Simplifying DateTime Operations in Dart
- GPG Signing git commits on macOS keeps asking for passphraseNote
- IUT 11th National ICT Fest OpenAPI Hackathon Team DevSprint's Solution for the Preliminary Round
- Working with JSON in Dart for Beginners
- Dapr — Simplifying Distributed Application Development
- Securing Your Code with AWS CodeCommit | A Step-by-Step Guide
- Git And Github | A Comprehensive Guide
- Setting Up Development Environment For Flutter A Step-by-step Guide