Writing
Notes on software, data, and building products, written from Cape Town. New posts land whenever something seems worth writing down.
South Africa’s rooftop solar boom outlived load shedding
Rooftop solar passed 8.3 GW in 2026, still climbing two years after the blackouts stopped. The numbers say tariffs took over from desperation.
When AI reviews AI-written code
There are at least eight near-identical "best AI code review tools" listicles ranking right now. None of them mention the one structural problem that doesn't go away no matter which tool wins the comparison.
Everyone is online. Almost nobody has home broadband.
South Africa: 82%+ internet access, 17.4% fixed-line home internet. That is not a rounding gap, it is two entirely different products serving the same "online" statistic.
Integrating AI into your business, by depth
Every guide on this topic says "start small, use an MVP, tie it to KPIs" without once explaining what integration technically means. Here are the three actual patterns, what changes at each one, and which parts of the internet's generic advice are backwards for you specifically.
What actually happens to your data on AWS, OpenAI, and Anthropic
"Does AI train on my data" gets a different answer depending on which product you're actually using, and most of the real exposure at a business happens from that confusion, not from the vendor's contract terms.
Secure AI use in a business: a guide, not another checklist
Most guides on this topic are the same seven bullet points wearing a different vendor's logo. This one is ordered by what actually happens first if you get it wrong, and ends by pointing at the parts that need real engineering, not just policy.
Two-pot withdrawals: what the numbers actually say
R57 billion left South African retirement funds in year one of two-pot. The second year’s data says more about how people actually use it.
I tried to predict gold prices with a trend line. It lost to doing nothing.
A fitted least-squares line on ten years of gold-in-rand data. Tested against the dumbest possible baseline. The baseline won by 23 points, and the reason why is the actual lesson.
Your SaaS bill has a hidden 64% swing and it has nothing to do with the vendor
A $20/month tool cost South African buyers R234 in February 2018 and R385 in February 2024. The vendor never touched the price. This is what budgeting in a second currency actually looks like.
Three things I left out of the permission intersection demo, on purpose
The demo repo proves the model in fifteen lines. Here's exactly what breaks if you ship those fifteen lines as-is, and what each fix actually looks like.
Why every AI agent security post says the same three things right now
A security vendor, an authorization company, and an independent researcher published on AI agent identity within weeks of each other and landed on the same three fixes. That's not a coincidence, and the reason is more useful than the advice itself.
A five-file pipeline instead of opening an app
I didn't want to open the Garmin Golf app to see my own scores. So I wrote five small files instead. The lessons generalize to any hobby data you're tempted to just check in an app.
What ten years of gold prices actually say about the Rand
Gold returned 215% in dollars over the last decade. In Rand, it returned 273%. The gap is not noise, and it tells you exactly what "gold as a hedge" is actually hedging.
What August 2 actually changes if your AI agent touches your database
The EU AI Act enforcement date is real, the panic about it mostly isn't. What actually matters if you've connected an AI agent to your own data: whether you can prove what it was allowed to see.
Five changes that matter more than the watch itself
The watch was never the point. Most of what made watch-only living work was five specific setup choices, and you can make all of them without giving up your phone.
South Africa’s gambling statistics
South Africans put R1.5 trillion through gambling operators last year. That headline number misleads. The regulator’s own data tells a sharper story.
Golf Shot Analyzer for InRange™
340 InRange shots visualised: trajectory arcs, genuine mishits, and what an Excel export can tell you once you can see every shot at once.
Life without a Phone, just a Smartwatch
Months without a phone, just a smartwatch: what broke, what got better, and what I actually missed.
Building advanced chat interfaces with the Zeta Alpha API
Building a RAG chat interface on the Zeta Alpha API: retrieval modes, clickable citations, and file references, in React with Tailwind and shadcn.
Writing your first AI model with PyTorch and Torchvision
Training a ball detector with PyTorch and Torchvision: a Faster R-CNN, random video frames, and a human-in-the-loop calibration file.
Welcome
The first post. Why this site has a writing section, and what I plan to put in it.