Een end-to-end-pijplijn
Uploaden, OCR, in stukken verdelen, insluiten, ophalen, beantwoorden met bronvermeldingen — met herpogingen en kwaliteitscontroles bij de stappen die mislukken door onjuiste invoer, in plaats van aan het einde.
Casestudy over AI-SaaS
Een platform dat een PDF — inclusief de scans waarin niemand kan zoeken — omzet in iets waar mensen vragen over kunnen stellen, via webchat, via sms of door de camera van hun telefoon te richten op een QR-code die is afgedrukt op het voorwerp waarover ze vragen stellen.

TextGPT + IQR.Codes zijn twee producten in één pijplijn, ontwikkeld voor Modezilla LLC. TextGPT is de persoonlijke kant: upload een document, kies een persona en stel vragen. IQR.Codes is de zakelijke kant, waar een bedrijf zijn handleidingen en beleidsregels uploadt, een QR-code afdrukt en elke klant die deze scant een gesprek start waarin de antwoorden al bekend zijn.
Het proces erachter is in beide gevallen hetzelfde: uploaden, OCR, in stukken verdelen, insluiten, ophalen, beantwoorden met bronvermeldingen. Wat het lastig maakte, is de staat waarin een PDF daadwerkelijk binnenkomt. Een schone digitale export is een opgelost probleem; een foto van een pagina uit een vijftien jaar oude handleiding is dat niet, en dat zijn juist de documenten waar bedrijven in de praktijk mee te maken hebben.
De rest van de architectuur vloeit voort uit twee vereisten die al vóór de eerste regel waren vastgelegd: een antwoord moet binnen een seconde worden teruggestuurd, en geen enkele organisatie mag ooit de documenten van een andere organisatie inzien. De tweede vereiste wordt in Postgres afgedwongen door beveiliging op rijniveau, in plaats van dat de applicatie zelf moet zorgen voor het filteren.

Een stapsgewijze uitleg over TextGPT en IQR.Codes: van het uploaden van een PDF naar het dashboard tot het moment waarop een klant een afgedrukte code scant en het antwoord via een sms ontvangt.
PDF-import met OCR
Documenten worden in hun oorspronkelijke vorm ingevoerd, inclusief scans. Voordat er iets bij de parser terechtkomt, worden er een OCR-bewerking en een opschoningsstap uitgevoerd, zodat een gefotografeerde pagina doorzoekbaar wordt in plaats van te worden overgeslagen.
Antwoorden met bronvermeldingen
Een chatfunctie die is uitgebreid met informatieopvraging, waarbij antwoorden worden gegeven op basis van de geüploade documenten en wordt aangegeven uit welk document het antwoord afkomstig is, in plaats van op basis van wat het model al dacht te weten.
QR- en SMS-kanalen
Als de code wordt gescand, wordt een webchat met het merk of een sms-gesprek geopend. Er hoeft niets te worden geïnstalleerd en er hoeft geen account te worden aangemaakt; via sms bewaart de klant het gespreksverloop in zijn of haar berichten.
Standaard multi-tenant
Elke rij en elk bestand wordt binnen Postgres zelf aan een organisatie gekoppeld, via beveiliging op rijniveau en ondertekende URL’s, in plaats van via een filter op applicatieniveau.
Abonnementen en facturering
De Stripe-abonnementsniveaus bepalen welke kanalen een account krijgt en in welke mate deze mogen worden gebruikt, met een klantenportaal voor alle zaken na de eerste betaling.
Het antwoord staat in de handleiding. De handleiding is een scan. De scan is niet doorzoekbaar, en niemand gaat veertig pagina’s doorlezen om één regel te vinden.
Bedrijven zaten op documenten die al alle antwoorden bevatten waar hun klanten om vroegen — producthandleidingen, beleidsregels, specificatiebladen, retourvoorwaarden — in een formaat waarin niemand zoekopdrachten kon uitvoeren. Wanneer die documenten foto’s van pagina’s waren in plaats van digitale bestanden, leverde zelfs een zoekopdracht in platte tekst geen resultaten op. De tijdelijke oplossing was een supportwachtrij: iemand die de hele dag dezelfde PDF opnieuw las en dezelfde alinea opnieuw intypte, terwijl een klant daarop moest wachten.
Documenten die niet doorzoekbaar zijn
De kennis was wel degelijk aanwezig, in PDF-bestanden — en het ergste was dat het vaak afbeeldingen van pagina’s betrof, waarbij zelfs een tekstzoekopdracht geen resultaten opleverde.
Wrijving bij de voordeur
Alles waarbij de klant werd gevraagd een app te installeren of een account aan te maken, zorgde ervoor dat ze afhaakten nog voordat de vraag überhaupt was gesteld.
Kosten en isolatie op grote schaal
Het systeem moest snel en goedkoop blijven, ook bij miljoenen documenten, en tegelijkertijd garanderen dat geen enkele organisatie de documenten van een andere organisatie kon inzien.
Eén proces: uploaden, OCR, in stukken verdelen, insluiten, beantwoorden.
Elk document volgt hetzelfde traject. Het wordt geüpload, indien nodig door OCR verwerkt, in stukken opgedeeld, ingebed en samen met de bijbehorende vectoren opgeslagen in Postgres. Een vraag wordt op dezelfde manier ingebed en beantwoord op basis van de teruggekoppelde informatie, waarbij de bron wordt vermeld. Bovenop die ene pijplijn zitten twee producten — TextGPT voor een persoon met een document, IQR.Codes voor een bedrijf waarvan de klanten de vragen hebben — en twee manieren om toegang te krijgen: webchat en sms, die beide bereikbaar zijn via een code die op de verpakking is afgedrukt.
Uploaden, OCR, in stukken verdelen, insluiten, ophalen, beantwoorden met bronvermeldingen — met herpogingen en kwaliteitscontroles bij de stappen die mislukken door onjuiste invoer, in plaats van aan het einde.
TextGPT voor persoonlijk gebruik en IQR.Codes voor zakelijk gebruik, waarbij de invoer- en opvraaglaag wordt gedeeld in plaats van dat elk systeem zijn eigen exemplaar daarvan heeft.
Supabase met beveiliging op rijniveau en pgvector, op serverloze functies van Vercel. Dankzij beleidsregels met een beperkt toepassingsgebied en ondertekende URL’s is isolatie een inherent kenmerk van de database.
The personal side of the platform: a chat window over whatever has been uploaded, with a persona that sets how the answers come back. The badge under the title is the one currently answering, and switching it is a sentence in the conversation rather than a trip to a settings page.

A team creates a product, drops in the PDF documentation, and optionally writes a system prompt that steers how the assistant answers about that one product. What comes out is a secure knowledge base and a QR code pointing at it — branded SMS or web chat, no support ticket in between.

Every product has its own row, with codes to view, edit and download. That download is what actually gets printed — on packaging, on an event flyer, on a sticker beside the machine — so the customer with the question is one camera scan away from the answer.

Web chat and SMS land in the same log, with the message, the time, the direction and the delivery status on a single line. It is what turns the chatbot from something a business hopes is working into something it can audit — and what shows which questions customers keep asking.

Three Stripe tiers, where the feature matrix is the product decision made visible. The entry plan is web chat reached from a printed code, the middle one adds SMS on a shared toll-free number, and the top one is a dedicated line for a brand that wants the number to be its own.

Snel genoeg om te reageren, streng genoeg om te vertrouwen.
Het platform leverde prestaties op basis van concrete cijfers in plaats van impressies: hoe lang het duurt voordat een document doorzoekbaar wordt, hoe lang het duurt voordat een antwoord wordt teruggegeven, hoeveel van een slechte scan de OCR-verwerking overleeft, en in hoeverre de gegevens van de ene organisatie toegankelijk zijn voor een andere organisatie.
Solution: Er vindt een OCR-voorbewerkingsstap plaats, gevolgd door een heuristische opschoningsronde, voordat er iets de LLM-parser bereikt, met daarachter herhalingspogingen en kwaliteitscontroles. Dankzij die combinatie is de nauwkeurigheid bij moeilijke scans van lage kwaliteit verbeterd van onbruikbaar naar betrouwbaar.
Solution: Geoptimaliseerde pgvector-indexen, batchgewijze schrijfbewerkingen en cosinus-gelijkenisberekeningen op basis van gefilterde bereiken in plaats van het volledige corpus — met lichtgewicht metadata-caching voor de terugkerende zoekopdrachten.
Solution: Een door RLS afgedwongen schema met scheiding tussen services en rollen, en Supabase Storage dat alleen toegankelijk is via ondertekende URL’s binnen het kader van specifieke beleidsregels. Organisatiegegevens worden gescheiden door de database, niet door de code waarmee ze worden opgevraagd.
Heb je documenten die niemand kan doorzoeken?
Laten we er antwoorden van maken.