Blog

Wat we leren uit productie

Praktische posts over AI-agents, LLM-integraties en het bouwen van software die elke dag werkt — niet alleen in demo's.
Alle posts
AI Engineering

Intent-detectie zonder ML: rule-based routing voor AI-agents

Hoe je berichten naar de juiste agent routeert met Nederlandse stopwoordlijsten, phrase-matching en topic-anchoring — zonder een classifier te trainen
De standaard-aanbeveling voor intent-classificatie is een ML-model. De praktijk is dat een goed gebouwde regelset sneller werkt, goedkoper is en makkelijker te debuggen is — zolang je domein beperkt genoeg is. Hier is onze volledige intent-detectie voor een HR-chatbot.
Aron Heesakkers
Aron Heesakkers5 mei 2026
AI Engineering

Hybride zoekopdrachten: vector embeddings + full-text search in productie

Waarom je niet moet kiezen tussen semantische search en keyword-matching — en hoe je beide combineert zonder dat ze elkaar tegenwerken
Vector search vindt conceptueel verwante chunks die een exacte keyword-match zou missen. Full-text search vangt exacte namen, termen en codes die embeddings wegsmoothden. In productie heb je beide nodig — en de manier waarop je ze samenvoegt is belangrijker dan elk afzonderlijk.
Aron Heesakkers
Aron Heesakkers7 april 2026
AI Engineering

Realtime AI tracing: zichtbaar maken wat de AI doet

Observability als UX-feature — hoe je de interne stappen van een AI-agent live aan de gebruiker toont zonder de latentie te verhogen
AI-agents nemen beslissingen die voor de gebruiker onzichtbaar zijn. Door de interne stappen — context laden, kennisbank raadplegen, LLM-aanroep, actie uitvoeren — live te broadcasten via Supabase Realtime, maak je van observability een gebruikerservaring in plaats van een ops-tool.
Aron Heesakkers
Aron Heesakkers17 maart 2026
AI Engineering

Webhook-gestuurde AI-pipelines: job queue met exponential backoff

Hoe je inkomende WhatsApp-berichten betrouwbaar verwerkt via een polling job queue — inclusief idempotentie, concurrency en retry-strategie
Een Twilio-webhook die direct een LLM aanroept is fragiel: als de aanroep mislukt, is het bericht weg. Een job queue biedt retries, idempotentie en controle over concurrency. Hier is de volledige architectuur die we in productie gebruiken voor AI-auto-reply op WhatsApp.
Aron Heesakkers
Aron Heesakkers20 januari 2026
AI Engineering

LLM-gegenereerde zoekaliassen voor fuzzy attribuut-zoekopdrachten

Hoe je mensen kunt vinden op basis van velden die de gebruiker niet kent — door het LLM te laten beslissen welke synoniemen op welke databasequery mappen
Een HR-chatbot die 'wie spreekt Spaans?' begrijpt, maar 'wie is tweetalig?' niet, heeft een aliassing-probleem. De oplossing is om het LLM eenmalig aliassen te laten genereren per attribuutveld — en die als structurele hints mee te geven aan elke zoekopdracht.
Aron Heesakkers
Aron Heesakkers16 december 2025
AI Engineering

Wervingscampagnes met een uitbreidbaar scoringssysteem

Hoe je medewerkers prioriteert voor uitnodigingen op basis van gewogen factoren — en waarom je dat generiek bouwt in plaats van hardcoded
Een wervingscampagne die 'de beste kandidaten eerst uitnodigt' klinkt eenvoudig. Maar wat is 'de beste'? Leeftijd, beschikbaarheid, eerdere ervaring, afstand? Het antwoord verschilt per organisatie — en verandert in de tijd. Een gewogen scoringssysteem met configureerbare factoren geeft dat flexibiliteit.
Aron Heesakkers
Aron Heesakkers11 november 2025
AI Engineering

Planningsversiebeheer als Git: snapshots en goedkeuringsflows

Hoe je een planningsysteem bouwt met een OPEN → APPROVED → REVERTED lifecycle — inclusief solver-integratie en onveranderlijke historie
Een planning is geen single source of truth — het is een reeks beslissingen in de tijd. Wie heeft wanneer goedgekeurd? Wat was de planning drie weken geleden? Hoe keer je terug naar een eerdere staat? Versiebeheer voor planningen werkt verrassend veel als Git.
Aron Heesakkers
Aron Heesakkers28 oktober 2025
Software Engineering

Async job workers met BullMQ en Redis: van queue tot event

Hoe we een roosteroptimalisatie-worker bouwen die jobs asynchroon verwerkt, real-time voortgang rapporteert en graceful degradeert bij fouten.
Een zware optimalisatierun wil je niet in een HTTP request verwerken. Je wilt hem in een queue zetten, asynchroon verwerken en de gebruiker live op de hoogte houden. Dit is de architectuur van onze BullMQ worker — inclusief fallback, progress events en de keuzes die we maakten.
Aron Heesakkers
Aron Heesakkers7 oktober 2025
AI Engineering

WebSocket schalen met de Redis Socket.IO adapter

Hoe je real-time verbindingen over meerdere server-instanties distribueert — met rooms, aanwezigheidsdetectie en herstel bij reconnect
Een Socket.IO-server die op één instantie draait, kent al zijn verbindingen. Zodra je horizontaal schaalt, weet instantie A niet welke sockets op instantie B zitten. De Redis adapter lost dat op via pub/sub — hier is de volledige implementatie inclusief reconnect-strategie en pending notifications.
Aron Heesakkers
Aron Heesakkers7 oktober 2025
Probeer AI