De situatie
Echo bestaat dankzij een eerdere opdracht van Tetrifox. In 2024 zetten we een Mino in bij Teelor, een Nederlands uitzendbureau, om hun backoffice rond Bullhorn CRM te automatiseren. Onderdeel daarvan was een kandidaatmatching op basis van ChatGPT. Die werkte. Recruiters gebruikten die functie vaker dan alles wat we verder hadden gebouwd. Maar de functie hing aan een CRM dat nooit voor AI was ontworpen. Het datamodel van Bullhorn kon geen semantisch zoeken, geen vector embeddings en niet het soort contextueel redeneren aan dat AI-matching echt bruikbaar maakt.
De oprichters van Teelor zagen het gat in de markt. Ze hadden tien jaar ervaring in recruitment en een team recruiters dat precies wist hoe een goede match eruitziet. Daartegenover stond een markt vol CRM-leveranciers die AI toevoegen als vinkje op de featurelijst — gebouwd door mensen die zelf nog nooit een kandidaat hadden geplaatst.
De oprichters wilden geen Bullhorn-plugin en geen AI-schil om een bestaande tool. Ze wilden een zelfstandig platform waarin AI geen extra functie is, maar het fundament waar al het andere omheen is gebouwd. Geen stapje beter in hoe ze al werkten. Een fundamenteel andere manier van werken.
Maar Teelor is een recruitmentbedrijf, geen techbedrijf. Er was geen ontwikkelteam, geen CTO en geen capaciteit om de architectuurkeuzes te beoordelen die bepalen of een product meegroeit of bezwijkt. Ze hadden hetzelfde model nodig dat de eerste keer werkte: een team dat onderdeel wordt van de organisatie. Alleen nu voor het bouwen van een product, niet voor procesautomatisering.
Hoe we onderdeel werden van het team
Dit was geen koude start. De Mino die Echo bouwde, kende het domein, de workflows en de mensen van Teelor al uit de eerdere opdracht. In plaats van weken met recruiters mee te lopen, begon de product owner bij de knelpunten die al bekend waren en dook van daaruit dieper in de AI-kansen die de eerste opdracht had blootgelegd, maar die binnen de beperkingen van Bullhorn niet op te lossen waren. De Mino van zes mensen werkte als het productteam van Echo. De oprichters van Teelor waren de stakeholders, en het team had rechtstreeks contact met recruiters voor feedback.
De discoveryfase draaide om het product, niet om het domein. Wat moet Echo worden? Welke functies leveren als eerste waarde op? Waar maakt AI de workflow van een recruiter echt beter, en waar voegt het alleen complexiteit toe zonder dat het iets oplevert? De product owner werkte naast de senior recruiters van Teelor als productstrateeg, niet als externe consultant die requirements ophaalt.
De grootste uitdaging voor de AI-engineer: de expertise van recruiters omzetten in een scoringsalgoritme. Wat maakt een kandidaat geschikt? Recruiters weten dat intuïtief. Maar dat uitschrijven als gewogen dimensies met expliciete drempelwaarden is een ander vak. De wegingen achter de matching van Echo kwamen uit herhaalde sessies met senior recruiters, die echte kandidatenpools beoordeelden. De AI-engineer stelde structuren voor, recruiters toetsten die aan hun eigen oordeel, en de wegingen schoven op tot de ranglijsten van het systeem overeenkwamen met wat een ervaren recruiter zou opstellen.
De UX/UI-designer loste het vertrouwensprobleem op dat elk AI-product heeft. Recruiters gaan niet werken met een systeem dat zegt “vertrouw me nou maar”. Ze willen zien waarom een kandidaat hoog scoort. De opbouw van de fitscore staat zichtbaar in de interface van Echo. Zo is elke aanbeveling uitlegbaar en elke score op te splitsen in onderdelen.
Wat we bouwden en waarom
Eén TypeScript-monoliet, geen microservices. Bij het bouwen van een “AI-platform” is de reflex om naar Python, losse ML-services en message queues te grijpen. Dat deden we niet. Het hele platform — API-routes, AI-pipeline, het genereren van embeddings en vector search — draait als één Next.js-applicatie, met Supabase als databaselaag. Voor een team van zes dat een eerste versie bouwt, kost elke extra service snelheid. Door alles in één stack te houden, kon elke engineer in het team elk deel van het systeem debuggen.
Cascade-matching: snelle AI filtert, deterministische scoring beslist. Een recruiter plaatst een vacature en wil een gerangschikte shortlist uit mogelijk honderden kandidaten. Je kunt niet op iedereen een dure scoring loslaten. En je kunt niet vertrouwen op één LLM-call om ze betrouwbaar te rangschikken. De cascade-architectuur lost beide op. Eerst brengt een LLM-voorfilter de volledige kandidatenpool goedkoop terug tot een shortlist op basis van semantische relevantie. Daarna beoordeelt een deterministische scoring-engine de overgebleven kandidaten op zes gewogen dimensies. De recruiter ziet een gerangschikte top 10, met per kandidaat een uitsplitsing van de score. Geen aanbeveling uit een black box.
AI adviseert, recruiters beslissen. Echo plaatst kandidaten niet automatisch. De AI maakt gerangschikte shortlists en fitscores, maar recruiters verplaatsen kandidaten zelf door de fases van de funnel, via een drag-and-dropbord. Recruitment draait om relaties. De AI doet de informatieverwerking waar mensen slecht in zijn: honderden cv's scannen, vaardigheden vergelijken en kandidaten naar boven halen die anders over het hoofd worden gezien. Mensen vellen de oordelen waar AI slecht in is: culturele fit, timing en de context van een relatie die in jaren is opgebouwd.
We zeiden nee tegen self-hosted AI. De vraag kwam al vroeg: moeten we modellen zelf hosten, zodat kandidaatdata niet naar de API van OpenAI gaat? Zelf hosten vraagt om GPU-infrastructuur en kennis van ML-operations. Dat hoort een team van zes dat een eerste versie bouwt niet te dragen. In plaats daarvan bouwden we row-level security in op databaseniveau en koppelden we elke AI-query aan de ingelogde gebruiker. De integratie is zo opgezet dat overstappen naar een self-hosted alternatief een configuratiewijziging is, geen nieuwe architectuur.
Het bewijs
16 weken van concept naar productie. De scope was niet klein: productdiscovery, UX-design, de architectuur van de AI-pipeline, zes onderling verbonden modules, deployment-infrastructuur en het onboarden van recruiters. De planning klopte omdat de Mino niet bij nul begon. Door de eerdere opdracht bij Teelor kende het team het recruitmentdomein, de prioriteiten van de oprichters en de operationele patronen van het bedrijf. Discovery die normaal vier tot zes weken kost, duurde nu twee weken.
AI-matching in minder dan 3 seconden over de volledige kandidatenpool. Gemeten van begin tot eind: van het moment dat een recruiter om suggesties vraagt tot een gerangschikte shortlist met uitlegbare scores. Cv's krijgen bij het uploaden al een embedding. Matchen is daardoor vectorrekenwerk op vooraf berekende embeddings, geen AI-call vanaf nul. Het systeem beoordeelt elke geschikte kandidaat in de database en geeft een gerangschikte top 10 terug. Niemand valt buiten de boot omdat een recruiter er niet aan dacht om op hem of haar te zoeken.
Wat we achterlieten
Echo is een levend product, geen opgeleverd project. Het platform draait op managed infrastructuur — Vercel voor de applicatie, Supabase voor de database. Er zijn dus geen servers in te richten, geen containers te orkestreren en er is geen DevOps-kennis nodig om het draaiende te houden. Het team van Teelor beheert Echo en heeft geen omkijken naar infrastructuur.
De AI-laag is zo ontworpen dat je die los van de rest kunt doorontwikkelen. Elke AI-functie leest het model uit een eigen omgevingsvariabele. Overstappen naar een nieuw model is daarmee een configuratiewijziging, geen codewijziging. Prompttemplates staan geordend en gedocumenteerd los van de applicatielogica. Wil het team van Teelor aanpassen hoe Echo communiceert? Dan passen ze de prompts aan.
Wegingen, drempelwaarden en parameters staan als getypeerde configuratie los van de scoringslogica. Teelor kan bijsturen hoe Echo kandidaten beoordeelt zonder de scoring-engine aan te raken.
De keuze voor één TypeScript-stack is een bewuste overdrachtsbeslissing. Eén generalistische developer kan het hele systeem onderhouden en uitbreiden — frontend, API-routes, AI-pipeline en databasequery's — zonder te worstelen met servicegrenzen, meerdere talen en toolchains of deployment-orkestratie. Teelor kreeg een codebase waarin de afstand tussen een feature begrijpen en die aanpassen zo kort is als we hem konden maken.
