# Nino Kroesen > Personal site and blog of Nino Kroesen: writing about AI, tooling, and building software, plus a lab of small tools built to answer one question each. Dutch on ninokroesen.nl, English on ninokroesen.com. This file is a machine index. Every page above is also served as markdown: append `.md` to the path (the home page is `/index.md`), or send `Accept: text/markdown`. The `.md` URLs are the cacheable ones. Labels here are English; post titles are in the host's locale (nl). ## Pages - [Home](https://ninokroesen.nl/): markdown at https://ninokroesen.nl/index.md - [Blog index (all posts)](https://ninokroesen.nl/blog): markdown at https://ninokroesen.nl/blog.md - [Library — longer SEO guides](https://ninokroesen.nl/library): markdown at https://ninokroesen.nl/library.md - [Takes — short news commentary](https://ninokroesen.nl/takes): markdown at https://ninokroesen.nl/takes.md - [Projects](https://ninokroesen.nl/projects): markdown at https://ninokroesen.nl/projects.md - [About](https://ninokroesen.nl/about): markdown at https://ninokroesen.nl/about.md - [Lab — index of the experiments](https://ninokroesen.nl/lab): markdown at https://ninokroesen.nl/lab.md - [Hourly — a project](https://ninokroesen.nl/hourly): markdown at https://ninokroesen.nl/hourly.md - [Bitvested — a project](https://ninokroesen.nl/bitvested): markdown at https://ninokroesen.nl/bitvested.md - [ta.js — a project](https://ninokroesen.nl/ta): markdown at https://ninokroesen.nl/ta.md ## Laboratory - [Text as PNG](https://ninokroesen.nl/render-text-as-png): Renders markdown or plain text into one dense PNG using a bundled 5x8 bitmap font. Built for vision models: the same text usually costs fewer input tokens as an image than as text, and the response reports both estimates. POST /api/render-text-as-png, GET /api/render-text-as-png. MCP tool `render_text_as_png`. Full machine description: https://ninokroesen.nl/lab/api.json - [unslopf](https://ninokroesen.nl/unslopf): Mechanical n-gram analysis (no LLM) over markdown you pass in, page URLs, or a sitemap. Returns the phrases that recur in that corpus but are not distinctive to it — a negative-keyword list to push a classifier away from filler — with document-frequency counts and a ready-to-paste prompt block. It compares documents against each other, so the corpus needs at least two: a single text has nothing to recur against and comes back empty. POST /api/unslopf, GET /api/unslopf. MCP tool `unslopf_negative_keywords`. Full machine description: https://ninokroesen.nl/lab/api.json - [Appel & Ei Index](https://ninokroesen.nl/appel-en-ei): What one apple and one egg cost per Dutch supermarket chain, and the weighted national index built from them. Read-only: there is nothing to call, only data to read. GET /appel-en-ei.json. Full machine description: https://ninokroesen.nl/lab/api.json ## Writing - [Spec-driven development wordt steeds trager](https://ninokroesen.nl/blog/spec-driven-development-wordt-steeds-trager): 2026-08-22 — De volledige spec-and-review-ceremonie bij elke taak vertraagde de build tot een slakkengang, dus heb ik superpowers geforkt in twee snelheidsbanen. De audit plakte er een concreet getal op: 27 subagent-runs voor 11 taken, waarbij één fix-loop 22 procent daarvan opslokte. Upstream bracht een dag na mijn routing-aanpassing een eigen router uit, dus het probleem was reëel. - [Een autoresearch-lab bouwen waar ik ook echt naar kan kijken](https://ninokroesen.nl/blog/een-autoresearch-lab-bouwen-waar-ik-ook-echt-naar-kan-kijken): 2026-08-15 — De afgelopen zes weken doet een machine die ik heb gebouwd een deel van mijn quant-onderzoek voor me. Het stelt een hypothese voor, schrijft zelf de strategie, backtest deze over twaalf out-of-sample-vensters en vertelt me welke ideeën dood zijn. Het heeft ongeveer 700 experimenten gedraaid en niets heeft de holdout overleefd. Dat leest als een oordeel over autoresearch, maar dat is het niet: het is een oordeel over mijn harness. - [ta v2.0.0: drie libraries op één audited spec](https://ninokroesen.nl/blog/ta-v200-drie-libraries-op-n-audited-spec): 2026-05-14 — ta v2.0.0 brengt ta.js, ta.py en ta.go onder hetzelfde versienummer uit, met een indicator-audit en een vergelijkende benchmark per taal. - [Twee weken agentic coding in een paywalled SaaS-categorie](https://ninokroesen.nl/blog/twee-weken-agentic-coding-in-een-paywalled-saas-categorie): 2026-05-06 — Ik heb Hourly in twee weken met agentic coding gebouwd om te testen of een paywalled SaaS-categorie — WorkingHours, Toggl, Timery — nog verdedigbaar is. - [Een query van 30 seconden die ik zes maanden te laat draaide](https://ninokroesen.nl/blog/een-query-van-30-seconden-die-ik-zes-maanden-te-laat-draaide): 2026-04-26 — De indexer van Magento 2 kan de _cl tabellen niet sneller leegmaken dan 800K dagelijkse productupdates ze vullen. De cron die het opvangt, en wat dat kost. - [Honderd technische indicator-functies in JavaScript](https://ninokroesen.nl/blog/honderd-technische-indicator-functies-in-javascript): 2026-04-26 — ta.js bestaat sinds 24 augustus 2020 en kreeg deze week v1.17.0. De eerlijke lezing waarom JavaScript verkeerd was voor de backtest en goed voor de chart. - [Een diamond-painting-webshop die de code niet kon redden](https://ninokroesen.nl/blog/een-diamond-painting-webshop-die-de-code-niet-kon-redden): 2026-04-26 — Begin 2026 gelanceerd, één verkoop, binnen een maand dicht. De Chinese leverancier had weken doorlooptijd en loog over de verzendkosten waarop ik prijsde. - [Agentic coding vergroot de kloof voordat hij krimpt](https://ninokroesen.nl/blog/agentic-coding-vergroot-de-kloof-voordat-hij-krimpt): 2026-04-25 — Agentic coding loops haalden me uit de scepsis — maar de tool versterkt welke achtergrond je ook meebrengt. Die kloof gaat groter worden voordat hij krimpt. - [Een research pipeline voor wat het internet wel laat zien](https://ninokroesen.nl/blog/een-research-pipeline-voor-wat-het-internet-wel-laat-zien): 2026-04-20 — Een 5-staps pipeline over 177K Nederlandse e-commerce domeinen. De shop die ik erop lanceerde deed één verkoop en sloot om redenen die de pipeline niet zag. - [Een agent gebouwd rond het niet aanroepen van de LLM](https://ninokroesen.nl/blog/een-agent-gebouwd-rond-het-niet-aanroepen-van-de-llm): 2026-04-19 — De meeste agent frameworks roepen het model standaard nog een keer aan. Dit project doet het tegenovergestelde, en de architectuur volgt daaruit. - [Introductie](https://ninokroesen.nl/blog/introductie): 2026-04-17 — Eerste post. De blog gaat over productiesystemen, data-science-onderzoek, en onafhankelijke software-experimenten — drie werkmodi, niet drie projecten. ## Machine endpoints - [MCP server](https://ninokroesen.nl/mcp): Streamable HTTP, JSON-RPC 2.0, POST only. Tools: `render_text_as_png`, `unslopf_negative_keywords`. - [Lab API description](https://ninokroesen.nl/lab/api.json): every machine-callable lab endpoint with its parameters, limits, and error codes. - [Full text](https://ninokroesen.nl/llms-full.txt): this index plus the body of every post listed above, in markdown. - [Sitemap](https://ninokroesen.nl/sitemap.xml), [RSS](https://ninokroesen.nl/rss.xml). ## Notes - Quotes should link to the canonical URL of the page they came from. - Machine access is rate-limited per caller and can be switched off server-side: expect `429` with `Retry-After` when throttled, `503` when a lab service is off. - Admin, preview, and analytics paths are excluded here on purpose; nothing behind them is public.