Hi, I'm Nino.

Self-taught software developer from the Netherlands. I build back-end systems, quantitative trading algorithms, and the occasional Mac app. This site is where I write about the things I learn along the way.

What I'm up to

  • Lead developer at WorkWear4All and proud owner of Bitvested B.V.
  • Shipping Hourly — a lightweight time-tracking app for macOS.
  • Maintaining open-source libraries that have racked up 100K+ combined downloads.

Projects

  • Hourly · 2026 — A lightweight time-tracking app for macOS.
  • ta · 2020 — Open-source technical-analysis library for JavaScript, Python, and Go.
  • Bitvested · 2018 — A company I started in 2018 — my way into quantitative trading research.

Featured

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.

Latest writing

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.

All posts →