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

ta v2.0.0: three libraries on one audited spec

ta v2.0.0 ships ta.js, ta.py, and ta.go on the same major version, with the same indicator set audited end-to-end against textbook formulas and a comparative benchmark in each language. Pure-JS ta.js wins 66 of 67 cross-library cases at 100k bars; pure-Go ta.go wins or ties everything in its field. The Python story is more complicated, and the post is honest about why.

Two weeks of agentic coding into a paywalled SaaS category

Hourly went live on the Mac App Store today, alongside the direct download from this site. It is free, local, no account, no paywall behind any feature. I built it in roughly two weeks with agentic coding tools as the cheapest empirical test I could run on whether agentic coding has actually started to break a paywalled SaaS category.

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.

All posts →