<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    <title>Bouwen - All Subjects Matter</title>
    <link>https://www.allsubjectsmatter.nl/nl/tag/building/</link>
    <description>Hoe Remco Loup, CEO/CTO van 333travel, naar problemen kijkt en ze oplost: met data, met teams en met de technologie die past.</description>
    <language>nl</language>
    <image><url>https://www.allsubjectsmatter.nl/images/icon.png</url><title>All Subjects Matter</title><link>https://www.allsubjectsmatter.nl/nl/</link></image>
    <lastBuildDate>Wed, 11 Mar 2026 09:54:10 +0100</lastBuildDate>
    <atom:link href="https://www.allsubjectsmatter.nl/nl/tag/building/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Kan een AI-gesprek een reiskanaal zijn? Deel 2: de technische architectuur</title>
      <link>https://www.allsubjectsmatter.nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/</link>
      <guid isPermaLink="false">69b12cfe8819c400011f388b</guid>
      <pubDate>Wed, 11 Mar 2026 09:54:10 +0100</pubDate>
      <dc:creator>&lt;![CDATA[Remco Loup.]]></dc:creator>
      <category>&lt;![CDATA[Building]]></category>
      <description>&lt;![CDATA[De technische deep-dive over hoe we Joy hebben gebouwd: een RAG-pipeline met vector search en reranking, een geheugensysteem dat vier iteraties kostte, en de UI/UX-keuzes die een antwoord van 25 seconden sneller laten voelen.]]></description>
      <media:content url="https://www.allsubjectsmatter.nl/the-technical-architecture-behind-a-conversational-travel-channel/feature.jpg" medium="image"/>
      <content:encoded>&lt;![CDATA[<p>In <a href="https://www.allsubjectsmatter.nl/nl/nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/" data-preview>Deel 1</a> schreef ik waarom we een AI-reisinterface vanaf nul bouwden, wat we leerden van onze eerste mislukte poging in 2019, en waarom een plugin je nooit een volledig geïntegreerde conversationele ervaring geeft. Dit deel gaat over het hoe. De architectuur, de zoekpipeline, het geheugenprobleem dat vier pogingen kostte om op te lossen, en het UI/UX-werk dat 25 seconden aanvoelt als 5.</p>
<h2 id="the-architecture">De architectuur</h2>
<p>Omdat dit een techblog is en geen marketingpagina, laat ik je zien wat er echt draait. Dit is geen weekendproject. Dit is productie-infrastructuur.</p>
<pre class="line-numbers language-text"><code class="language-text">Frontend (React &#43; TypeScript &#43; Zustand)
    │
    │  WebSocket (real-time, bidirectional)
    │
FastAPI Backend
    ├── Query Orchestrator
    │     ├── LLM Client (multi-provider with automatic fallback)
    │     ├── Tool Registry (9 specialized tools)
    │     └── Observer System (async post-turn analysis)
    ├── RAG Pipeline
    │     ├── Vector Database (3 content collections)
    │     ├── Embedding Engine
    │     └── Reranker (dual provider, switchable)
    ├── Conversation Memory (dual storage)
    │     ├── SQL (message history)
    │     └── Vector DB (semantic search over past messages)
    ├── Security Layer
    │     ├── Input Guard (prompt injection defense)
    │     ├── Output Guard (credential leak prevention)
    │     └── Rate Limiting &#43; IP Management
    ├── MCP Server (Model Context Protocol)
    │     └── External AI assistant access to our data
    └── Lead Management
          ├── Proposal Generation
          └── Specialist Handoff</code><span class="line-numbers-rows" aria-hidden="true"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></span></pre><p>De frontend is een React-applicatie met real-time WebSocket-communicatie. Geen polling. Geen request-response-cycli waarin je op een compleet antwoord wacht. Elke token streamt in real-time, gebufferd op 50ms-intervallen om flikkering in de UI te voorkomen. Productresultaten worden naar de interface gepusht zodra ze gevonden zijn, nog voordat de LLM aan zijn antwoord begint.</p>
<p>De backend is Python/FastAPI met een modulair toolsysteem. De LLM genereert niet alleen tekst. Hij heeft toegang tot 9 gespecialiseerde tools en beslist zelfstandig welke hij gebruikt. Reizen zoeken? Dan roept hij <code>search_products</code> aan. Informatie over een bestemming nodig? Dan roept hij <code>search_knowledge</code> aan. Terugroepen wat eerder besproken is? Dan doorzoekt hij het gespreksgeheugen semantisch.</p>
<blockquote>
<p>De LLM genereert geen antwoorden. Hij orkestreert tools en stelt een antwoord samen op basis van echte data.</p>
</blockquote>
<p>De LLM-laag draait met een multi-provider fallback-systeem. Valt de primaire provider uit, dan schakelt het systeem automatisch over naar de secundaire. Geen downtime. Geen foutmeldingen. De klant merkt er niets van.</p>
<p>Er draait al een MCP-server, het protocol dat ik beschreef in mijn Web 4.0-post. Externe AI-assistenten kunnen onze reisdata er al door bevragen. Het is nog vroeg, maar de infrastructuur voor AI-to-business-communicatie staat live. Als de AI-assistent van Lisa de producten van 333travel wil doorzoeken, bestaat het endpoint al.</p>
<h3 id="the-rag-pipeline-where-the-real-work-happens">De RAG-pipeline: waar het echte werk gebeurt</h3>
<p>RAG, Retrieval-Augmented Generation, is de ruggengraat van het hele systeem. Het is wat &ldquo;GPT met een kennisbank&rdquo; scheidt van &ldquo;een AI die je product echt kent.&rdquo; Maar slecht uitgevoerde RAG is bijna erger dan geen RAG.</p>
<p>We onderhouden drie aparte vectorcollections:</p>
<table>
	<thead>
			<tr>
					<th>Collection</th>
					<th>Wat erin zit</th>
					<th>Wat het doet</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Travel Products</td>
					<td>Roundtrips, hotels, tours, cruises</td>
					<td>Drijft de productzoekopdracht aan</td>
			</tr>
			<tr>
					<td>Travel Details</td>
					<td>Dagprogramma&rsquo;s, excursies, inbegrepen services</td>
					<td>Beantwoordt specifieke vragen over reisschema&rsquo;s</td>
			</tr>
			<tr>
					<td>Travel Knowledge</td>
					<td>Blogs, bestemmingengidsen, reisinformatie</td>
					<td>Levert context en inspiratie</td>
			</tr>
	</tbody>
</table>
<p>Stelt een klant een vraag, dan wordt de query ge-embed en tegen de relevante collection gegooid. Maar hier komt het cruciale deel: <strong>we pakken niet gewoon de beste vector-matches en noemen dat een resultaat.</strong></p>
<p>Vector similarity alleen is middelmatig. Het brengt je in de juiste richting, maar levert niet de beste resultaten. Daarom doen we een brede fetch, aanzienlijk meer resultaten dan nodig, en halen die door een reranker. De reranker beoordeelt elk query-documentpaar op werkelijke semantische relevantie, niet alleen op embedding-nabijheid.</p>
<p>Het verschil is enorm. Het is het verschil tussen &ldquo;hier zijn reizen die een paar van je woorden bevatten&rdquo; en &ldquo;hier zijn reizen die daadwerkelijk matchen met wat je zoekt.&rdquo;</p>
<p>Maar het gaat verder. Nog voordat de query de vectordatabase raakt, gaat hij door een fuzzy normalisatielaag. Elke land- en plaatsnaam in ons systeem wordt bij het opstarten gecachet. Typt een klant &ldquo;Bali&rdquo;, dan weten we dat Indonesië bedoeld wordt. Schrijft iemand &ldquo;Tailand&rdquo;, dan weten we wat er bedoeld wordt. Aliassen, spellingvarianten, taalverschillen: allemaal opgelost voordat de zoekopdracht begint. Zonder dit krijg je lege resultaten op queries die wel hadden moeten matchen. En daarbovenop combineert de zoekopdracht semantische similarity met metadatafilters. Land, duur, producttype: dat zijn geen velden in een database. Het zijn actieve filters die samen met de vectorsearch de resultaten verfijnen, nog voordat de reranker begint.</p>
<p>Na het reranken splitsen de resultaten zich in twee paden. De volledige set gererankte resultaten gaat meteen naar de frontend, maar geblurd. De klant ziet productkaarten verschijnen terwijl Joy nog aan het nadenken is. Het toont voortgang zonder te overweldigen. Ondertussen krijgt de LLM een uitgedunde versie van die resultaten, alleen de velden die hij nodig heeft om te redeneren. Deze projectie bespaart ruwweg een derde van de tokens, wat snellere antwoorden en lagere kosten betekent. Daarna stelt Joy haar antwoord samen en bespreekt ze de 4 of 5 reizen die echt passen bij de vraag. Alleen die besproken producten worden zichtbaar voor de klant. De rest verdwijnt. Wat de klant ziet is een gecureerde, doordachte selectie. Geen lijst met 10 zoekresultaten. Een aanbeveling van 5 die echt logisch zijn.</p>
<blockquote>
<p>Brede fetch → Rerank → Project. Drie stappen die het verschil maken tussen een zoekresultaat en een aanbeveling.</p>
</blockquote>
<h3 id="the-memory-problem">Het geheugenprobleem</h3>
<p>Dit is het onderdeel dat de meeste iteraties kostte om goed te krijgen.</p>
<p>Conversationele AI heeft een smerig geheimpje: het onthoudt niets. Elke LLM-call is stateless. Het model heeft geen idee wat er eerder gezegd is, tenzij je de context expliciet aanlevert. En er is een grens aan hoeveel context je kunt aanleveren.</p>
<p>Voor een simpele Q&amp;A-chatbot maakt dat niet uit. Iemand stelt een vraag, krijgt een antwoord, klaar.</p>
<p>Maar voor een reisassistent? Geheugen is alles.</p>
<p>Een klant zegt: &ldquo;Ik wil twee weken naar Thailand.&rdquo; Drie beurten later: &ldquo;Maak er eigenlijk drie weken van. En ik wil Laos erbij.&rdquo; Vijf beurten later: &ldquo;Wat was die reis die je eerder liet zien, met de kookles?&rdquo;</p>
<p>Zonder geheugen is elke beurt een leeg blad. Het systeem weet niets van Thailand. Niets van de wijziging naar drie weken. Niets van Laos. En al helemaal niets van de reis met de kookles van zeven berichten geleden.</p>
<blockquote>
<p>Zonder geheugen is elk bericht een eerste date. Je AI heeft geen idee wat er eerder gebeurd is.</p>
</blockquote>
<p>Dit losten we niet in één poging op. Niet in twee. Zelfs niet in drie.</p>
<p>De eerste versie was simpel: de laatste 10 vraag-antwoordparen in de LLM-context stoppen. Dat werkte voor korte gesprekken. Maar onze gesprekken zijn niet kort. Klanten verkennen, vergelijken, komen terug op eerdere ideeën, bedenken zich. Tien beurten is niet genoeg als iemand twintig minuten over drie verschillende landen heeft gechat.</p>
<p>Dus probeerden we op de achtergrond samenvattingen te genereren. Het idee was goed: het gesprek samenvatten tot kernpunten, zodat de LLM altijd het volledige beeld heeft zonder de hele context window vol te gooien. De praktijk was anders. De LLM begon details te hallucineren in de samenvattingen. Landen door elkaar halen. Voorkeuren toedichten die de klant nooit had genoemd. De samenvatting zou de source of truth zijn, en hij verzon dingen.</p>
<p>Toen ontwierpen we een geheugensysteem in drie lagen: kortetermijn, tijdelijk en langetermijn. De tijdelijke laag moest bijhouden welke onderwerpen bij welke bestemming hoorden, welke voorkeuren op welk deel van de reis golden. Op papier elegant. In de praktijk een nachtmerrie. Het vereiste dat de AI complexe relationele context begreep, zoals &ldquo;toen ze zeiden dat het budget flexibel was, bedoelden ze dat voor Thailand, niet voor Vietnam.&rdquo; Dat kon hij niet. Te veel edge cases. Te fragiel.</p>
<p>Wat we uiteindelijk hadden, was simpeler en robuuster. Elk bericht wordt als vector geëmbed in een aparte memory collection in dezelfde database die we voor product search gebruiken. Als de klant zegt &ldquo;die reis met de kookles&rdquo;, draait het systeem een semantic search over alle eerdere berichten in die sessie. Het vindt het relevante bericht, ook als de exacte woorden niet overeenkomen. Misschien noemde Joy het drie beurten eerder een &ldquo;culinaire ervaring&rdquo;. Vector search geeft niets om woordmatching. Het matcht betekenis. Gecombineerd met de laatste 10 uitwisselingen in de prompt voor directe context, hoeft Joy niet voor elke vraag die tool call te doen. Ze heeft het recente gesprek direct bij de hand, en de volledige historie doorzoekbaar wanneer ze die nodig heeft.</p>
<p>Vier pogingen. Elke poging leerde ons iets over wat AI wel en niet kan doen met context. De definitieve versie werkt niet omdat het de slimste opzet is, maar omdat het het eerlijkst is over de beperkingen.</p>
<blockquote>
<p>AI-geheugen is niet één probleem. Het zijn er twee: terugroepen wat er gezegd is, en begrijpen wat er bedoeld is. We hadden twee verschillende systemen nodig om dat op te lossen.</p>
</blockquote>
<h3 id="uiux-the-invisible-work">UI/UX: het onzichtbare werk</h3>
<p>Hier sterven de meeste AI-projecten, zonder dat ze het zelf doorhebben.</p>
<p>Je kunt de meest geavanceerde RAG-pipeline ter wereld hebben. De slimste retrieval. De beste reranking. Maar als de interface traag, log of verwarrend aanvoelt, doet dat er allemaal niet toe. De klant geeft niets om je architectuur. Het gaat ze om hoe het voelt.</p>
<blockquote>
<p>Als je AI slim is maar je interface traag, heb je een genie gebouwd dat opgesloten zit in een kast.</p>
</blockquote>
<p>Hier zijn we diep op ingegaan. En &ldquo;diep&rdquo; betekent tientallen iteraties op dingen die de meeste mensen details zouden noemen. Maar de details zijn het product.</p>
<p><strong>Streaming die natuurlijk voelt.</strong> LLM-antwoorden streamen token voor token over een WebSocket. Maar rauwe streaming geeft flikkerende tekst die schokkerig en onaangenaam is. We bufferen met intervallen van 50ms. Snel genoeg om real-time te voelen, langzaam genoeg om constante re-renders te voorkomen. Het verschil is subtiel, maar enorm voor de ervaren kwaliteit.</p>
<p><strong>De afweging in snelheid.</strong> Laten we eerlijk zijn: een product search met volledig antwoord duurt 20 tot 30 seconden. Dat is lang. We weten dat het lang is. Maar we hebben een bewuste keuze gemaakt: kwaliteit boven snelheid. De brede fetch, de reranking, de semantic matching, elke stap in de pipeline bestaat omdat hij de resultaten beter maakt. Haal er één weg en je krijgt snellere antwoorden met slechtere aanbevelingen. Liever dat Joy 25 seconden werkt en 5 reizen aflevert die echt passen, dan 10 middelmatige matches in 8 seconden.</p>
<p>Dus de vraag werd: hoe zorgen we dat 25 seconden niet aanvoelen als 25 seconden? Daar kwam het UX-werk. Joy laat zien wat ze doet. Producten zoeken. Bestemmingsinformatie opzoeken. Gesprekshistorie checken. Elke tool call is zichtbaar terwijl hij gebeurt. Productkaarten schuiven vervaagd naar binnen terwijl zij nog haar antwoord opbouwt. Zodra het antwoord klaar is, worden alleen de reizen zichtbaar die Joy daadwerkelijk bespreekt. De rest vervaagt. De klant staart nooit naar een leeg scherm. Ze zien het proces ontvouwen. En het blijkt dat ergens naar kijken werken totaal anders voelt dan ergens op wachten.</p>
<p>Een deel van de latency is ook een taalprobleem. Nederlands is slecht vertegenwoordigd in de meeste embedding- en taalmodellen. Het semantische begrip dat in het Engels prachtig werkt, degradeert als je klanten en productdata Nederlands zijn. Dat betekent meer verwerking, zorgvuldiger matchen, meer moeite voor hetzelfde kwaliteitsniveau.</p>
<p><strong>Wat is GPT-NL?</strong> <a href="https://gpt-nl.nl/" data-external>GPT-NL</a> is een Nederlands initiatief om een large language model te bouwen dat specifiek getraind en geoptimaliseerd is voor de Nederlandse taal.</p>
<figure class="bookmark"><a class="bookmark__link" href="https://gpt-nl.nl/" rel="noopener"><span class="bookmark__body"><span class="bookmark__title">GPT-NL: Een verantwoord taalmodel voor Nederland</span><span class="bookmark__description">In Nederland wordt gewerkt aan de ontwikkeling van een eigen open taalmodel genaamd GPT-NL. Wij gebruiken alleen data om het model te trainen als we die rechtmatig kunnen verkrijgen en bieden zo een verantwoord alternatief op bestaande LLMs. Dit model is essentieel voor het versterken en behouden van onze digitale soevereiniteit.</span><span class="bookmark__meta"><picture><source type="image/avif" sizes="25px"><source type="image/webp" sizes="25px"><img src="https://www.allsubjectsmatter.nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/bookmarks/01-icon_hu_6ebbb399eb63616a.webp" alt="" class="bookmark__icon" width="50" height="50" loading="lazy" decoding="async">
  </picture><span>GPT-NL</span></span></span><span class="bookmark__thumb"><picture><source type="image/avif" media="(max-width: 47.99rem)" sizes="calc(100vw - 2.5rem)"><source type="image/webp" media="(max-width: 47.99rem)" sizes="calc(100vw - 2.5rem)"><source type="image/avif" sizes="250px"><source type="image/webp" sizes="250px"><img src="https://www.allsubjectsmatter.nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/bookmarks/01-thumb_hu_6ec85365e1fe875f.webp" alt="" width="500" height="435" loading="lazy" decoding="async">
  </picture></span></a></figure>

<p>Waar huidige modellen zoals GPT en Claude Nederlands behandelen als een niet-bestaande taal, wil GPT-NL Nederlands een first-class citizen maken in AI. Voor toepassingen zoals de onze, waar zowel de klant als de productdata Nederlands zijn, kan een model dat de taal echt begrijpt de kwaliteit van semantisch zoeken aanzienlijk verbeteren en de extra verwerking verminderen die we nu nodig hebben om dat gat te compenseren. We volgen dit project op de voet.</p>
<p>En dan is er de keuze van het model. De kwaliteit van het gesprek hangt sterk af van welke LLM je gebruikt. We draaien op Sonnet 4.6 als primair model, en het verschil met kleinere of goedkopere modellen is niet subtiel. Het is het verschil tussen een gesprek dat natuurlijk voelt en een dat gerepeteerd aanvoelt. Haiku, de snellere en goedkopere optie, voelt als een downgrade zodra je overschakelt. GPT dient als onze automatische fallback, maar het is een stap terug in gesprekskwaliteit. Dit zijn geen inwisselbare commodity&rsquo;s. Het model dat je kiest bepaalt de ervaring die je klant krijgt.</p>
<p><strong>Directe paginaladingen.</strong> De hele conversatie blijft bewaard in local storage. Als je de pagina ververst of later terugkomt, staat je gesprek er al. Direct. Geen spinner. Geen &ldquo;opnieuw verbinden&hellip;&quot;-melding. De sync met de server gebeurt geruisloos op de achtergrond.</p>
<p><strong>Markdown-normalisatie.</strong> LLM&rsquo;s hebben meningen over opmaak. Claude is gek op vette koppen met emoji. GPT is gek op genummerde lijsten. Wij normaliseren alles server-side. Vet-met-emoji wordt omgezet naar schone koppen. Horizontale lijnen worden gestript. Font weights worden teruggeschroefd. Het resultaat oogt alsof het ontworpen is, niet gegenereerd. De klant moet nooit het gevoel hebben dat hij AI-output zit te lezen.</p>
<p><strong>Sessiecontinuïteit.</strong> Je sessie overleeft paginaverversingen, gesloten browsers en herverbindingen. Kom een dag later terug, je gesprek staat er nog. Je opgeslagen reizen staan er nog. En als een sessie verloopt, krijg je een nette overlay die uitlegt wat er gebeurd is, geen kapotte pagina of een cryptische foutmelding.</p>
<p><strong>De lead flow.</strong> Als een klant klaar is om met een specialist te praten, genereert het systeem een reisvoorstel dat al vooraf is ingevuld met wat het uit de conversatie weet. Besproken bestemmingen, reisvoorkeuren, bekeken producten. Minimale wrijving. Maximale context. De menselijke specialist pakt precies op waar Joy stopte. Dat is geen handoff. Dat is precies het punt. Joy bestaat om dat menselijke gesprek beter te maken, niet om het te vermijden.</p>
<blockquote>
<p>Elk van deze details kostte meerdere iteraties. En geen enkele is zichtbaar voor de klant. Dat is de bedoeling.</p>
</blockquote>
<h3 id="security-an-honest-note">Security: een eerlijke noot</h3>
<p>Ik houd deze sectie kort en eerlijk. Security is niet iets wat je afmaakt. Het is iets waar je continu aan werkt.</p>
<p>We hebben een dubbel guardsysteem. Een input guard vóór de LLM die prompt-injection-pogingen onderschept, en een output guard ná de LLM die credential leaks of system prompt-fragmenten in antwoorden onderschept. Beide zijn deterministisch en voegen vrijwel geen latency toe.</p>
<p>De system prompt is verhard met anti-jailbreak-instructies. Er is rate limiting, botbescherming en IP-beheer voor hardnevig misbruik.</p>
<p>Is het bulletproof? Nee. Niets is dat. Maar het is gebouwd met defense in depth in gedachten, en we itereren erop naarmate nieuwe aanvalspatronen opduiken. Als je een AI-interface bouwt die met het publiek praat en je hebt nog niet nagedacht over input/output guards, dan ligt er een probleem op de loer.</p>
<h3 id="the-bigger-picture-an-extra-channel-not-a-replacement">Het grotere geheel: een extra kanaal, geen vervanging</h3>
<p>Laat me heel duidelijk zijn over wat Joy is en wat ze niet is.</p>
<p>Joy is geen vervanging van onze website. Ze is geen vervanging van telefoon of e-mail. Ze is een extra kanaal. Een nieuwe manier voor klanten om onze producten te ontdekken, naast alles wat er al bestaat. Ze zal nooit een vervanging van menselijk contact zijn. Dat vinden we bij ons bedrijf het belangrijkst. Joy is een middel naar menselijk contact. Ze helpt klanten uitvinden wat ze willen, zodat het gesprek met een van onze specialisten op een compleet ander niveau begint.</p>
<blockquote>
<p>Joy is niet de bestemming. Ze is de weg die leidt naar een echt gesprek met een echt persoon.</p>
</blockquote>
<p>De MCP-server staat al live, wat betekent dat AI-assistenten onze data al programmatisch kunnen bevragen. Als de Web 4.0-visie werkelijkheid wordt en Lisa&rsquo;s AI-assistent zelfstandig op zoek gaat naar haar perfecte Thailand-reis, dan bestaat het endpoint al. Niet omdat we er haastig mee aan de slag zijn gegaan. Omdat we al meer dan een jaar met deze infrastructuur aan het experimenteren zijn.</p>
<p>Joy is niet het eindproduct. Ze is het begin van een kanaalstrategie die zowel mens-tot-AI- als AI-tot-AI-interacties omvat. En ze is een test, een heel serieuze, heel grondige test, of conversationele AI vandaag de dag daadwerkelijk waarde kan toevoegen voor reisklanten.</p>
<p>De resultaten tot nu toe zijn beter dan ik verwachtte. Niet vlekkeloos, niets is dat, maar echt indrukwekkend in hoe natuurlijk de gesprekken voelen en hoe relevant de aanbevelingen zijn. Als je een klant een vaag idee ziet beschrijven en Joy komt met reizen die daadwerkelijk passen, dan besef je: dit is geen gimmick. Het werkt. En het werkt dankzij alles wat eronder ligt.</p>
<h3 id="so-what-are-we-trying-to-solve-again">Dus, welk probleem lossen we ook alweer op?</h3>
<p>Ik begon met deze vraag omdat dit de vraag was die alles heeft geleid wat we bouwden. Niet &ldquo;hoe gebruiken we AI?&rdquo; Niet &ldquo;wat doen onze concurrenten?&rdquo; Niet &ldquo;hoe komen we innovatief over?&rdquo;</p>
<p>Alleen: welk probleem lossen we op, en werkt deze oplossing daadwerkelijk?</p>
<p>We bouwden Joy om daarachter te komen. Met echte architectuur. Echte data. Echte klanten. En de bereidheid om &ldquo;dit is nog niet klaar&rdquo; te zeggen als dat zo zou blijken.</p>
<p>Als je nadenkt over het toevoegen van AI aan je product, begin daar. Niet met de tool. Niet met de pitch van een leverancier. Niet met de druk om bij te blijven.</p>
<p><strong>Begin met de vraag. Bouw vanuit het antwoord.</strong></p>
<p>Je klanten verdienen beter dan een FAQ met een gezicht. Ze verdienen een echt gesprek. En uiteindelijk een echt mens. Zorg dat je AI ze daar naartoe leidt, en niet ervandaan.</p>
<p>Als je <a href="https://www.allsubjectsmatter.nl/nl/nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/" data-preview>Deel 1</a> nog niet gelezen hebt: daar begint het verhaal. Waarom we dit bouwden, wat we leerden van ons mislukken in 2019, en waarom je hier niet komt met een plugin.</p>
<figure class="bookmark"><a class="bookmark__link" href="https://www.allsubjectsmatter.nl/nl/nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/"><span class="bookmark__body"><span class="bookmark__title">Can a conversation be a travel channel? Part 1: We built one to find out.</span><span class="bookmark__description">We built a full AI travel interface from scratch, not to say we do AI, but to test whether a conversation can actually be a meaningful channel for personalized travel. This is what it took, why a plugin will never get you there, and why most AI chatbots are just expensive search bars.</span><span class="bookmark__meta"><picture><source type="image/avif" sizes="25px"><source type="image/webp" sizes="25px"><img src="https://www.allsubjectsmatter.nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/bookmarks/02-icon_hu_8a3f1fd6616d7152.webp" alt="" class="bookmark__icon" width="50" height="50" loading="lazy" decoding="async">
  </picture><span>All Subjects Matter</span><span>Remco Loup.</span></span></span><span class="bookmark__thumb"><picture><source type="image/avif" media="(max-width: 47.99rem)" sizes="calc(100vw - 2.5rem)"><source type="image/webp" media="(max-width: 47.99rem)" sizes="calc(100vw - 2.5rem)"><source type="image/avif" sizes="250px"><source type="image/webp" sizes="250px"><img src="https://www.allsubjectsmatter.nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/bookmarks/02-thumb_hu_bbbba9d6b5c5a7aa.webp" alt="" width="500" height="435" loading="lazy" decoding="async">
  </picture></span></a></figure>

]]></content:encoded>
    </item>
    <item>
      <title>Kan een AI-gesprek een reiskanaal zijn? Deel 1: we bouwden er een om erachter te komen.</title>
      <link>https://www.allsubjectsmatter.nl/nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/</link>
      <guid isPermaLink="false">69afffb35418c000015caaa6</guid>
      <pubDate>Tue, 10 Mar 2026 13:46:34 +0100</pubDate>
      <dc:creator>&lt;![CDATA[Remco Loup.]]></dc:creator>
      <category>&lt;![CDATA[Building]]></category><category>&lt;![CDATA[Strategy]]></category>
      <description>&lt;![CDATA[We bouwden een volledige AI-reisinterface vanaf nul. Niet om te kunnen zeggen dat we &#34;met AI bezig zijn&#34;, maar om te testen of een gesprek echt een betekenisvol kanaal kan zijn voor gepersonaliseerde reizen. Dit was ervoor nodig, waarom een plugin je daar nooit brengt, en waarom de meeste AI-chatbots gewoon dure zoekbalken zijn.]]></description>
      <media:content url="https://www.allsubjectsmatter.nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/feature.jpg" medium="image"/>
      <content:encoded>&lt;![CDATA[<p>We bouwden een AI-aangedreven reisinterface vanaf nul. Geen chatbot. Geen widget. Geen GPT-wrapper met een smiley op een website geplakt. Een volledige conversationele interface met een eigen vector database, een eigen retrieval pipeline, een eigen geheugensysteem en real-time streaming over WebSockets. Niet om iets te vervangen. Om te testen of conversationele AI er echt klaar voor is om een betekenisvol kanaal voor reizen te zijn. Dit is wat we ontdekten, wat het kostte, en waarom we denken dat het meeste van wat er nu is ruis is.</p>
<hr>
<p>Dit is een verhaal in twee delen. Dit eerste deel gaat over het waarom: welk probleem we oplossen, wat we leerden van eerdere mislukkingen, en waarom een plugin je hier nooit zal brengen. <a href="https://www.allsubjectsmatter.nl/nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/" data-preview>Deel 2</a> gaat dieper in op de architectuur: de RAG pipeline, het geheugensysteem, de UI/UX-beslissingen en de technische afwegingen die we maakten.</p>
<h2 id="what-are-you-actually-trying-to-solve">Wat probeer je eigenlijk op te lossen?</h2>
<p>Dat is de vraag waar ik steeds op terugkom. Elke keer als een bedrijf zijn nieuwe &ldquo;AI-powered&rdquo; feature aankondigt. Elke keer als iemand me vraagt wat wij met AI doen. Elke keer als een leverancier weer een plugin komt pitchen.</p>
<p>Het is op dit moment de belangrijkste vraag in tech. En bijna niemand stelt hem.</p>
<p>In plaats daarvan werkt de hele industrie achterstevoren: men begint met &ldquo;we moeten iets met AI doen&rdquo; en gaat dan op zoek naar een plek om het neer te zetten. Bedrijven horen &ldquo;AI&rdquo; en horen &ldquo;innovatie&rdquo; en denken dat ze achterlopen als ze niet nú iets doen.</p>
<blockquote>
<p>De druk om &ldquo;iets met AI te doen&rdquo; is luider geworden dan de vraag wat je eigenlijk wilt bereiken.</p>
</blockquote>
<p>En wat gebeurt er dan? Bedrijven grijpen de meest zichtbare, meest verkoopbare toepassing die ze kunnen vinden: een chatbot. Op de website plakken. Een naam en een vriendelijk gezichtje geven. Verbinden met een kennisbank. Klaar. &ldquo;Wij doen nu AI.&rdquo;</p>
<p>Het probleem: de integratie is altijd beperkt. Sommigen koppelen aan een productdatabase. Sommigen halen live beschikbaarheid op. Maar als plugin is er een plafond aan hoe diep die integratie gaat. Hij werkt altijd met de data die hij krijgt, in het formaat dat de API levert, met de context die de leverancier voldoende vond. Het resultaat is een interactie die aan de oppervlakte conversationeel oogt, maar fundamenteel beperkt blijft in wat hij kan.</p>
<p>En omdat het een plugin is, kan het nooit volledig naadloos zijn. Het blijft altijd een aparte laag bovenop je website, geen onderdeel ervan. Een andere designtaal. Een ander interactiemodel. Een andere ervaring. De klant voelt dat, ook al kan hij het niet onder woorden brengen. Het is het verschil tussen een kamer die als geheel is ontworpen en een kamer waar iemand een kiosk in de hoek heeft gezet.</p>
<blockquote>
<p>Een slimmere poortwachter is nog steeds een poortwachter. Je klanten wilden een deur.</p>
</blockquote>
<p>We zijn zelf deze weg gegaan. In 2019 bouwden we de <a href="https://www.allsubjectsmatter.nl/nl/nl/how-333travel-is-revolutionizing-the-travel-industry/" data-preview>eerste versie van Joy</a> op Flow.ai. Een intent-gebaseerde chatbot die natuurlijke taal begreep, reisvoorkeuren uit één zin kon halen en leads genereerde voor onze specialisten. Het werkte. Technisch gezien. Maar de klantbetrokkenheid was te laag om hem in leven te houden. Begin 2022 hebben we Joy uit dienst genomen.</p>
<p>De les was niet dat de technologie slecht was. De les was dat mensen hebben geleerd chatbots te wantrouwen. En terecht. Jarenlang hebben bedrijven chatbots gebruikt als barrière om contact te maken, ook toen ze het tegendeel beweerden. Klanten weten dat. Ze hebben het meegemaakt. Na drie foute antwoorden denk je niet &ldquo;even opnieuw proberen.&rdquo; Je denkt &ldquo;hoe kom ik bij een echt mens?&rdquo; Sommige mensen doen niet eens de moeite. Ze zien een chatbelletje met een gezichtje en hun eerste reactie is: weg ermee. Niet omdat ze ongeduldig zijn, maar omdat de ervaring hun heeft geleerd dat het tijdverspilling is.</p>
<p>Dat is geen technologieprobleem. Dat is een vertrouwensprobleem. En dat los je niet op door hetzelfde formaat slimmer te maken.</p>
<p>Daar komt bij dat de interface van een chatbot-plugin simpelweg beperkend is. Een klein venster in de hoek van je scherm. Een paar regels tekst. Misschien een knop of twee. Daarin kun je geen rijke productkaarten tonen. Je kunt geen kaart van een reis laten zien. Je kunt iemand niet laten browsen, vergelijken, reizen bewaren voor later. Het formaat dicteert de ervaring, en het formaat is een doos.</p>
<p>Die ervaring is precies waarom we geen nieuwe chatbot hebben gebouwd. Geen slimmere. Geen betere. Iets fundamenteel anders. Een volledige conversationele interface, vanaf nul gebouwd, ontworpen om te inspireren. Waar iemand bestemmingen kan verkennen, reizen kan ontdekken waarvan hij het bestaan niet kende, en waar hij — als hij er klaar voor is — na een gesprek dat echt goed voelde in contact komt met een specialist. Niet na drie mislukte pogingen om langs een poortwachter te komen.</p>
<p>De echte vraag was nooit &ldquo;hoe voegen we AI toe aan onze website?&rdquo; De echte vraag is: waar creëert AI echt waarde die eerder niet mogelijk was? Dat zijn we gaan testen.</p>
<h2 id="why-i-built-what-i-built">Waarom ik bouwde wat ik bouwde</h2>
<p>Ik heb dit niet gebouwd omdat ik denk dat websites dood zijn, of omdat ik wilde kunnen zeggen dat we &ldquo;iets met AI doen&rdquo;. Ik heb eerder geschreven over <a href="https://www.allsubjectsmatter.nl/nl/nl/lets-stop-talking-about-ai-and-start-solving-real-problems/" data-preview>hoeveel ik een hekel heb aan die mentaliteit</a>.</p>
<p>Ik heb dit gebouwd vanwege een vraag die ik al meer dan een jaar toets: is conversationele AI er echt klaar voor om een echt kanaal te zijn?</p>
<p>In mijn <a href="https://www.allsubjectsmatter.nl/nl/nl/web-4-0-and-the-autonomous-web-the-rise-of-ai-driven-customers/" data-preview>Web 4.0-post</a> schreef ik over het autonome web, een wereld waarin AI-assistenten niet alleen informatie ophalen, maar optreden als onafhankelijke digitale consumenten namens hun mensen. Waar Lisa tegen haar AI-assistent zegt &ldquo;zoek een reis van twee weken naar Thailand&rdquo; en de AI via MCP-interfaces contact opneemt met reisorganisaties, onderhandelt, verfijnt en opties presenteert. Zonder dat Lisa ook maar een browser opent.</p>
<p>Dat klinkt misschien alsof de mens uit het plaatje verdwijnt. Dat is niet zo. De techniek maakt volledige autonomie mogelijk. Maar dat betekent niet dat we de mens willen weghalen. Het betekent dat de klant mag kiezen. En onze default is en blijft: naar een mens leiden. Daar later meer over.</p>
<p>Die toekomst komt. Misschien niet morgen, maar hij komt. En als je een reisorganisatie bent die zichzelf serieus neemt, kun je er maar beter op voorbereid zijn.</p>
<p>Dus bouwde ik Joy, een AI-reisassistent voor 333travel. Niet als productlancering, niet als marketingstunt, maar als een serieuze test. Kunnen we een conversatie-interface bouwen die écht waarde toevoegt? Die onze producten begrijpt? Die minder hallucineert? Die een echt nuttige ervaring neerzet als extra kanaal naast onze website, telefoon en e-mail?</p>
<blockquote>
<p>Ik heb dit niet gebouwd om onze website te vervangen. Ik heb dit gebouwd om een vraag te beantwoorden: kan een gesprek een betekenisvol kanaal zijn voor gepersonaliseerd reizen?</p>
</blockquote>
<h2 id="what-this-actually-is">Wat het eigenlijk is</h2>
<p>Laat me concreet zijn over wat Joy doet:</p>
<p>Joy zit bovenop onze volledige productdatabase. Elke rondreis, elk hotel, elke excursie, elke bestemming, allemaal als vectoren geëmbed in een eigen database. Als een klant zegt &ldquo;ik wil iets avontuurlijks in Zuidoost-Azië, zo&rsquo;n twee weken, niet te toeristisch,&rdquo; dan gaat Joy niet keyword-matchen tegen een PDF. Ze doorzoekt semantisch honderden producten, rerankt de resultaten op werkelijke relevantie en komt met opties die echt aansluiten bij de intentie.</p>
<p>En ze onthoudt het gesprek. Niet alleen het laatste bericht, de hele thread. Ze weet welke reizen besproken zijn, wat bewaard is, wat verworpen. Als je zegt &ldquo;die reis die je eerder noemde met de kookles,&rdquo; snapt ze wat je bedoelt, ook al noemde ze het zelf een &ldquo;culinaire ervaring.&rdquo;</p>
<p>Maar hier zit het cruciale verschil met elke willekeurige chatbot: ze weet niet alleen iets van reizen in het algemeen. Ze kent ónze reizen. Onze specifieke producten. Onze specifieke reisschema&rsquo;s. Onze bestemmingen die ons team zelf heeft bezocht. Dat kun je niet zomaar met een plugin erop plakken, hoe slim de LLM erachter ook is.</p>
<p>En op het moment dat je menselijk contact wilt? Dan geeft Joy de volledige context door aan een echte reisspecialist die precies weet wat je hebt verkend. Geen &ldquo;kun je je vraag nog eens omschrijven.&rdquo; Geen koude overdracht. Volledige continuïteit.</p>
<blockquote>
<p>Joy vervangt gesprekken met specialisten niet. Ze maakt ze beter.</p>
</blockquote>
<p>Wat ze (nog) niet doet: klantenservicevragen, luchtvaartinformatie of support na boeking afhandelen. Dit is puur een kanaal voor productontdekking en inspiratie. Daar komen we nog wel. Maar we gaan niet doen alsof ze dingen kan die ze niet kan. En eerlijk gezegd: als iemand bij de klantenservice terechtkomt, is er al een probleem. Dat is het slechtst denkbare moment om een machine tussen jou en je klant te zetten. Dan moet je er zelf zijn. Persoonlijk. Dus we zijn nog steeds aan het discussiëren over wat we haar daar laten doen. De nuance zit altijd in de details.</p>
<h2 id="why-you-cant-get-here-with-a-plugin">Waarom je hier niet komt met een plugin</h2>
<p>Wat wij gebouwd hebben, bereik je niet door een plugin te installeren. Niet met ChatGPT. Niet met een of andere standaard &ldquo;AI-widget.&rdquo; Niet met een SaaS-tool die belooft &ldquo;je website in minuten slimmer te maken.&rdquo;</p>
<p>En dat komt niet doordat de AI-modellen niet goed genoeg zijn. De modellen zijn prima. Het probleem zit in alles eromheen.</p>
<p>Het hele systeem draait op data die wij zelf bezitten, structureren en beheersen. Elke reis in onze database is door ons eigen team bezocht. Elk reisschema is onze eigen creatie. Elk stuk bestemmingenkennis leeft in onze eigen systemen. Dit is geen data die we van een derde partij licentiëren of uit een brochurecatalogus trekken.</p>
<p>Dat betekent dat we het kunnen embedden. Dat we het precies zo kunnen structureren als we nodig hebben voor semantisch zoeken. Dat we het kunnen bijwerken op het moment dat er iets verandert. Wij beheersen de volledige pipeline, van ruwe productdata naar vector embedding naar retrieval naar antwoord.</p>
<blockquote>
<p>Je kunt geen slimme interface bouwen bovenop bergen domme data.</p>
</blockquote>
<p>Als je productdata in andermans systeem leeft, als je reizen uit een catalogus doorverkoopt, als je &ldquo;database&rdquo; een verzameling PDF&rsquo;s van touroperators is, dan ben je afhankelijk van welke structuur iemand anders heeft bedacht. Je kunt geen intelligentie bouwen op data die je niet begrijpt of beheerst.</p>
<p>En veel bedrijven starten niet alleen vanaf nul, ze starten met een achterstand. Hun bestaande systemen zijn al onvoldoende. De booking engine is verouderd. De productdata ligt verspreid over spreadsheets en PDF&rsquo;s. De customer journey heeft overal gaten. En in plaats van die fundamenten te fixen, vinden ze het slim om er een AI-chatbot bovenop te leggen. Alsof intelligentie bovenop disfunctie iets functioneels oplevert. Doet het niet. Het maakt de disfunctie alleen moeilijker te diagnosticeren.</p>
<blockquote>
<p>Je lost geen probleem op. Je versiert het.</p>
</blockquote>
<p>Wat wij gebouwd hebben, vereiste drie dingen:</p>
<p><strong>Onze eigen data.</strong> Elke reis is van ons. Bezocht door ons team. Gestructureerd in onze database. Embedded in onze vector store. Je kunt geen semantic search bouwen over data die je niet zelf structureert.</p>
<p><strong>Onze eigen systemen.</strong> Onze eigen backend, frontend, deployment pipeline. Toen we een dual reranker nodig hadden, bouwden we die. Toen we semantic conversation memory nodig hadden, bouwden we het. Toen we een MCP server nodig hadden voor Web 4.0-readiness, bouwden we die. Geen goedkeuring van een vendor nodig. Geen feature requests. Geen afhankelijkheid van andermans roadmap.</p>
<p><strong>De hele keten in eigen hand.</strong> Van het moment dat een klant de chat opent tot het moment dat ze met een specialist praten, is elke stap van ons. De AI kent onze producten omdat we de producten zelf hebben gemaakt. De specialist kent het gesprek omdat ons systeem het aan hen doorgeeft.</p>
<blockquote>
<p>De AI is de laatste 10% van het werk. De eerste 90% is een bedrijf bouwen dat het kan dragen.</p>
</blockquote>
<p>In <a href="https://www.allsubjectsmatter.nl/nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/" data-preview>deel 2</a> laat ik zien hoe het onder de motorkap echt werkt. De architectuur, de search pipeline, het geheugensysteem dat vele pogingen kostte om goed te krijgen, en waarom 25 seconden wachten aanvoelt als 5 als je het goed ontwerpt.</p>
<figure class="bookmark"><a class="bookmark__link" href="https://www.allsubjectsmatter.nl/nl/nl/the-technical-architecture-behind-a-conversational-travel-channel/"><span class="bookmark__body"><span class="bookmark__title">Can a conversation be a travel channel? Part 2: The technical architecture</span><span class="bookmark__description">The technical deep-dive into how we built Joy: a RAG pipeline with vector search and reranking, a memory system that took four iterations, and the UI/UX decisions that make a 25-second response feel instant.</span><span class="bookmark__meta"><picture><source type="image/avif" sizes="25px"><source type="image/webp" sizes="25px"><img src="https://www.allsubjectsmatter.nl/nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/bookmarks/01-icon_hu_8a3f1fd6616d7152.webp" alt="" class="bookmark__icon" width="50" height="50" loading="lazy" decoding="async">
  </picture><span>All Subjects Matter</span><span>Remco Loup.</span></span></span><span class="bookmark__thumb"><picture><source type="image/avif" media="(max-width: 47.99rem)" sizes="calc(100vw - 2.5rem)"><source type="image/webp" media="(max-width: 47.99rem)" sizes="calc(100vw - 2.5rem)"><source type="image/avif" sizes="250px"><source type="image/webp" sizes="250px"><img src="https://www.allsubjectsmatter.nl/nl/can-a-conversation-be-a-travel-channel-we-built-the-architecture-to-find-out/bookmarks/01-thumb_hu_cb9ae8a41b04a42d.webp" alt="" width="500" height="435" loading="lazy" decoding="async">
  </picture></span></a></figure>

]]></content:encoded>
    </item>
    <item>
      <title>Ik vibecodede een app en dit heb ik ervan geleerd.</title>
      <link>https://www.allsubjectsmatter.nl/nl/i-vibecoded-an-app-and-this-is-what-i-learned/</link>
      <guid isPermaLink="false">6911a93d8225830001cea697</guid>
      <pubDate>Mon, 10 Nov 2025 11:37:31 +0100</pubDate>
      <dc:creator>&lt;![CDATA[Remco Loup.]]></dc:creator>
      <category>&lt;![CDATA[Building]]></category>
      <description>&lt;![CDATA[Ik bouwde een &#34;productie&#34;-app met vibecoding. 97.089 regels gegenereerd. Slechts 25.056 kwamen in productie. Vier complete refactors. De AI faalde niet door slechte prompts. Het faalde omdat AI dingen vergeet, context kwijtraakt en dubbele logica creëert, hoe goed je het ook stuurt.]]></description>
      <media:content url="https://www.allsubjectsmatter.nl/i-vibecoded-an-app-and-this-is-what-i-learned/feature.jpg" medium="image"/>
      <content:encoded>&lt;![CDATA[<p>Ik heb een &ldquo;productie&rdquo;-app gebouwd met vibecoding. 97.089 regels gegenereerd. Slechts 25.056 regels haalden productie. Vier complete refactors. De AI faalde niet door slechte prompts. Het faalde omdat AI dingen vergeet, context kwijtraakt en duplicaatlogica creëert, hoe goed je het ook stuurt. Vibecoding gaat er niet om AI voor je te laten bouwen. Het gaat erom dat je je systeem goed genoeg kent om de ruis te filteren. Zonder die kennis ship je alleen maar gissingen.</p>
<hr>
<h2 id="what-vibecoding-actually-means"><strong>Wat vibecoding eigenlijk betekent</strong></h2>
<p>Mensen denken dat vibecoding betekent dat AI je app bouwt terwijl jij toekijkt. Reality check: dat is helemaal niet het geval als je een daadwerkelijk werkend product nodig hebt met elke keer het verwachte resultaat.</p>
<p>Vibecoding betekent nog steeds dat jij de controle hebt. Je prompt met precisie. Je experimenteert. Je stuurt. Je filtert. Het blijft handwerk, alleen met andere hefboomwerking.</p>
<blockquote class="pull-quote"><p>&ldquo;A fool with a tool is still a fool&rdquo;</p>
</blockquote>
<p>En als je niet weet wat je doet? Dan is het resultaat hetzelfde als altijd: een zooitje. Vibecoding zonder de juiste kennis is gewoon fout. En het grootste probleem met AI is dat het maar blijft produceren: code na code na code. Het doet gewoon wat je vraagt. Het is daar niet kritisch over. Dus als je niet weet wat je doet, spreek je jezelf de hele tijd tegen met geprogrammeerde functionaliteit die nooit samenwerkt binnen je app.</p>
<p>AI is koning in fallbacks. Ik had voor elke mislukte API-call 5 verschillende fallbacks gekregen. Zouden we niet gewoon de juiste manier aan de praat moeten krijgen in plaats van fallbacks bouwen? AI is ook lui: het onderdrukt liever notices dan dat het ze oplost. Zeker als het niet in één keer lukt.</p>
<h2 id="i-built-a-production-app-with-ai-but-not-because-of-ai"><strong>Ik bouwde een productie-app met AI (maar niet dankzij AI)</strong></h2>
<p>Ik heb Windsurf gebruikt om een complete applicatie te bouwen. Geen menselijke developers. Geen code die ik direct heb geschreven. We gebruiken Sonnet 4.5 als onze kennisbron.</p>
<p>Het resultaat na veel frustratie: een volwaardig productiespel met backend-logica, login-flows, async data writes, mail queues, admin security, monitoring en cartesische algoritmes die updaten op basis van gebruikersinteractie.</p>
<p>De AI heeft alles geschreven. Ik heb geen enkele regel code aangeraakt. Zelfs de simpelste CSS-wijziging liet ik aan AI over.</p>
<p>Maar wat niemand je vertelt: ik heb het hele project vier keer compleet moeten refactoren. En niet omdat ik slecht promptte. Ik gebruikte KISS-principes, DRY-standaarden, PSR-richtlijnen. We schreven vooraf beslissingen uit en maakten implementatiedocumenten. We gebruikten richtlijnen voor de talen die we gebruikten.</p>
<p>Uiteindelijk maakte het niets uit.</p>
<p>AI vergeet. Het verliest context. Het begint duplicaatfuncties te maken zonder door te hebben dat het die logica al drie files terug schreef. Hoe complexer je project wordt, hoe meer het afdrijft. En hoe vaker het niet in één keer goed gaat, hoe meer AI denkt backwards compatibility te moeten handhaven, waardoor je code nog complexer wordt. Het maakt niet uit hoe je het de eerste keer prompt, of met project rules.</p>
<blockquote>
<p>Na vier complete refactors leerde ik: AI vergeet de context niet. Het heeft die nooit gehad ;).</p>
</blockquote>
<p>De enige reden dat de definitieve versie werkt, is dat ik precies wist wat ik aan het bouwen was. Ik had het systeem in mijn hoofd. Ik zag wanneer AI zichzelf herhaalde. Ik wist wanneer ik moest stoppen, bijsturen of opnieuw beginnen. Ik controleerde elke file op duplicaat fallback-data, duplicaten enzovoort. Ik gebruikte ook het zeer handige npm-package knip.</p>
<p><a href="https://www.npmjs.com/package/knip" data-external>https://www.npmjs.com/package/knip</a></p>
<p>Je kunt niet iets de productie in vibecoden zonder je product te begrijpen. Punt. En je moet accepteren dat bugfixen betekent dat je op AI leunt om het op te lossen zonder iets anders te breken. Veel succes daarmee&hellip;</p>
<h2 id="the-data-tells-the-rest-of-our-story"><strong>De data vertelt de rest van ons verhaal</strong></h2>
<p>Tijdens ons vibecoden produceerde Windsurf:</p>
<figure class="figure"><picture><source type="image/avif" sizes="(max-width: 47.99rem) calc(100vw - 2.5rem), 720px"><source type="image/webp" sizes="(max-width: 47.99rem) calc(100vw - 2.5rem), 720px"><img src="https://www.allsubjectsmatter.nl/nl/i-vibecoded-an-app-and-this-is-what-i-learned/images/Screenshot-2025-11-10-at-09.28.05_hu_8c902f8cc6fdc18d.webp" alt="" width="560" height="442" data-zoom-src="https://www.allsubjectsmatter.nl/nl/i-vibecoded-an-app-and-this-is-what-i-learned/images/Screenshot-2025-11-10-at-09.28.05_hu_f69c6e1b7aae2732.webp" loading="lazy" decoding="async">
  </picture></figure>

<ul>
<li>97.089 regels code gegenereerd</li>
<li>2.925 prompts verstuurd</li>
<li>5.693 credits gebruikt</li>
<li>15.734 tool calls (waaronder 7.000 code-edits)</li>
</ul>
<p>Wat er daadwerkelijk in productie is gegaan:</p>
<ul>
<li>25.056 regels code</li>
</ul>
<p>Meer dan 70.000 regels zijn geschrapt, vervangen of gerefactord.</p>
<p>Nu denk je misschien: dan moet je AI dus gewoon &ldquo;beter sturen&rdquo; of &ldquo;preciezer prompten&rdquo;. Dat is niet het punt dat ik wilde maken.</p>
<p>Het punt is: <strong>je kunt AI-gebral op dit moment niet voorkomen.</strong> Hoe goed je ook prompt. Hoe gestructureerd je aanpak ook is. AI overproduceert. Het genereert redundante code. Het raakt de tel kwijt van wat het al gebouwd heeft. Het creëert ruis. AI is gebouwd om altijd een vorm van AI-verbaal diarree te produceren.</p>
<p>Die 70k+ regels verspilde output? Dat is geen bug. Dat is de huidige staat van vibecoding.</p>
<p>En als je je systeem niet goed genoeg kent om te herkennen wat troep is en wat niet, ship je alles en kun je zelfs met AI niet meer debuggen. Of erger: je besteedt persoonlijk weken aan het debuggen van een codebase die je niet snapt.</p>
<p>De kosten per 1000 credits liggen rond de 35 dollar. De ontwikkeling van dit spel kostte me 210 dollar. Elk bedrijf dat Large Language Models levert verliest geld. De code die ik produceerde had makkelijk 210 x 10 = 2.100 dollar moeten kosten, minimaal. Ik vraag me af of ze dan überhaupt geld verdiend hadden.</p>
<p>Los van het geld: is dit onze kostbare elektriciteit echt waard? Ik ben benieuwd hoe haalbaar dit is als je de echte prijs betaalt.</p>
<h2 id="what-people-get-wrong"><strong>Wat mensen verkeerd begrijpen</strong></h2>
<p>AI is geen magie. Het is een &ldquo;slimme&rdquo;, snelle assistent. Maar hij begrijpt niet wat er voor jouw bedrijf telt. Hij heeft geen grip op edge cases, constraints, risico&rsquo;s, performance-implicaties of security-kwetsbaarheden.</p>
<p>Dat is jouw werk!</p>
<p>In mijn geval hielp AI om iets echts te bouwen. Maar de AI beveiligde het adminpaneel niet. Die mail queue-logica ontwierp hij niet. Hij besliste niet wanneer async writes gedebounced moesten worden. Dat deed ik. Door kritisch te zijn en de juiste vragen te stellen dankzij bouwervaring van vroeger.</p>
<p>Zonder die richting was het hele ding in elkaar gestort.</p>
<p>En ik zie dit patroon overal. Teams die AI-producten bouwen zonder ownership of richting, alleen maar om te kunnen zeggen dat ze &ldquo;iets met AI gedaan hebben&rdquo;. Dat is oppervlakkig. Dat is broos. Het schaalt niet.</p>
<blockquote class="pull-quote"><p><em>&ldquo;You&rsquo;re not building products. You&rsquo;re laundering prompts into deployments&rdquo;</em></p>
</blockquote>
<p>Hoe vaak hoor je niet van bovenaf: we moeten iets met AI doen. We raken achter. Achter op wat?</p>
<h2 id="the-customer-service-trap"><strong>De customer service-val</strong></h2>
<p>Dan is er nog de hype rond AI voor klantenservice. Bedrijven beweren dat het perfect is voor 24/7 support, snellere antwoorden, minder mensen nodig.</p>
<p>Maar als je een bot nodig hebt om met je klanten te praten, ligt je echte probleem waarschijnlijk ergens anders. AI repareert kapotte processen niet. Het verstopt ze. Tijdelijk.</p>
<p>Als je minder menselijk contact als winst ziet, heb je al verloren. Als het beantwoorden van vragen lang duurt, moet je misschien ergens anders kijken waarom mensen zoveel vragen hebben, en dat eerst verbeteren.</p>
<h2 id="the-actual-point"><strong>Het eigenlijke punt</strong></h2>
<p>Vibecoding is gewoon weer een tool. Meer niet. Wel een heel give tool in de juiste handen, maar toch een tool. En vooral goed voor prototyping. Maar met een flinke dosis kennis kun je er misschien standalone apps mee bouwen die écht werken, die je op z&rsquo;n minst zelf kunt testen en waarvan het resultaat op een transparante manier te herleiden is naar de geschreven code.</p>
<p>Het vervangt geen denken. Het zou je denken moeten versterken, en het zou je niet minder moeten laten nadenken.</p>
<p>Goed gebruikt kan het krachtig zijn. Maar je moet nog steeds weten wat je wilt bouwen. Je moet de structuur ownen. Je moet de ruis filteren. Je moet AI-geklets herkennen als je het ziet. Je moet het proces leiden.</p>
<p>Anders bouw je geen prototype. Dan genereer je alleen gokken.</p>
<p>De toekomst is niet AI-first. De bedrijven die ertoe doen blijven human-first. Zij begrijpen het probleem voordat ze een tool kiezen. En ze blijven de enige vraag stellen die telt, voordat ze AI te hulp roepen:</p>
<p><strong>Wat lossen we nu eigenlijk op?</strong></p>
]]></content:encoded>
    </item>
    <item>
      <title>2019 - Blast from the past: hoe 333travel de reisbranche op zijn kop zette</title>
      <link>https://www.allsubjectsmatter.nl/nl/how-333travel-is-revolutionizing-the-travel-industry/</link>
      <guid isPermaLink="false">65b0f24294a6360001d8cd57</guid>
      <pubDate>Tue, 02 Jan 2024 13:48:00 +0100</pubDate>
      <dc:creator>&lt;![CDATA[Remco Loup.]]></dc:creator>
      <category>&lt;![CDATA[Strategy]]></category><category>&lt;![CDATA[Building]]></category>
      <description>&lt;![CDATA[Ontdek hoe de AI &#39;Joy&#39; van 333travel al in 2019 de klantinteractie veranderde: het intentiebegrip van AI gecombineerd met een persoonlijke touch. Een gamechanger in AI-gedreven reisoplossingen!]]></description>
      <media:content url="https://www.allsubjectsmatter.nl/how-333travel-is-revolutionizing-the-travel-industry/feature.jpg" medium="image"/>
      <content:encoded>&lt;![CDATA[<p>Hier de link naar het originele artikel via de Wayback Machine: door corona en de overname van flow.ai door Khoros is deze blog niet meer publiek beschikbaar. Deze blog is geschreven in Q3 van 2019.</p>
<p><a href="https://web.archive.org/web/20201020201705/https://flow.ai/blog/how-333travel-is-revolutionizing-the-travel-industry" data-external>https://web.archive.org/web/20201020201705/https://flow.ai/blog/how-333travel-is-revolutionizing-the-travel-industry</a></p>
<p>Helaas hebben we ervoor gekozen om Joy begin 2022 te stoppen, vanwege gebrek aan resultaat en omdat corona ons hard raakte. De klantbetrokkenheid was te laag om het in stand te houden, helaas.</p>
<hr>
<blockquote class="pull-quote"><p>Artificial intelligence (AI) om buiten openingstijden op een persoonlijke manier in contact te blijven. Dat is waar <a href="https://web.archive.org/web/20201020201705/https://www.333travel.nl/" data-external>333travel</a> hun chatbot Joy voor gebruikt.</p>
</blockquote>
<p>De reisbranche is een innovatieve markt. De concurrentie is groot en de drang naar een technologisch voordeel ook, maar dat is lastig. Wie zich in deze markt niet technisch zelfstandig onderscheidt, wordt al snel door de massa opgeslokt en kan niet meer uniek zijn in zijn propositie. Daarmee komt je bestaansrecht in gevaar.</p>
<p>We zoeken constant naar manieren om onze positie op de markt te verbeteren en vertalen elke dag IT op de juiste manier naar de business, zodat IT echt voor ons werkt. Blijf experimenteren en blijf nieuwe dingen proberen!</p>
<h2 id="our-challenge">Onze uitdaging</h2>
<p>We zoeken altijd naar manieren om onze klanten beter van dienst te zijn, en dat willen we op een persoonlijke manier doen. Zo bouwen we echt een relatie op met onze klanten en bieden we volledig op maat gemaakte oplossingen.</p>
<p>We zijn ervan overtuigd dat je bij een reis met ons de best mogelijke beleving van genot krijgt, want bij 333travel denken we met je mee van A tot Z en ontzorgen we je volledig.</p>
<blockquote>
<p>&hellip;Met behulp van Joy heeft de klant sneller een antwoord en kunnen we meer kwaliteit bieden, omdat Joy indirect zorgt voor minder werk en meer beschikbare informatie voordat er een persoonlijk contactmoment plaatsvindt&hellip;</p>
</blockquote>
<p>Het inzetten van artificial intelligence klinkt daardoor misschien tegenstrijdig, maar dat is het zeker niet. We gaan deze AI natuurlijk allereerst gebruiken om onze klanten de bestaande informatie / FAQ op onze website te geven als ze daar vragen over hebben.</p>
<p>Maar naast het verstrekken van informatie zullen we altijd proberen door te sturen naar persoonlijk contact. Het is voor ons belangrijk om fysiek in contact te komen met onze potentiële klanten, op een persoonlijke, makkelijke en toegankelijke manier.</p>
<h2 id="our-goal">Ons doel</h2>
<p>Het geautomatiseerd verzamelen van leads op een zo persoonlijk mogelijke manier is dus onze reden om deze artificial intelligence in te zetten. De rest is een bonus. We streven er zelfs naar om via deze AI juist méér persoonlijk contact te realiseren. De focus ligt op het creëren van waarde en het optimaliseren van onze customer journey buiten onze reguliere werktijden.</p>
<h2 id="our-solution">Onze oplossing</h2>
<p>Samen met Flow.ai zijn we gaan testen op welke persoonlijke manieren we een klant zover kunnen krijgen dat die contact met ons opneemt.</p>
<p>Een juiste use case van AI is hierbij heel belangrijk, maar ook de manier waarop je deze AI kunt trainen. We wilden de meest natuurlijke vorm van interactie creëren, maar we moeten werken met niet-sexy data zoals &ldquo;departure&rdquo;- en &ldquo;arrival&rdquo;-data om vooraf een beeld te krijgen van wanneer iemand op vakantie wil. Dat is een grotere uitdaging dan het lijkt.</p>
<blockquote class="pull-quote"><p>We wilden absoluut voorkomen dat onze AI het niet direct begrijpt als iemand zegt: &ldquo;I want to visit Thailand on June 17 for 1 week&rdquo;.</p>
</blockquote>
<h2 id="a-natural-interaction-with-the-right-intent">Een natuurlijke interactie met de juiste intent</h2>
<p>We hebben onze LLM daarom zo getraind dat hij intents begrijpt met kennis van wat de vertrekdatum is en wanneer je wilt vertrekken. Het is dus geen absoluut feit wat we van je willen weten, maar een waarde die binnen de betekenis van &ldquo;wanneer wil je vertrekken&rdquo; valt. Er zijn zoveel verschillende, maar ook correcte antwoorden op deze vraag. En als je onze eisen meeneemt, moet deze bot ook alles hieronder en meer begrijpen:</p>
<ul>
<li>In de zomer wil ik in de vakantie…</li>
<li>In de winter wil ik graag verblijven in…</li>
<li>In het najaar wil ik naar…</li>
<li>Ik wil met kerst in Thailand zitten…</li>
<li>Volgend jaar willen we naar…</li>
</ul>
<p>Het wordt direct onvriendelijk als er na deze vraag alsnog een datumveld ingevuld moet worden met wanneer je wilt vertrekken. Of erger nog: als de bot de vraag helemaal niet begrijpt. Een klant weet bovendien vaak zelf niet precies wanneer hij wil vertrekken. Als hij zo begint, moet hij die informatie dan verplicht invullen? Je hebt bij dit type klant één kans.</p>
<blockquote class="pull-quote"><p>Klanten zijn de niet-werkende chatbots van grote bedrijven, die FTE willen besparen en willen zien hoe ver ze kunnen gaan in het pesten van hun klanten, spuugzat.</p>
</blockquote>
<p>We leggen de kerninformatie van de verwachte vertrekperiode automatisch direct vast. Die wordt immers tijdens het contactmoment verder uitgediept; voor nu weten onze specialisten wat de intent is en kunnen ze daarop inspelen.</p>
<p>Binnen onze implementatie is het ook mogelijk om alle variabelen die we nodig hebben uit één zin van een klant te halen. Daarna hebben we alleen de contactgegevens nodig en bellen we op het gevraagde tijdstip en de gevraagde datum.</p>
<h3 id="collecting-data">Data verzamelen</h3>
<blockquote>
<p>“Goedemiddag, ik zoek een vakantie die begint in Indonesië en eindigt op Bali voor 2 volwassenen en 2 kinderen met een hotel aan het strand, vertrek op 21 juli en weer thuis op 3 augustus.”</p>
</blockquote>
<p>De zin hierboven is een praktisch voorbeeld van wat Joy begrijpt. We leggen deze waarden vast en weten dan meteen dat er genoeg data is. We vragen alleen nog het telefoonnummer/e-mailadres van de klant en bellen hem op een door hemzelf aangegeven moment.</p>
<p>We bellen je op het door jou gewenste moment. We hebben er bewust voor gekozen om de klant geen date picker te laten gebruiken, om de natuurlijke flow te behouden. Voor de klant is het makkelijker om te zeggen: “donderdag over een week om 10 uur”. Daaruit begrijpen we wat de intentie is en bellen we die klant precies op dat moment. Er zijn ook genoeg klanten die zeggen dat ze nú gebeld willen worden. Of ze op dat moment gebeld kunnen worden of niet, ze vallen af zodra ze een date picker voorgeschoteld krijgen. Zeker als de dag van vandaag ontbreekt.</p>
<p>Omdat de klant onze website bezoekt, weten we ook vanaf welke pagina zijn verzoek om persoonlijk contact binnenkomt. Zo hebben onze specialisten nog meer informatie om een beeld te krijgen van wat de intentie is.</p>
<p>Deze data wordt automatisch als lead/voorstel verstuurd naar ons backoffice-systeem BOSS. En elke opvolging van deze lead wordt daar vastgelegd.</p>
<h2 id="result-joy-sees-the-light">Resultaat: Joy ziet het levenslicht.</h2>
<p>Na een groot aantal interne tests, diverse finetuning-aanpassingen en het gebruik van verschillende methoden om ons doel te bereiken, is Joy geboren. We hebben haar ook een persoonlijk gezicht gegeven, omdat we de gesprekken persoonlijk willen houden. We geven natuurlijk wel aan dat Joy een “Virtual Travel Assistant” is. Onze echte collega’s blijven de reisspecialisten.</p>
<blockquote>
<p>&hellip;Wat vooral opvalt aan de resultaten is dat de interacties en verzoeken die via Joy binnenkomen meestal afkomstig zijn van mensen tussen de 20 en 35 jaar&hellip;</p>
</blockquote>
<h2 id="important-lessons">Belangrijke lessen</h2>
<p>De belangrijkste les hierin is misschien een beetje een open deur, maar zorg dat je doel op papier staat, en begin met de simpelste implementatie van dat doel en ontwikkel dat langzaam tot een complexer werkend eindproduct.</p>
<p>We zijn eerst gaan kijken hoe we onze benodigde data kunnen verzamelen met <a href="https://web.archive.org/web/20201020201705/https://flow.ai/" data-external>Flow.ai</a> en hoe dat echt werkt. Daarna hebben we veel verschillende scenario’s getest en zijn we langzaam richting één complete flow gegaan die het beste van meerdere flows combineerde. Zo kregen we meteen veel ervaring met de verschillende opties die Flow bood.</p>
<p>We worden hierbij goed ondersteund door Flow.ai, maar door onze eigen kennis in huis hadden we de support niet constant nodig en konden we echt diep op het onderwerp ingaan.</p>
<p>Het flow.ai-systeem is goed opgebouwd, heel logisch en begrijpelijk. Dat zou je er niet van moeten weerhouden om te experimenteren.</p>
<h2 id="the-future">De toekomst</h2>
<p>Het eerste kwartaal is onze drukste periode. Omdat we Joy relatief kort voor deze periode hebben geïmplementeerd, hebben we de optie Live Chat nog niet geactiveerd. Dat gaan we na dit kwartaal doen.</p>
<p>Daarnaast willen we in de nabije toekomst nog verder gaan met Joy en haar dé assistent van ons klantportaal maken, die je op weg helpt nadat je een boeking hebt gemaakt. Als Joy het antwoord niet weet, kom je meteen in contact met de specialist bij wie je de reis hebt geboekt. Heb je vragen tijdens je reis? Vraag het Joy. Heb je problemen tijdens je reis? Joy zorgt ervoor dat je zo snel mogelijk een antwoord krijgt en dat je indien nodig direct contact met ons krijgt.</p>
<blockquote class="pull-quote"><p>We zien Joy als onze “Virtual Travel Assistant”, waarbij de heel specifieke kennis van onze bestemmingen en onze kennis van maatwerk bij onze reisspecialisten blijft, want dat is de kracht van ons persoonlijke contact waarmee wij persoonlijk het verschil maken, binnen onze filosofie.</p>
</blockquote>
]]></content:encoded>
    </item>
    <item>
      <title>ChatGPT en de toekomst van bloggen</title>
      <link>https://www.allsubjectsmatter.nl/nl/chatgpt-and-the-future-of-blogging/</link>
      <guid isPermaLink="false">641b4bd824150b003de323c3</guid>
      <pubDate>Wed, 22 Mar 2023 20:09:35 +0100</pubDate>
      <dc:creator>&lt;![CDATA[Remco Loup.]]></dc:creator>
      <category>&lt;![CDATA[Building]]></category>
      <description>&lt;![CDATA[Ik leg uit hoe ik als Nederlandse moedertaalspreker ChatGPT en Hemingway inzet om grammatica, zinsopbouw en leesbaarheid van mijn Engelse teksten te verbeteren, met als doel een gepolijster en begrijpelijker eindresultaat.]]></description>
      <media:content url="https://www.allsubjectsmatter.nl/chatgpt-and-the-future-of-blogging/feature.jpg" medium="image"/>
      <content:encoded>&lt;![CDATA[<h2 id="introduction">Introductie</h2>
<p>Ik schrijf deze introductie omdat ik wil uitleggen waarom ik ChatGPT gebruik en waarvoor. In het begin was ik een beetje sceptisch over wat ChatGPT was. Voor mij leek het meer een soort fantasie.</p>
<p>Maar dat geldt alleen als je vragen stelt waar je zelf weinig kennis van hebt. Daar moeten we heel voorzichtig mee zijn, want je weet niet wanneer het dingen verzint. En ook: de juiste soort vragen stellen helpt ChatGPT om niet zelf dingen te verzinnen.</p>
<h2 id="practical-examples">Praktische voorbeelden</h2>
<p>In ons werk hebben we het bijvoorbeeld getest om introductieteksten te schrijven voor een hotel dat we hadden. ChatGPT verzon van alles, over zwembaden die er zouden zijn en dat soort dingen. Dat hotel heeft helemaal geen zwembad.</p>
<p>Dus daar is het niet nuttig. Maar over onderwerpen waar je wél verstand van hebt, is het juist wél nuttig. Je kunt de juiste vragen stellen en dan maakt het een tekst die meestal voor minstens 75% bruikbaar is. Dat scheelt tijd.</p>
<blockquote class="pull-quote"><p>ChatGPT is voor taal wat de rekenmachine was voor wiskunde.</p>
</blockquote>
<p>ChatGPT gaat ons leven een stuk makkelijker maken door informatie te leveren over onderwerpen waar je over wilt schrijven en al kennis van hebt.</p>
<h2 id="chatgpt-and-allsubjectsmatter">ChatGPT en AllSubjectsMatter</h2>
<p>Op deze website gebruik ik ChatGPT om mijn grammatica en zinsopbouw te corrigeren. Ik ben een geboren Nederlander. En ik zou graag willen opscheppen dat ik vroeger zo goed was in mijn Engelse lessen. Ik deed op school nooit huiswerk, maar haalde toch negens en tienen.</p>
<p>Ik moet nu toegeven dat dat allemaal flink verroest is. Vooral omdat ik jarenlang niet regelmatig in het Engels heb geschreven, tot nu toe. Dus op dit moment helpt het me om beter leesbare Engelse teksten te schrijven.</p>
<p>Dit produceerde ChatGPT van de bovenstaande regels.</p>
<blockquote>
<p>I use ChatGPT to correct my grammar and sentence flow, as I am a native Dutch speaker. I would like to brag that I used to excel in my English classes, never completing any homework but still receiving 9&rsquo;s and 10&rsquo;s. However, I must admit that my English has become quite rusty since I haven&rsquo;t written in the language regularly for years. Currently, ChatGPT is helping me improve my ability to write more readable English texts.</p>
</blockquote>
<p>En dit is dezelfde tekst nadat ik hem heb gecorrigeerd met <a href="https://hemingwayapp.com/" data-external>Hemingway</a></p>
<blockquote>
<p><em>I use ChatGPT to correct my grammar and sentence flow, as I am a native Dutch speaker. I would like to brag that I used to excel in my English classes.</em></p>
</blockquote>
<blockquote>
<p><em>I never did any homework but still received 9&rsquo;s and 10&rsquo;s in school. But I must admit that my English has become quite rusty since I haven&rsquo;t written in the language often for years. For now ChatGPT is helping me improve my ability to write more readable English texts.</em></p>
</blockquote>
<p>Het origineel is voor mij al niet slecht, maar dit is gewoon een voorbeeld van wat je kunt doen met tools die helpen bij leesbaarheid.</p>
<h2 id="what-is-hemingway">Wat is Hemingway?</h2>
<p><a href="https://hemingwayapp.com/" data-external>Hemingway</a> is een visuele editor voor leesbaarheid die je kan helpen om zinnen te vereenvoudigen. Ik gebruik dit de hele tijd om al mijn Engelse teksten te controleren op leesbaarheid. Dit helpt ook om je teksten makkelijker leesbaar te maken.</p>
<figure class="figure"><picture><source type="image/avif" sizes="(max-width: 47.99rem) calc(100vw - 2.5rem), 720px"><source type="image/webp" sizes="(max-width: 47.99rem) calc(100vw - 2.5rem), 720px"><img src="https://www.allsubjectsmatter.nl/nl/chatgpt-and-the-future-of-blogging/images/image-4_hu_d84c0d75ce005095.webp" alt="" width="560" height="295" data-zoom-src="https://www.allsubjectsmatter.nl/nl/chatgpt-and-the-future-of-blogging/images/image-4_hu_7c4c22a11578f1f7.webp" loading="lazy" decoding="async">
  </picture></figure>

<h2 id="conclusion">Conclusie</h2>
<p>Ik gebruik een van deze twee tools om beter Engels te proberen te schrijven. Soms gebruik ik ze allebei. Hier kan ChatGPT echt schitteren: je schrijven verbeteren. Door ChatGPT te gebruiken begon ik meteen helderder en simpeler te leren schrijven.</p>
<p>Hopelijk is er dus steeds minder te corrigeren wanneer ik een tekst door Hemingway of ChatGPT haal. Dat komt omdat je zelf ook leert door je teksten door deze tools te halen.</p>
<p>Ik vind het niets om ChatGPT mijn posts volledig te laten schrijven en ze om te buigen tot iets dat &ldquo;mij&rdquo; vertegenwoordigt, want dat voelt voor mij niet goed. Het idee moet van mij komen en ik gebruik ChatGPT soms om het te polijsten. En niet andersom.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
