Blog

Magento's _cl tables had 902 million rows

Magento 2's indexer architecture is not built for an 800K-product catalog with daily supplier-feed updates. The _cl changelog tables grow faster than the cron can drain them, and eventually something gives. This is the nightly reindex-and-truncate cron I now run, why the order of operations matters, and why none of the Magento experts I asked found this in six months.

A hundred technical indicator functions in JavaScript

ta.js is my first open-source project — around a hundred indicator functions in JavaScript, first commit 2020-08-24, v1.17.0 shipped earlier this week. I started it because I needed the indicator functions for my own work anyway and writing each of them turned out to be the cleanest way to learn them. I published it because if anyone actually used it, they might open issues on the ones I had gotten wrong, and that scrutiny loop was cheaper than anything I could have built for myself.

A diamond painting shop the code could not save

I launched a custom diamond painting webshop on mijndiamondpainting.nl in early 2026, made one sale, and shut the shop down inside a month. The reason it died was not anywhere in the code. The supplier was in China, the product was personalized, and there was no version of that combination where door-to-door delivery survived the math at a €22.95 entry price.

The adoption gap

I was skeptical during GPT-3.5 and GPT-4. Chat in a sidebar was autocomplete with extra steps — useful for a paragraph here, not for the actual work of building software. What arrived a year later was a different primitive: agentic coding loops, where the model drives a small set of tools instead of just producing text. Almost everything on this blog was built with an agent next to me, and the honest read is that it widens the developer-skill gap before it narrows.

A research pipeline for the internet-shaped part of the decision

I built a research pipeline to help me pick a Dutch e-commerce niche to launch into. Version 1 pointed me at one. I launched a webshop on it, made a sale, and shut the shop down for reasons the pipeline had no way to see. Version 2 was built with more rigor and I trusted it less, because by then I had learned which layer of the problem a pipeline like this doesn't touch.

An agent built around not calling the LLM Featured

Most agent frameworks default to call the model again. This post is about a personal agent built around the opposite default — do we actually need to call the model this time? — and the four pieces (main loop, scheduler, provider layer, setup flow) that fall out of taking that question seriously. The project is currently shelved; the parts that survive into the next iteration are the scheduler, the preprocessor pattern, and the provider abstraction.

Introduction

This is the first post on the site, so it is the one place where I explain the thing rather than doing the thing. Future posts will go straight into the problem at hand — a production system misbehaving, a research run that came back with something interesting, or an independent project that needs an honest write-up. This post is the index: who's writing, what I'm working on, and what the blog will cover once topical posts start landing.