<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Johannes van der Merwe</title>
        <link>https://www.johannesmerwe.com/writing</link>
        <description>Writing about software development, design, and life.</description>
        <lastBuildDate>Wed, 29 Jul 2026 12:31:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>Feed for Node.js</generator>
        <image>
            <title>Johannes van der Merwe</title>
            <url>https://www.johannesmerwe.com/static/og/writing.png</url>
            <link>https://www.johannesmerwe.com/writing</link>
        </image>
        <copyright>All rights reserved 2026, Johannes van der Merwe</copyright>
        <atom:link href="https://www.johannesmerwe.com/rss.xml" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[South Africa’s rooftop solar boom outlived load shedding]]></title>
            <link>https://www.johannesmerwe.com/writing/south-africa-rooftop-solar-numbers</link>
            <guid>https://www.johannesmerwe.com/writing/south-africa-rooftop-solar-numbers</guid>
            <pubDate>Mon, 03 Aug 2026 05:00:00 GMT</pubDate>
            <description><![CDATA[Rooftop solar passed 8.3 GW in 2026, still climbing two years after the blackouts stopped. The numbers say tariffs took over from desperation.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/2e0ebd810eaae9cb573f6b973043725ef71f6582-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Integrating AI into your business, by depth]]></title>
            <link>https://www.johannesmerwe.com/writing/integrating-ai-into-your-business-guide</link>
            <guid>https://www.johannesmerwe.com/writing/integrating-ai-into-your-business-guide</guid>
            <pubDate>Wed, 29 Jul 2026 09:09:32 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/620d0dbcc37c0201135a2e8de4b874b2050df96d-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[What actually happens to your data on AWS, OpenAI, and Anthropic]]></title>
            <link>https://www.johannesmerwe.com/writing/what-happens-to-your-data-aws-openai-anthropic</link>
            <guid>https://www.johannesmerwe.com/writing/what-happens-to-your-data-aws-openai-anthropic</guid>
            <pubDate>Mon, 27 Jul 2026 13:18:30 GMT</pubDate>
            <description><![CDATA["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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/f2ce74933cf8929bf89edd3279b6ffb114c80a48-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Secure AI use in a business: a guide, not another checklist]]></title>
            <link>https://www.johannesmerwe.com/writing/secure-ai-use-in-a-business-guide</link>
            <guid>https://www.johannesmerwe.com/writing/secure-ai-use-in-a-business-guide</guid>
            <pubDate>Mon, 27 Jul 2026 10:08:53 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/264c384f52305906d5792228f161485ced8f44ee-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Two-pot withdrawals: what the numbers actually say]]></title>
            <link>https://www.johannesmerwe.com/writing/two-pot-withdrawals-what-the-numbers-say</link>
            <guid>https://www.johannesmerwe.com/writing/two-pot-withdrawals-what-the-numbers-say</guid>
            <pubDate>Mon, 27 Jul 2026 05:00:00 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/b12455cb3fcc43928419d8a9d867bba336f5fa84-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[I tried to predict gold prices with a trend line. It lost to doing nothing.]]></title>
            <link>https://www.johannesmerwe.com/writing/forecasting-baseline-beats-linear-trend</link>
            <guid>https://www.johannesmerwe.com/writing/forecasting-baseline-beats-linear-trend</guid>
            <pubDate>Fri, 24 Jul 2026 07:14:34 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/c80cc47a946c60890f4f408630bb706540dd7999-2400x1400.png?rect=0,70,2400,1260&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Your SaaS bill has a hidden 64% swing and it has nothing to do with the vendor]]></title>
            <link>https://www.johannesmerwe.com/writing/usd-zar-software-cost-swing</link>
            <guid>https://www.johannesmerwe.com/writing/usd-zar-software-cost-swing</guid>
            <pubDate>Thu, 23 Jul 2026 09:09:35 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/78efe356742fc32c4ba24429528639f0967c40de-2400x1400.png?rect=0,70,2400,1260&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Three things I left out of the permission intersection demo, on purpose]]></title>
            <link>https://www.johannesmerwe.com/writing/permission-intersection-production-gaps</link>
            <guid>https://www.johannesmerwe.com/writing/permission-intersection-production-gaps</guid>
            <pubDate>Thu, 23 Jul 2026 08:17:51 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/0d27cd97bbe83a944de9714badc5f8c7df2d9b7c-2400x1120.png?rect=134,0,2133,1120&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Why every AI agent security post says the same three things right now]]></title>
            <link>https://www.johannesmerwe.com/writing/ai-agent-identity-convergence-2026</link>
            <guid>https://www.johannesmerwe.com/writing/ai-agent-identity-convergence-2026</guid>
            <pubDate>Wed, 22 Jul 2026 12:35:19 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/fb12bcedaece374207b9db9bfcb32d197be732d9-2400x1120.png?rect=134,0,2133,1120&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[A five-file pipeline instead of opening an app]]></title>
            <link>https://www.johannesmerwe.com/writing/automate-hobby-data-instead-of-an-app</link>
            <guid>https://www.johannesmerwe.com/writing/automate-hobby-data-instead-of-an-app</guid>
            <pubDate>Wed, 22 Jul 2026 12:25:38 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/0dd38fef3862086c9626d79b2f8f94cd2c57290b-2400x1120.png?rect=134,0,2133,1120&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[What ten years of gold prices actually say about the Rand]]></title>
            <link>https://www.johannesmerwe.com/writing/gold-price-rand-decade-data</link>
            <guid>https://www.johannesmerwe.com/writing/gold-price-rand-decade-data</guid>
            <pubDate>Wed, 22 Jul 2026 12:11:41 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/aefea34c19450ff265ebce0f78e05e851d814667-2400x1400.png?rect=0,70,2400,1260&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[What August 2 actually changes if your AI agent touches your database]]></title>
            <link>https://www.johannesmerwe.com/writing/august-2-ai-act-permission-intersection</link>
            <guid>https://www.johannesmerwe.com/writing/august-2-ai-act-permission-intersection</guid>
            <pubDate>Wed, 22 Jul 2026 09:49:44 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/b17006142044e51a246d72c600dce8c2e28dc654-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Five changes that matter more than the watch itself]]></title>
            <link>https://www.johannesmerwe.com/writing/five-changes-that-matter-more-than-the-watch</link>
            <guid>https://www.johannesmerwe.com/writing/five-changes-that-matter-more-than-the-watch</guid>
            <pubDate>Wed, 22 Jul 2026 08:54:57 GMT</pubDate>
            <description><![CDATA[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.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/3fadf47d35070eb745031ef842d3ce20078dfbb8-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[South Africa’s gambling statistics]]></title>
            <link>https://www.johannesmerwe.com/writing/south-africa-gambling-statistics</link>
            <guid>https://www.johannesmerwe.com/writing/south-africa-gambling-statistics</guid>
            <pubDate>Thu, 16 Jul 2026 05:00:00 GMT</pubDate>
            <description><![CDATA[South Africans put R1.5 trillion through gambling operators last year. That headline number misleads. The regulator’s own data tells a sharper story.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/4ec1974eed9e0934d29935c9f54eaac5c540c830-2400x1260.png?w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Golf Shot Analyzer for InRange™]]></title>
            <link>https://www.johannesmerwe.com/writing/golf-shot-analyzer</link>
            <guid>https://www.johannesmerwe.com/writing/golf-shot-analyzer</guid>
            <pubDate>Mon, 11 May 2026 02:20:00 GMT</pubDate>
            <description><![CDATA[340 InRange shots visualised: trajectory arcs, genuine mishits, and what an Excel export can tell you once you can see every shot at once.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/e745ab63b1a2c0e9b4f5f85b389d9f8e55252a36-1290x2796.png?rect=7,1354,1251,657&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Life without a Phone, just a Smartwatch]]></title>
            <link>https://www.johannesmerwe.com/writing/life-without-a-phone</link>
            <guid>https://www.johannesmerwe.com/writing/life-without-a-phone</guid>
            <pubDate>Thu, 30 Oct 2025 18:43:18 GMT</pubDate>
            <description><![CDATA[Months without a phone, just a smartwatch: what broke, what got better, and what I actually missed.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/7222c656e771355514248b33e609487d0a9c1b2f-768x1024.jpg?rect=0,311,768,403&w=1200&h=630" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Building advanced chat interfaces with the Zeta Alpha API]]></title>
            <link>https://www.johannesmerwe.com/writing/advanced-chat-interfaces</link>
            <guid>https://www.johannesmerwe.com/writing/advanced-chat-interfaces</guid>
            <pubDate>Wed, 26 Mar 2025 08:31:02 GMT</pubDate>
            <description><![CDATA[Building a RAG chat interface on the Zeta Alpha API: retrieval modes, clickable citations, and file references, in React with Tailwind and shadcn.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/1ad621ec58b938d20b024b6625811d285fc1b636-1066x957.png?rect=0,199,1066,560&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Writing your first AI model with PyTorch and Torchvision]]></title>
            <link>https://www.johannesmerwe.com/writing/a-guide-to-writing-your-first-ai-model</link>
            <guid>https://www.johannesmerwe.com/writing/a-guide-to-writing-your-first-ai-model</guid>
            <pubDate>Mon, 27 Jan 2025 00:15:00 GMT</pubDate>
            <description><![CDATA[Training a ball detector with PyTorch and Torchvision: a Faster R-CNN, random video frames, and a human-in-the-loop calibration file.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/81950e76a10e4b1d860657f4d19c10a32741c1a9-3024x1698.png?rect=982,671,1956,1027&w=1200&h=630" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Welcome]]></title>
            <link>https://www.johannesmerwe.com/writing/welcome</link>
            <guid>https://www.johannesmerwe.com/writing/welcome</guid>
            <pubDate>Mon, 20 Jan 2025 02:35:35 GMT</pubDate>
            <description><![CDATA[The first post. Why this site has a writing section, and what I plan to put in it.]]></description>
            <enclosure url="https://cdn.sanity.io/images/5szmeqkp/production/d96c65ab5feccff0287825f15e27666a94f2bc99-1024x1024.gif?rect=0,243,1024,538&w=1200&h=630" length="0" type="image/gif"/>
        </item>
    </channel>
</rss>