[{"data":1,"prerenderedAt":331},["ShallowReactive",2],{"footer-vacatures-nl":3,"case-omgevingsalert-data-bruikbaar-maken-nl":4,"content-by-keys-useCases-nl-eigen-data-en-kennis-gebruiken-met-ai,ai-toevoegen-aan-bestaande-software":171},[],{"id":5,"title":6,"approach":7,"body":22,"build":29,"card":42,"connections":46,"cta":47,"dataExamples":46,"description":26,"extension":53,"facts":54,"featured":69,"guardrails":46,"hero":70,"integrations":46,"key":75,"meta":76,"navigation":77,"offers":78,"order":88,"path":89,"proof":90,"relations":103,"result":121,"seo":133,"situation":136,"stem":149,"summary":150,"usecases":151,"visuals":163,"__hash__":170},"cases_nl\u002Fcases\u002Fomgevingsalert-data-bruikbaar-maken.md","OmgevingsAlert: van versnipperde data naar relevante meldingen",{"title":8,"steps":9},"Hoe hebben we het aangepakt?",[10,13,16,19],{"title":11,"text":12},"Iedere bron betrouwbaar binnenhalen","We bouwden per bron de passende integratie: geplande imports, API-koppelingen, XML-verwerking, RSS en HTML-imports en processen die continu naar live datastromen luisteren. Importwerk draait asynchroon zodat grote of trage bronnen de rest van het product niet blokkeren.\n",{"title":14,"text":15},"Alles vertalen naar één gemeenschappelijk model","Bronrecords houden hun eigen specifieke informatie, maar worden daarna geïndexeerd naar een gemeenschappelijk Feature-model. Daardoor hoeven apps en andere afnemers niet te begrijpen hoe een KNMI-waarschuwing, bekendmaking of OV-bericht oorspronkelijk is aangeleverd.\n",{"title":17,"text":18},"Geografie als onderdeel van de kern","Met PostgreSQL en PostGIS koppelen we punten, gebieden en andere geometrie aan de locaties die gebruikers volgen. Assets kunnen bijvoorbeeld adressen, punten, polygonen of geïmporteerde KML-gebieden zijn.\n",{"title":20,"text":21},"Pas daarna bepalen wat relevant is","Na de geografische selectie passen we filters toe op onder andere categorie, afstand, woorden die moeten voorkomen en woorden die juist uitgesloten moeten worden. Alleen relevante combinaties worden aan de inbox van een gebruiker gekoppeld.\n",{"type":23,"value":24,"toc":25},"minimark",[],{"title":26,"searchDepth":27,"depth":27,"links":28},"",2,[],{"title":30,"intro":31,"points":32},"Wat hebben we gebouwd?","De kern is een dataplatform dat zeer verschillende bronnen terugbrengt tot één bruikbare stroom van omgevingsinformatie. Daarboven zitten matching, filtering, notificaties en verschillende productinterfaces.\n",[33,36,39],{"title":34,"text":35},"Een brede importlaag","Het platform verwerkt onder andere officiële publicaties, ruimtelijke plannen, politieberichten, KNMI-weerswaarschuwingen, NDW-wegwerkzaamheden, NDOV-verstoringen, lokaal nieuws, aardbevingen en eigen berichten van gemeenten.\n",{"title":37,"text":38},"Eén genormaliseerde Feature-pipeline","Iedere bron wordt vertaald naar gedeelde velden zoals categorie, publicatiedatum, geometrie, broninformatie en de onderdelen die nodig zijn om het bericht in de verschillende producten te tonen. Nieuwe brontypen hoeven daardoor niet opnieuw door alle clients apart te worden geïmplementeerd.\n",{"title":40,"text":41},"Een geografische matching-engine","Nieuwe data wordt gekoppeld aan relevante locaties en objecten. Voor consumenten kan dat een punt met een straal zijn; professionele gebruikers kunnen ook grotere gebieden of eigen geometrie bewaken. Matching voor grotere aantallen assets wordt in batches verwerkt om de achtergrondqueues beheersbaar te houden.\n",{"tag":43,"title":6,"summary":44,"metric":45},"Data platform","Uiteenlopende publieke en live databronnen worden geïmporteerd, genormaliseerd, geografisch gekoppeld en pas daarna relevant gemaakt voor de juiste gebruiker.","Sinds 2012 · van overheids-XML tot live OV-feeds.",null,{"title":48,"body":49,"primaryCta":50,"secondaryCta":51,"local":52},"Data genoeg, maar nog geen bruikbaar systeem?","Laat ons zien waar de informatie vandaan komt en wat er uiteindelijk mee moet gebeuren. We helpen de datastroom zo neerzetten dat andere software er betrouwbaar op kan bouwen.\n","Plan een gesprek","Bekijk aanbod","Senior AI- en software engineering vanuit Delft, voor organisaties in Delft, Den Haag, Rotterdam en omgeving.\n","md",{"title":55,"items":56},"Case in het kort",[57,60,63,66],{"label":58,"value":59},"Product","Sinds 2012 in ontwikkeling",{"label":61,"value":62},"Databronnen","Van overheids-XML tot live OV-feeds",{"label":64,"value":65},"Matching","Geografisch en inhoudelijk per locatie",{"label":67,"value":68},"Output","Apps, dashboard, website, push en e-mail",false,{"headline":71,"intro":72,"primaryCta":73,"secondaryCta":74},"Data verzamelen is makkelijk. Bepalen welk stukje voor wie relevant is, is het echte werk.","OmgevingsAlert begon in 2012 met een eenvoudig idee: kies een locatie en ontvang relevante vergunningen en ruimtelijke ontwikkelingen in de buurt. Inmiddels verwerkt het platform veel meer soorten informatie. Iedere bron heeft zijn eigen formaat, ritme, kwaliteit en geografische logica. De engineering zit vooral in alles wat er moet gebeuren voordat je data kunt tonen.\n","Bekijk hoe de datastroom werkt","Vertel wat je wilt bouwen","omgevingsalert-data-bruikbaar-maken",{},true,{"eyebrow":79,"primary":80},"Passend aanbod",{"key":81,"title":82,"text":83,"price":84,"result":85,"duration":86,"nextStep":87},"build-integrate","Build & Integrate","We bouwen de technische laag tussen jullie databronnen en het product dat ermee moet werken: imports, API-koppelingen, normalisatie, processing, matching en betrouwbare integraties.\n","Vaste prijs na scope","Een productieklare datastroom geïntegreerd in jullie software","Afhankelijk van scope","Eerst brengen we bronnen, volumes, verwerking en gewenste output in kaart",3,"\u002Fcases\u002Fomgevingsalert-data-bruikbaar-maken",{"title":91,"intro":92,"points":93},"De complexiteit zit onder de motorkap","OmgevingsAlert laat goed zien waarom data-engineering meer is dan een API uitlezen en records opslaan. De waarde ontstaat pas wanneer onbetrouwbare, veranderende en ongelijksoortige input veilig door een complete productieketen kan bewegen.\n",[94,97,100],{"title":95,"text":96},"Batch, realtime en periodiek naast elkaar","De ene bron wordt dagelijks gecontroleerd, politiegegevens iedere tien minuten en OV-berichten komen via een permanent luisterend pub\u002Fsub-proces binnen. De backend moet al die vormen naast elkaar betrouwbaar kunnen verwerken.\n",{"title":98,"text":99},"PostGIS bepaalt wat waar relevant is","Features en assets bevatten echte geometrie. Matching gebruikt ruimtelijke berekeningen, afstandsregels en gebiedsrelaties in plaats van alleen tekstuele plaatsnamen of postcodes.\n",{"title":101,"text":102},"De pipeline eindigt niet bij opslag","Na import volgen normalisatie, matching, filtering, inboxstatus, toegangsregels en notificatie. Push kan direct of gebundeld worden verstuurd en Pro-gebruikers kunnen relevante meldingen via e-maildigest ontvangen.\n",{"buyerTriggerKeys":104,"useCaseKeys":106,"offerKeys":109,"solutionKey":110,"capabilityKeys":111},[105],"ai-laten-bouwen",[107,108],"eigen-data-en-kennis-gebruiken-met-ai","ai-toevoegen-aan-bestaande-software",[81],"omgevingsalert",[112,113,114,115,116,117,118,119,120],"software-engineering","backend-engineering","data-engineering","integrations","geospatial","postgresql","postgis","background-processing","api-engineering",{"title":122,"items":123},"Wat levert het op?",[124,127,130],{"title":125,"text":126},"Eén product bovenop totaal verschillende databronnen","Voor de gebruiker voelt een vergunning, een wegafsluiting of een weerswaarschuwing als hetzelfde soort productervaring, terwijl de onderliggende bronnen technisch nauwelijks op elkaar lijken.\n",{"title":128,"text":129},"Van landelijke data naar persoonlijke relevantie","De backend vertaalt grote stromen algemene informatie naar een veel kleinere selectie per locatie. Gebruikers hoeven dus niet zelf overheidssites, nieuwsfeeds en verkeersbronnen af te zoeken.\n",{"title":131,"text":132},"Een fundament waarop we kunnen blijven uitbreiden","Nieuwe categorieën kunnen dezelfde import-, normalisatie-, matching- en notificatie-infrastructuur gebruiken. Op die basis hebben we later ook AI-filters toegevoegd die voor bepaalde workflows inhoudelijk kunnen beoordelen of een melding relevant is.\n",{"title":134,"description":135},"OmgevingsAlert: complexe databronnen samenbrengen | 9to5 software","Case: hoe 9to5 software voor OmgevingsAlert uiteenlopende publieke en live databronnen importeert, normaliseert, geografisch matcht en beschikbaar maakt in apps, dashboards en notificaties.\n",{"title":137,"intro":138,"points":139},"Waar zit de complexiteit?","De gebruiker wil maar één ding weten: wat gebeurt er in mijn omgeving dat voor mij relevant is? Achter die eenvoudige vraag zit een dataplatform waarin informatie uit verschillende organisaties, protocollen en formaten bij elkaar moet komen.\n",[140,143,146],{"title":141,"text":142},"Iedere bron werkt anders","Officiële publicaties komen uit mutation-event XML en metadata, wegwerkzaamheden uit een gzipped DATEX-feed, OV-verstoringen via een continu ZeroMQ pub\u002Fsub-kanaal, weerswaarschuwingen via KNMI open data en lokaal nieuws via RSS, Atom of HTML. Eén generieke importer bestaat dus niet.\n",{"title":144,"text":145},"Brondata zegt nog niet voor wie iets relevant is","Een vergunning, verkeersmaatregel of waarschuwing kan landelijk beschikbaar zijn, maar een gebruiker wil alleen informatie voor zijn eigen huis, buurt, route of beheerd object. Daarvoor moet de data betrouwbare geografische informatie krijgen en vervolgens tegen locaties en gebieden worden gematcht.\n",{"title":147,"text":148},"Dezelfde data moet op meerdere plekken werken","De genormaliseerde informatie wordt gebruikt door de mobiele apps, Mijn OmgevingsAlert, OmgevingsAlert Pro, de publieke website en OverUwBuurt. Daarnaast stuurt dezelfde backend pushnotificaties, e-maildigests en andere productflows aan.\n","cases\u002Fomgevingsalert-data-bruikbaar-maken","OmgevingsAlert brengt uiteenlopende publieke en live databronnen samen in één product. Officiële bekendmakingen, ruimtelijke plannen, politieberichten, weerswaarschuwingen, wegwerkzaamheden, OV-verstoringen, lokaal nieuws en andere bronnen komen allemaal anders binnen. We bouwden de backend die deze data importeert, normaliseert, geografisch koppelt aan locaties en uiteindelijk alleen de relevante informatie bij de juiste gebruiker laat terechtkomen.\n",{"title":152,"items":153},"Waar is dit relevant?",[154,157,160],{"title":155,"text":156},"We hebben veel data, maar krijgen er nog geen bruikbaar product van","De informatie zit in verschillende bronnen, formaten en systemen en moet eerst worden samengebracht voordat gebruikers er iets mee kunnen.\n",{"title":158,"text":159},"Onze data moet gekoppeld worden aan locaties of andere context","Alleen de records opslaan is niet genoeg. Het systeem moet kunnen bepalen welke informatie relevant is voor welke klant, locatie, object of proces.\n",{"title":161,"text":162},"We willen nieuwe bronnen toevoegen zonder het hele product te verbouwen","Een goede normalisatielaag voorkomt dat iedere nieuwe koppeling opnieuw wijzigingen vereist in alle apps, dashboards en andere afnemers.\n",{"hero":164,"situation":165,"approach":166,"build":167,"proof":168,"teaser":169},"\u002Fmedia\u002Fscreenshots\u002Fomgevingsalert-hero.webm","\u002Fmedia\u002Fproducts\u002Fomgevingsalert-sources.webp","ls-route-converge","\u002Fmedia\u002Fscreenshots\u002Fomgevingsalert-map.webp","\u002Fmedia\u002Fscreenshots\u002Fomgevingsalert-notifications.webp","\u002Fmedia\u002Fscreenshots\u002Fomgevingsalert-teaser.webm","lPKoR8AP8x-OOR4bIjCFYpsoKkSwALhH9ij3IXDNHTk",[172,253],{"id":173,"title":174,"body":175,"description":26,"desiredOutcome":179,"extension":53,"hero":191,"key":107,"meta":193,"navigation":77,"path":194,"problem":195,"proof":207,"recognition":219,"recommendedApproach":234,"relations":236,"seo":243,"stem":246,"summary":247,"visuals":248,"__hash__":252},"useCases_nl\u002Fuse-cases\u002Feigen-data-en-kennis-gebruiken-met-ai.md","Eigen documenten, data en kennis bruikbaar maken voor AI",{"type":23,"value":176,"toc":177},[],{"title":26,"searchDepth":27,"depth":27,"links":178},[],{"intro":180,"items":181},"Je wilt AI toegang geven tot relevante eigen informatie zonder alles in één oncontroleerbare databak te stoppen.\n",[182,185,188],{"title":183,"text":184},"Relevante informatie op het juiste moment","De AI krijgt alleen de context die voor de huidige taak nodig is.\n",{"title":186,"text":187},"Bronnen blijven traceerbaar","Belangrijke output kan worden teruggeleid naar onderliggende informatie.\n",{"title":189,"text":190},"Rechten en actualiteit blijven intact","Gebruikers zien alleen wat zij mogen zien en wijzigingen in bronnen kunnen doorwerken in de oplossing.\n",{"intro":192},"Een taalmodel kent jullie organisatie niet vanzelf. Als AI moet werken met eigen documenten, productdata of interne kennis, moet die informatie op het juiste moment en met de juiste rechten beschikbaar worden gemaakt.\n",{},"\u002Fuse-cases\u002Feigen-data-en-kennis-gebruiken-met-ai",{"intro":196,"causes":197},"\"Onze eigen data aan AI geven\" klinkt als één technische stap, maar bestaat meestal uit selectie, retrieval, rechten en kwaliteitscontrole.\n",[198,201,204],{"title":199,"text":200},"Meer context is niet automatisch beter","Een model krijgt juist slechtere antwoorden wanneer te veel irrelevante informatie meegaat.\n",{"title":202,"text":203},"Bronnen hebben verschillende structuren","Een PDF, relationele database en ticketsysteem vragen ieder een andere aanpak.\n",{"title":205,"text":206},"Datarechten verdwijnen niet bij AI","Retrieval moet rekening houden met dezelfde toegang die elders in de organisatie geldt.\n",{"intro":208,"points":209},"De kwaliteit van een AI-oplossing wordt vaak meer bepaald door de context die je aanbiedt dan door het nieuwste model. Daarom behandelen we retrieval en data-integratie als volwaardige engineering.\n",[210,213,216],{"title":211,"text":212},"Bron en use case horen bij elkaar","We indexeren niet zomaar alles omdat het kan.\n",{"title":214,"text":215},"Bestaande rechten blijven leidend","AI mag geen omweg rond het toegangsmodel worden.\n",{"title":217,"text":218},"Geen onnodige platformlaag","We kiezen alleen technische componenten die voor het echte probleem nodig zijn.\n",{"intro":220,"signals":221},"Dit vraagstuk ontstaat wanneer algemene AI goed werkt, maar bedrijfsspecifieke context ontbreekt.\n",[222,225,228,231],{"title":223,"text":224},"Kennis zit verspreid over veel bronnen","Documenten, databases en andere systemen bevatten ieder een deel van de context.\n",{"title":226,"text":227},"Kopiëren naar een prompt schaalt niet","Handmatig informatie toevoegen werkt voor een demo, maar niet voor structureel gebruik.\n",{"title":229,"text":230},"Informatie verandert regelmatig","Een statische dataset is snel verouderd.\n",{"title":232,"text":233},"Niet alle kennis is voor iedereen","Toegangsregels uit bestaande systemen moeten behouden blijven.\n",{"intro":235},"Met Build & Integrate bouwen we de technische laag waarmee AI gericht toegang krijgt tot jullie data en kennis. Is de haalbaarheid of antwoordkwaliteit nog onzeker, dan kan een AI Prototype Sprint eerst de belangrijkste bronnen en use case valideren.\n",{"buyerTriggerKeys":237,"primaryOfferKey":81,"offerKeys":238,"caseKeys":240,"relatedUseCaseKeys":241},[105],[81,239],"ai-prototype-sprint",[],[242,108],"interne-ai-assistent-laten-ontwikkelen",{"title":244,"description":245},"Eigen data en kennis gebruiken met AI | 9to5 software","Eigen documenten en databases inzetten met AI? 9to5 bouwt RAG, retrieval, integraties en AI-workflows rond je bestaande informatie.\n","use-cases\u002Feigen-data-en-kennis-gebruiken-met-ai","De waardevolle informatie is er al. Nu moet AI er betrouwbaar, veilig en praktisch mee kunnen werken.\n",{"hero":249,"problem":250,"proof":251},"sq-knowledge-filter","sq-connect-nodes","ls-system-connect","NPSJ_Ns2zloMyBXj_QzcXOI6vysiUT9sZXgIW4kRJOM",{"id":254,"title":255,"body":256,"description":26,"desiredOutcome":260,"extension":53,"hero":272,"key":108,"meta":274,"navigation":77,"path":275,"problem":276,"proof":288,"recognition":300,"recommendedApproach":315,"relations":317,"seo":323,"stem":326,"summary":327,"visuals":328,"__hash__":330},"useCases_nl\u002Fuse-cases\u002Fai-toevoegen-aan-bestaande-software.md","AI toevoegen aan bestaande software, app of SaaS",{"type":23,"value":257,"toc":258},[],{"title":26,"searchDepth":27,"depth":27,"links":259},[],{"intro":261,"items":262},"De nieuwe AI-functionaliteit moet voelen als onderdeel van het product, niet als een chatbot die er later naast is geplakt.\n",[263,266,269],{"title":264,"text":265},"AI past in de bestaande gebruikersflow","De functie ondersteunt wat gebruikers al proberen te doen.\n",{"title":267,"text":268},"De bestaande architectuur blijft beheersbaar","AI wordt geïntegreerd zonder onnodig een tweede technische wereld erbij.\n",{"title":270,"text":271},"Productierisico's zijn afgevangen","Kosten, latency, fouten en onzeker modelgedrag krijgen een plek in het ontwerp.\n",{"intro":273},"Je hoeft geen compleet nieuw AI-product te bouwen. Vaak zit de meeste waarde juist in één slimme functie binnen software die gebruikers al kennen. We zorgen dat die functie technisch bij het bestaande product past.\n",{},"\u002Fuse-cases\u002Fai-toevoegen-aan-bestaande-software",{"intro":277,"causes":278},"Een losse AI-API integreren is eenvoudig. AI ontwerpen als betrouwbaar onderdeel van bestaande productsoftware is een ander verhaal.\n",[279,282,285],{"title":280,"text":281},"Bestaande software heeft al regels","Data, rechten, businesslogica en gebruikersverwachtingen liggen grotendeels vast.\n",{"title":283,"text":284},"AI introduceert andere failure modes","Latency, onjuiste output en variabele kosten moeten in bestaande flows worden opgevangen.\n",{"title":286,"text":287},"De nieuwe feature kan te los komen te staan","Een apart AI-systeem zorgt snel voor duplicatie van data en logica.\n",{"intro":289,"points":290},"Bestaande software begrijpen en uitbreiden is een groot deel van ons werk. AI hoeft dus niet op een groen veld te landen om goed gebouwd te worden.\n",[291,294,297],{"title":292,"text":293},"Bestaande architectuur eerst begrijpen","We ontwerpen de AI-functie rond wat al werkt.\n",{"title":295,"text":296},"Integratie boven eilandvorming","Data, auth en businesslogica worden niet onnodig gedupliceerd.\n",{"title":298,"text":299},"Productie vanaf het ontwerp","Betrouwbaarheid en operationele gevolgen tellen mee voordat de feature live gaat.\n",{"intro":301,"signals":302},"Het probleem is meestal niet hoe je een model aanroept, maar hoe de nieuwe functionaliteit zich tot het bestaande product moet verhouden.\n",[303,306,309,312],{"title":304,"text":305},"De feature heeft bestaande productdata nodig","AI moet werken met gebruikers, documenten of andere informatie die al in het product zit.\n",{"title":307,"text":308},"Rechten moeten gewoon blijven werken","AI mag niet ineens informatie of acties toegankelijk maken die elders beschermd zijn.\n",{"title":310,"text":311},"De bestaande UX moet leidend blijven","Gebruikers willen een betere workflow, niet per se een chatinterface.\n",{"title":313,"text":314},"Je wilt het huidige product niet opnieuw bouwen","De AI-laag moet aansluiten op wat technisch al goed werkt.\n",{"intro":316},"Met Build & Integrate voegen we de AI-functionaliteit gericht toe aan de bestaande codebase en systemen. Wanneer het nieuwe onderdeel technisch risicovol of inhoudelijk nog onzeker is, kan een AI Prototype Sprint eerst de kern bewijzen.\n",{"buyerTriggerKeys":318,"primaryOfferKey":81,"offerKeys":319,"caseKeys":320,"relatedUseCaseKeys":321},[105],[81,239],[],[322,107],"agentic-workflows-bestaande-software",{"title":324,"description":325},"AI toevoegen aan bestaande software of SaaS | 9to5 software","AI-functionaliteit (ChatGPT, Claude, OpenAI API) toevoegen aan bestaande software? 9to5 ontwerpt, bouwt en integreert AI in bestaande apps en SaaS- producten.\n","use-cases\u002Fai-toevoegen-aan-bestaande-software","Het product bestaat al. Nu wil je AI-functionaliteit toevoegen zonder de bestaande architectuur, gebruikerservaring en betrouwbaarheid uit het oog te verliezen.\n",{"hero":250,"problem":329,"proof":251},"sq-foundation-build","k2CU_vqMIflpqtgqLTd3zPmZAfGAHXKzObODk1vj8T4",1792049913053]