[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"technologies":3,"\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":167,"service-parent:\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":431,"service-children:\u002Fservices\u002Fweb-development\u002Fembeddable-widgets":738,"glossary":739},[4,10,15,21,26,32,38,43,48,53,58,63,68,73,77,82,87,92,97,103,108,113,118,123,128,133,138,143,147,152,157,162],{"title":5,"description":6,"slug":7,"category":8,"icon":9},"Android","Elke app die we uitbrengen bereikt Android — platform-API's, uitvoering op de achtergrond, permissies en de winkeleisen die daarbij horen.","android","framework","logos:android-icon",{"title":11,"description":12,"slug":13,"category":8,"icon":14},"Angular","Het front-endframework waarin we werken als een product al Angular is — een kant-en-klare structuur die past bij grote, langlevende applicaties.","angular","logos:angular-icon",{"title":16,"description":17,"slug":18,"category":19,"icon":20},"Dart","De taal waarin elke Flutter-app die we uitbrengen geschreven is — sound null safety, echte pattern matching, en een compiler voor native en web.","dart","language","logos:dart",{"title":22,"description":23,"slug":24,"category":8,"icon":25},"Django","Het Python-framework dat we pakken als een product op dag één een beheeromgeving, authenticatie en een echt datamodel nodig heeft.","django","logos:django-icon",{"title":27,"description":28,"slug":29,"category":30,"icon":31},"Docker","Elke service die we bouwen verschijnt als container, zodat wat op een laptop, in CI en in productie draait één artefact is en niet drie verschillende.","docker","infrastructure","logos:docker-icon",{"title":33,"description":34,"slug":35,"category":36,"icon":37},"Fastlane","De releaseautomatisering achter ons mobiele werk — ondertekenen, builds en winkeluploads draaien vanuit CI, niet vanaf één laptop.","fastlane","tools","logos:fastlane",{"title":39,"description":40,"slug":41,"category":8,"icon":42},"Flutter","Onze belangrijkste mobiele stack sinds 2018 — één Dart-codebase die uitkomt op iOS, Android, web en desktop zonder een apart team per platform.","flutter","logos:flutter",{"title":44,"description":45,"slug":46,"category":36,"icon":47},"Git","Elk project dat we aanraken leeft in Git — beoordeelde pull requests, CI op elke branch, en een historie die maanden later nog te volgen is.","git","logos:git-icon",{"title":49,"description":50,"slug":51,"category":19,"icon":52},"Go","Onze backendtaal voor realtime-API's en services onder belasting — kleine binaries, snelle builds, en gelijktijdigheid die leesbaar blijft.","go","logos:gopher",{"title":54,"description":55,"slug":56,"category":30,"icon":57},"Google Cloud","De cloud waarop onze productieworkloads draaien — beheerde Kubernetes, opslag en netwerken, zonder handgebouwde servers die niemand wil onderhouden.","gcp","logos:google-cloud",{"title":59,"description":60,"slug":61,"category":36,"icon":62},"Gradle","Het buildsysteem waar elke Android-release doorheen gaat — product flavours, ondertekeningsconfiguraties, en de afhankelijkheden onder een Flutter-app.","gradle","logos:gradle",{"title":64,"description":65,"slug":66,"category":30,"icon":67},"Helm","Hoe we een Kubernetes-uitrol verpakken — service, configuratie, secrets en ingress als één versiebeheerde eenheid die je kunt promoveren en terugdraaien.","helm","logos:helm",{"title":69,"description":70,"slug":71,"category":19,"icon":72},"Kotlin","Waar we naar grijpen als een Flutter-app echt Android eronder nodig heeft — platform channels, achtergrondwerk en integraties met native SDK's.","kotlin","logos:kotlin-icon",{"title":74,"description":75,"slug":76,"category":8,"icon":72},"Kotlin Multiplatform","Bedrijfslogica delen tussen iOS en Android terwijl elk platform zijn eigen native UI houdt — het alternatief wanneer Flutter niet past.","kmp",{"title":78,"description":79,"slug":80,"category":30,"icon":81},"Kubernetes","Hoe we services in productie draaien — Helm-uitrollen, rollouts die terug te draaien zijn, en schalen zonder dat iemand om 3 uur 's nachts wakker hoeft te zijn.","kubernetes","logos:kubernetes",{"title":83,"description":84,"slug":85,"category":30,"icon":86},"NATS","Lichtgewicht berichtenverkeer tussen services — publish\u002Fsubscribe en request\u002Freply zonder het beheergewicht van een volledig brokercluster.","nats","logos:nats-icon",{"title":88,"description":89,"slug":90,"category":8,"icon":91},"Nuxt","Vue met serverrendering, routering en SEO al geregeld — hoe we marketingsites en webapps bouwen die bij het eerste laden snel en vindbaar moeten zijn.","nuxt","logos:nuxt-icon",{"title":93,"description":94,"slug":95,"category":19,"icon":96},"PHP","Waar we met een bestaande PHP-backend werken — hem uitbreiden, ermee integreren, en de mobiele en webclients bouwen die hij moet bedienen.","php","logos:php",{"title":98,"description":99,"slug":100,"category":101,"icon":102},"PostgreSQL","Onze standaarddatabase — waar we naar grijpen tenzij een product een specifieke reden geeft om dat niet te doen, van schema tot indexen.","postgres","database","logos:postgresql",{"title":104,"description":105,"slug":106,"category":19,"icon":107},"Python","Onze taal voor backends, datawerk en AI-integraties — inclusief de Python-bindings die we bij onze eigen Rust-tooling leveren.","python","logos:python",{"title":109,"description":110,"slug":111,"category":8,"icon":112},"React","De front-endbibliotheek waarin we werken als een product al React is — componenten, hooks, en het ecosysteem dat eromheen is gegroeid.","react","logos:react",{"title":114,"description":115,"slug":116,"category":101,"icon":117},"Redis","Waar we data neerzetten die snel moet zijn en opnieuw op te bouwen valt — caches, sessies, verzoeklimieten en achtergrondwachtrijen.","redis","logos:redis",{"title":119,"description":120,"slug":121,"category":19,"icon":122},"Ruby","De taal waarin onze mobiele releaseautomatisering geschreven is — Fastlane-lanes, eigen acties, en de CI-lijm die builds naar de winkels brengt.","ruby","logos:ruby",{"title":124,"description":125,"slug":126,"category":19,"icon":127},"Rust","Waar we heen gaan als prestaties én correctheid allebei tellen — documenten renderen, CLI-tooling, en services die snel en voorspelbaar moeten blijven.","rust","simple-icons:rust",{"title":129,"description":130,"slug":131,"category":101,"icon":132},"SQLite","De database die meereist in de app — lokale caches, offline-first opslag, en alles wat ook zonder netwerk moet blijven werken.","sqlite","logos:sqlite",{"title":134,"description":135,"slug":136,"category":8,"icon":137},"Strapi","Een headless CMS waar we naar grijpen als redacteuren de content moeten beheren — een echte beheeromgeving en een schone API, zonder ze zelf te bouwen.","strapi","logos:strapi-icon",{"title":139,"description":140,"slug":141,"category":19,"icon":142},"Swift","Waar we naar grijpen als een Flutter-app echt iOS eronder nodig heeft — platform channels, integraties met native SDK's, widgets en App Clips.","swift","logos:swift",{"title":144,"description":145,"slug":146,"category":8,"icon":142},"SwiftUI","Het UI-framework van Apple, waar we de native oppervlakken bouwen die een Flutter-app niet kan afdekken — widgets, App Clips, extensies en systeemintegraties.","swiftui",{"title":148,"description":149,"slug":150,"category":8,"icon":151},"Tailwind CSS","Hoe we elke front-end die we bouwen vormgeven — utility-klassen en designtokens in plaats van een stylesheet die alleen maar groeit en nooit wordt opgeschoond.","tailwind","logos:tailwindcss-icon",{"title":153,"description":154,"slug":155,"category":19,"icon":156},"TypeScript","De standaard voor alles wat we voor de browser en voor Node-services schrijven — types die integratiebugs vangen voordat ze een review halen.","typescript","logos:typescript-icon",{"title":158,"description":159,"slug":160,"category":8,"icon":161},"Vue","Ons front-endframework voor beheerpanelen, dashboards voor winkeliers en webapps die jaren onderhoudbaar moeten blijven, geen sprints.","vue","logos:vue",{"title":163,"description":164,"slug":165,"category":36,"icon":166},"Whisper","Het opensource spraakherkenningsmodel van OpenAI — de transcriptiemotor achter spraakinvoer, draaiend als backendservice én op het toestel in de app.","whisper","simple-icons:openai",{"id":168,"title":169,"body":170,"description":395,"extension":396,"footerCta":397,"headingCta":411,"image":415,"meta":419,"metaDescription":420,"metaTitle":421,"navigation":422,"ogDescription":423,"parent":424,"path":425,"seo":426,"slug":427,"stem":428,"updated":429,"__hash__":430},"services_nl\u002Fservices\u002Fembeddable-widgets.md","Embeddable widgets en scripts",{"type":171,"value":172,"toc":375},"minimark",[173,177,180,185,225,230,233,237,245,249,256,260,263,267,270,274,277,281,284,288,291,295,303,307,313,323,326,330,347,350,354,357,361],[174,175,176],"p",{},"Een embeddable widget is code die je klanten in hun eigen websites plakken: een analyticssnippet, een chatbubbel, een boekingsformulier, een meetverzamelaar. Het is de moeilijkste soort front-endengineering, omdat alles wat een gewoon webproject vanzelfsprekend vindt wegvalt: je kiest het framework niet, de browserondergrens niet, de andere scripts op de pagina niet, en ook niet wanneer je gebruikers upgraden. Je code draait te gast op pagina's die je nooit zult zien, en hij moet zich op al die pagina's tegelijk gedragen.",[174,178,179],{},"Dit is een nichediscipline, en we hebben er werk in geleverd: een signaalverzamelaar die wij bouwden draait ingebed in duizenden sites die we niet beheren, en voedt een platform dat tienduizenden verzoeken per minuut beoordeelt.",[181,182,184],"h3",{"id":183},"de-producten-die-we-bouwen","De producten die we bouwen",[186,187,188,196,202,208,214],"ul",{},[189,190,191,195],"li",{},[192,193,194],"strong",{},"Meet- en analyticsverzamelaars"," — scripts die signalen van een pagina verzamelen en naar je platform sturen, zoals dat achter ons botdetectiewerk",[189,197,198,201],{},[192,199,200],{},"Functionele widgets"," — chat, boekingen, formulieren, rekentools: een stuk van jouw product dat in de pagina van je klant leeft",[189,203,204,207],{},[192,205,206],{},"Integraties via een snippet"," — de onboarding van \"voeg één scripttag toe\" die jouw product voor de bezoekers van je klant zet",[189,209,210,213],{},[192,211,212],{},"De ingest achter het script"," — de backend die ontvangt wat de snippet verstuurt, op welk volume het verkeer van je klanten ook uitkomt",[189,215,216,219,220],{},[192,217,218],{},"Het dashboard waarmee je klanten meekijken"," — rapportage- en configuratieoppervlakken behandelen we op ",[221,222,224],"a",{"href":223},"\u002Fservices\u002Fweb-development\u002Fadmin-dashboards","beheerpanelen en dashboards",[226,227,229],"h2",{"id":228},"wie-je-embeddable-script-bouwt","Wie je embeddable script bouwt",[174,231,232],{},"We bouwden er één van begin tot eind, van de snippet tot het platform erachter.",[181,234,236],{"id":235},"een-verzamelaar-in-duizenden-vijandige-paginas","Een verzamelaar in duizenden vijandige pagina's",[174,238,239,240,244],{},"Voor een ",[221,241,243],{"href":242},"\u002Fportfolio\u002Frealtime-bot-detection-platform","realtime platform voor botdetectie"," bouwden we de verzamelaar in de browser die het bewijs vergaart waarop een oordeel mens-of-bot wordt gebaseerd. Het is kale JavaScript zonder framework, zonder runtime uit een build en zonder afhankelijkheden, omdat hij in duizenden pagina's draait naast wat die pagina's verder ook laden, geen modulesysteem of polyfillset mag aannemen, en nooit mag botsen met de site eromheen. De omgeving is actief vijandig: wat hij meet, probeert hem te verslaan. En hij is klein, omdat elke kilobyte wordt afgeschreven op het prestatiebudget van de klant zelf, bij elke paginaweergave, voor altijd.",[181,246,248],{"id":247},"en-het-platform-dat-ontvangt-wat-hij-verstuurt","En het platform dat ontvangt wat hij verstuurt",[174,250,251,252,255],{},"De snippet is het kleine, zichtbare deel van het systeem. Achter die verzamelaar bouwden we de ingest- en scoringsservices in Go en het dataplatform eronder, want een embed die slaagt vermenigvuldigt zijn eigen verkeer met elke klant die hem installeert, en de backend moet vanaf dag één op die rekensom zijn ontworpen. De volledige architectuur staat in de ",[221,253,254],{"href":242},"casestudy",".",[226,257,259],{"id":258},"wat-ingebedde-code-werkelijk-vraagt","Wat ingebedde code werkelijk vraagt",[174,261,262],{},"Vijf beperkingen onderscheiden dit werk van gewone front-endengineering.",[181,264,266],{"id":265},"een-omvangbudget-in-kilobytes","Een omvangbudget in kilobytes",[174,268,269],{},"Je script gaat naar elke bezoeker van elke klant. Een frameworkruntime zou groter zijn dan een complete, goed gebouwde verzamelaar, en daarom zijn serieuze embeds zonder afhankelijkheden gebouwd uit noodzaak en niet uit voorkeur. Je klanten zien de omvang van je script terug in hun eigen Lighthouse-scores.",[181,271,273],{"id":272},"geen-enkele-aanname-over-de-hostpagina","Geen enkele aanname over de hostpagina",[174,275,276],{},"Geen modulesysteem, geen ondergrens van moderne browsers, geen garantie dat de pagina niet al een botsende bibliotheek laadt, een al te gretige CSS-reset, of een tweede kopie van je eigen script. Alles draait in een eigen scope, raakt de globale namespace hooguit één keer aan, en degradeert stil in plaats van andermans afrekenproces te breken.",[181,278,280],{"id":279},"defensief-door-ontwerp","Defensief door ontwerp",[174,282,283],{},"De pagina waarin je code draait kan eromheen geïnstrumenteerd, aangepast of geëmuleerd zijn. In ons botdetectiewerk is de meting verslaan precies de taak van de tegenstander. Ook bij vriendelijkere embeds houdt de les stand: lees browser-API's rechtstreeks uit, verifieer in plaats van de omgeving te vertrouwen, en houd elk oordeel aan de serverkant, waar de logica niet zichtbaar is voor de pagina.",[181,285,287],{"id":286},"versionering-die-je-niet-kunt-afdwingen","Versionering die je niet kunt afdwingen",[174,289,290],{},"Klanten plakken je snippet één keer en raken hem daarna nooit meer aan. Die ene regel moet een stabiele loader blijven terwijl alles erachter evolueert: gefaseerde uitrol, een onbreekbaar contract tussen loader en payload, en compatibiliteit die jaren wordt onderhouden, want \"werk alsjeblieft je embedcode bij\" is een e-mail die niemand beantwoordt.",[181,292,294],{"id":293},"toestemming-en-privacy-als-architectuur","Toestemming en privacy als architectuur",[174,296,297,298,302],{},"Een script van een derde partij is een derde partij, dus de ",[299,300],"term",{"slug":301},"gdpr"," geldt op elke site die het installeert. Wat het script verzamelt, wanneer het mag draaien ten opzichte van de toestemmingsstatus van de hostpagina, en wat er over de lijn gaat, zijn ontwerpbesluiten die we vooraf expliciet maken, zodat de compliancecontroles van je klanten jouw embed kunnen goedkeuren in plaats van aankaarten.",[226,304,306],{"id":305},"hoe-we-werken","Hoe we werken",[174,308,309,312],{},[192,310,311],{},"Bouw met vaste scope."," Snippet, loader, ingest en de uitrolpijplijn die ze veilig versioneert, als één systeem gescopet en opgeleverd.",[174,314,315,318,319,255],{},[192,316,317],{},"Teamuitbreiding."," Onze engineers sluiten aan bij het team dat je platform bezit — zie ",[221,320,322],{"href":321},"\u002Fservices\u002Fteam-augmentation","teamuitbreiding",[174,324,325],{},"Hoe dan ook sturen we, zodra we de eisen scherp hebben, binnen twee werkdagen een offerte met duidelijke scope.",[226,327,329],{"id":328},"wat-een-embeddable-widget-kost","Wat een embeddable widget kost",[174,331,332,333,337,338,343,344,255],{},"De snippet is klein; het systeem niet. Een embed wordt geprijsd vanuit dezelfde gepubliceerde niveaus als de pagina ",[221,334,336],{"href":335},"\u002Fservices\u002Fweb-development","webontwikkeling",". De verzamelaar of widget met zijn loader en een slanke ingest valt in het webappniveau op ",[339,340],"service-price",{"format":341,"service":342},"full","web-development\u002Fapp","; draagt het platform erachter echte schaal, met scoring, analyse en klantdashboards, dan wordt het systeem als werk op SaaS-niveau geprijsd vanaf ",[339,345],{"format":341,"service":346},"web-development\u002Fsaas",[174,348,349],{},"Dit zijn dezelfde sleutels die de prijstabel van de pijler renderen, dus de twee kunnen niet uiteenlopen. Wat het bedrag beweegt: hoe vijandig de omgevingen zijn die je script moet overleven, hoeveel verkeer de pagina's van je klanten bij elkaar optellen, en hoeveel van het ontvangende platform al bestaat.",[226,351,353],{"id":352},"veelgestelde-vragen","Veelgestelde vragen",[174,355,356],{},"Veelgestelde vragen van teams die code uitleveren aan andermans pagina's.",[358,359],"questions",{":items":360},"[{\"title\":\"Waarom kunnen we onze widget niet met React of Vue bouwen?\",\"text\":\"Omdat de frameworkruntime groter zou zijn dan de hele widget, en omdat de hostpagina misschien al een andere versie van hetzelfde framework draait, of een globale omgeving heeft die met de jouwe vecht. Een embed die naar elke bezoeker van elke klant gaat, wordt afgemeten aan het prestatiebudget van elke klant zelf, dus serieuze ingebedde scripts zijn bewust kale JavaScript zonder afhankelijkheden. De eigen site van je product mag zo frameworkzwaar zijn als hij wil; de code die op reis gaat moet zelfvoorzienend zijn.\"},{\"title\":\"Hoe voorkomt een embeddable script dat het de sites breekt die het installeren?\",\"text\":\"Door niets aan te nemen en niets aan te raken. Alles draait binnen een eigen scope, de globale namespace wordt hooguit één keer aangeraakt, stijlen zijn geïsoleerd zodat de CSS van de hostpagina er niet in of uit kan lekken, en elk faalpad degradeert stil, want een kapotte widget mag nooit het afrekenproces van een klant meesleuren. We bouwen vanaf het begin tegen vijandige paginacondities, omdat de verzamelaar die we draaien meedraait naast wat duizenden ongerelateerde sites ook maar laden.\"},{\"title\":\"Hoe werken jullie een script bij dat klanten jaren geleden hebben geplakt?\",\"text\":\"De geplakte regel is nooit het product. Het is een kleine, stabiele loader die de actuele payload ophaalt. Het contract tussen loader en payload is de ene interface die nooit mag breken, en alles erachter kan dan evolueren: gefaseerde uitrol eerst naar een fractie van het verkeer, geversioneerde payloads, en direct terugrollen wanneer een browserrelease je verrast. Die naad op dag één goed ontwerpen is wat van 'werk alsjeblieft je embedcode bij' een e-mail maakt die je nooit hoeft te sturen.\"},{\"title\":\"Hoe zit het met de AVG en cookietoestemming voor ingebedde scripts?\",\"text\":\"Een script van een derde partij is onder de AVG een derde partij op elke site die het installeert, dus ontwerpen we vanaf het begin voor toestemming. We maken expliciet wat het script verzamelt, of iets daarvan een persoon identificeert, en hoe het zich gedraagt ten opzichte van de toestemmingsstatus van de hostpagina — inclusief draaien in een modus zonder toestemming waar compliance dat vereist. Het doel is een embed die de privacybeoordelingen van je klanten zonder vergadering kunnen goedkeuren.\"},{\"title\":\"Kunnen jullie ook de backend bouwen die de data ontvangt?\",\"text\":\"Ja, en we bouwen liever beide kanten dan een van de twee. Een succesvolle embed vermenigvuldigt zijn verkeer met elke klant die hem installeert, dus de ingest moet vanaf het begin op het opgetelde volume zijn ontworpen. Het platform achter onze verzamelaar beoordeelt tienduizenden verzoeken per minuut in realtime, op Go-services die we van begin tot eind bouwden. De snippet en zijn backend zijn één systeem, en de faalwijzen leven op hun naad.\"},{\"title\":\"Wat kost het bouwen van een embeddable widget?\",\"text\":\"Een widget of verzamelaar met zijn loader en een slanke ingest kost doorgaans 15.000 tot 40.000 dollar over één tot drie maanden, het gepubliceerde webappniveau op onze pagina over webontwikkeling. Is het ontvangende platform het echte product, met realtime scoring, analyse en dashboards voor klanten, dan wordt het systeem als werk op SaaS-niveau geprijsd, meer dan 50.000. De snippet zelf is zelden het dure deel; het volume dat hij genereert wel.\"}]",[174,362,363,364,367,368,372,373,255],{},"Lees hoe de verzamelaar in het hele systeem past in de ",[221,365,366],{"href":242},"casestudy over botdetectie",", bekijk de ",[221,369,371],{"href":370},"\u002Ftechnologies\u002Fgo","Go-services"," erachter, of begin bij de pijler ",[221,374,336],{"href":335},{"title":376,"searchDepth":377,"depth":377,"links":378},"",2,[379,381,385,392,393,394],{"id":183,"depth":380,"text":184},3,{"id":228,"depth":377,"text":229,"children":382},[383,384],{"id":235,"depth":380,"text":236},{"id":247,"depth":380,"text":248},{"id":258,"depth":377,"text":259,"children":386},[387,388,389,390,391],{"id":265,"depth":380,"text":266},{"id":272,"depth":380,"text":273},{"id":279,"depth":380,"text":280},{"id":286,"depth":380,"text":287},{"id":293,"depth":380,"text":294},{"id":305,"depth":377,"text":306},{"id":328,"depth":377,"text":329},{"id":352,"depth":377,"text":353},"JavaScript dat draait in pagina's die je niet beheert — zonder afhankelijkheden, defensief en klein, van het team achter een verzamelaar die in duizenden sites van derden is ingebed","md",{"heading":398,"text":399,"buttons":400},"Stuur je code naar pagina's die je niet beheert?","Vertel ons wat je snippet moet doen en waar hij moet draaien. Wij zeggen je eerlijk hoe het beperkingenbudget eruitziet — en wat de backend erachter moet aankunnen.",[401,407],{"to":402,"label":403,"leadingIcon":404,"color":405,"variant":406},"\u002Fcontact?intent=web-development","Plan een gesprek","lucide:message-circle","neutral","outline",{"to":242,"label":408,"color":409,"variant":410},"Bekijk de botdetectieverzamelaar","primary","solid",[412,413],{"to":402,"label":403,"leadingIcon":404,"color":409,"variant":410},{"to":242,"label":414,"color":405,"variant":406},"Bekijk ons werk",{"url":416,"alt":417,"text":418},"\u002Fservices\u002Fembeddable-widgets.webp","Ontwikkeling van embeddable widgets en scripts van derden","Jouw code, draaiend in andermans pagina",{},"Embeddable widgets en scripts: JavaScript zonder afhankelijkheden voor andermans pagina's, plus de backend die ontvangt wat het script verstuurt.","Ontwikkeling van embeddable widgets en scripts",true,"Code die je uitlevert aan pagina's die je niet beheert — gebouwd door het team waarvan de verzamelaar in duizenden sites van derden draait, op tienduizenden verzoeken per minuut.","web-development","\u002Fservices\u002Fweb-development\u002Fembeddable-widgets",{"title":169,"description":395},"embeddable-widgets","services\u002Fembeddable-widgets","2026-09-05","-lMCXGF9lQSjXwmpH8NyFLet-ztkryOpINwUC8NSd3k",{"id":432,"title":433,"body":434,"description":711,"extension":396,"footerCta":712,"headingCta":721,"image":727,"meta":730,"metaDescription":731,"metaTitle":732,"navigation":422,"ogDescription":733,"parent":734,"path":335,"seo":735,"slug":424,"stem":736,"updated":429,"__hash__":737},"services_nl\u002Fservices\u002Fweb-development.md","Webontwikkeling",{"type":171,"value":435,"toc":698},[436,440,443,465,469,473,476,480,483,487,490,494,504,508,521,526,539,543,546,589,593,596,602,608,619,649,653,656,660,667,669,672,695],[226,437,439],{"id":438},"moderne-webontwikkeling-met-nuxt-en-ssr","Moderne webontwikkeling met Nuxt en SSR",[174,441,442],{},"We bouwen snelle, zoekvriendelijke webapplicaties op een moderne, server-gerenderde stack. Geen paginabouwer, geen opgeblazen singlepageapp die Google een leeg scherm voorschotelt — echte applicaties die op de server renderen, snel laden op een telefoon, en scoren.",[174,444,445,446,449,450,454,455,459,460,464],{},"Hoe zeker zijn we van deze stack? ",[192,447,448],{},"Deze site is er zelf op gebouwd"," — Nuxt 4, ",[299,451,453],{"slug":452},"server-side-rendering","serverrendering",", Tailwind CSS en Nuxt Content. We kozen dit gereedschap niet voor een verkooppagina; we draaien er onze eigen zaak op. We leverden het ook op voor klanten, waaronder ",[221,456,458],{"href":457},"\u002Fportfolio\u002Fformtastic","Formtastic",", een platform voor formulieren gebouwd op Nuxt, en het ",[221,461,463],{"href":462},"\u002Fportfolio\u002Fcashback-loyalty-platform","cashback- en loyaliteitsplatform",", waarvan de Nuxt-backoffice merkapps lanceert boven op PHP-services.",[466,467],"statistics-grid",{":items":468},"[{\"icon\": \"lucide:search\", \"value\": \"SSR\", \"label\": \"Standaard indexeerbaar\", \"description\": \"Server-gerenderde HTML die crawlers lezen zonder JavaScript uit te voeren\"}, {\"icon\": \"lucide:gauge\", \"value\": \"90+\", \"label\": \"Lighthouse-doelen\", \"description\": \"We bouwen naar Core Web Vitals toe, niet ertegenin\"}, {\"icon\": \"lucide:smartphone\", \"value\": \"Mobile-first\", \"label\": \"Overal responsief\", \"description\": \"Ontworpen voor telefoons eerst, opgeschaald naar desktop\"}, {\"icon\": \"lucide:code\", \"value\": \"Typeveilig\", \"label\": \"TypeScript van begin tot eind\", \"description\": \"Van de API-laag tot de componentprops\"}]",[226,470,472],{"id":471},"onze-stack-en-waarom-nuxt-met-ssr","Onze stack — en waarom Nuxt met SSR",[174,474,475],{},"De keuze van het framework is het verschil tussen een site die Google direct kan lezen en een die het moeizaam moet renderen. Dit is waarop we bouwen en waarom.",[181,477,479],{"id":478},"serverrendering-voor-seo","Serverrendering voor SEO",[174,481,482],{},"Een klassieke singlepageapp stuurt een lege HTML-schil en vraagt de browser de pagina met JavaScript op te bouwen. Crawlers, linkvoorbeelden en trage toestellen lijden daaronder. Nuxt rendert de volledige HTML op de server, zodat de inhoud al bij het allereerste antwoord aanwezig is — metatags, koppen, gestructureerde data en tekst staan er voordat er één regel client-JavaScript draait. Dit is de grootste SEO-hefboom die een framework je op de pagina zelf kan geven, en het is de standaard, geen uitbreiding.",[181,484,486],{"id":485},"tailwind-voor-snelle-consistente-ui","Tailwind voor snelle, consistente UI",[174,488,489],{},"We geven vorm met Tailwind CSS — utility-first, geen zwervende globale stylesheets, geen dode CSS die naar gebruikers wordt gestuurd. Het houdt het designsysteem op elke pagina consistent, maakt responsieve breekpunten expliciet, en levert alleen de klassen die je werkelijk gebruikt. Het resultaat is een UI die snel te bouwen is, makkelijk te onderhouden, en klein om te downloaden.",[181,491,493],{"id":492},"nuxt-content-voor-contentgedreven-sites","Nuxt Content voor contentgedreven sites",[174,495,496,497,503],{},"Voor marketingsites, documentatie en blogs verandert ",[221,498,502],{"href":499,"rel":500},"https:\u002F\u002Fcontent.nuxt.com",[501],"nofollow","Nuxt Content"," Markdown in volledig gerenderde, server-gerenderde pagina's met typeveilige schema's — precies zoals de blog en de dienstpagina's van deze site werken. Redacteuren schrijven Markdown; de site blijft snel en indexeerbaar; developers houden versiebeheer over alles. Geen database nodig.",[181,505,507],{"id":506},"strapi-wanneer-je-een-headless-cms-nodig-hebt","Strapi wanneer je een headless CMS nodig hebt",[174,509,510,511,515,516,520],{},"Wanneer niet-technische redacteuren de content moeten beheren — producten, aanbiedingen, campagnes — koppelen we ",[221,512,134],{"href":513,"rel":514},"https:\u002F\u002Fstrapi.io",[501]," aan, een opensource ",[299,517,519],{"slug":518},"headless-cms","headless CMS",". Jouw team krijgt een prettig beheerpaneel; de Nuxt-front-end haalt de content op via een schone API en rendert die op de server. Je krijgt redactionele vrijheid zonder in te leveren op prestaties of SEO, en je bezit de data en de hosting zelf.",[522,523],"features",{":items":524,":title":525},"[{\"label\": \"Mobielvriendelijk ontwerp\", \"description\": \"Mobile-first, responsieve lay-outs die op elk scherm werken, van telefoon tot breedbeeld — getest, niet aangenomen\"}, {\"label\": \"Authenticatie fatsoenlijk gedaan\", \"description\": \"Sessies, OAuth en JWT met echte autorisatiecontroles op de server — geen inlogscherm met een open achterdeur\"}, {\"label\": \"Veilige cookies en toestemming\", \"description\": \"httpOnly-, secure- en SameSite-cookies voor sessies, plus AVG-conforme toestemming voor analyse en tracking\"}, {\"label\": \"SEO ingebouwd\", \"description\": \"Server-gerenderde metatags, Open Graph, canonieke en hreflang-links, en JSON-LD op elke pagina\"}, {\"label\": \"Prestaties en Core Web Vitals\", \"description\": \"Beeldoptimalisatie, codesplitsing en caching afgestemd om Core Web Vitals te halen op echte toestellen\"}, {\"label\": \"Koppeling met een headless CMS\", \"description\": \"Nuxt Content of Strapi, zodat je team kan publiceren zonder code aan te raken\"}]","Wat we goed doen",[527,528,531],"info-box",{":leading-icon":529,":title":530},"lucide:shield-check","Beveiliging hoort bij de bouw",[174,532,533,534,538],{},"Authenticatie, cookies en het omgaan met gegevens zijn precies waar de meeste webapps stilletjes lekken. Wij bouwen ze vanaf het begin goed — en heb je een app geërfd waarover je twijfelt, dan beoordeelt onze ",[221,535,537],{"href":536},"\u002Fservices\u002Fai-code-audit","audit van AI-code"," authenticatie, sessiebeveiliging en gegevensblootstelling voordat er een incident van komt.",[226,540,542],{"id":541},"wat-we-bouwen","Wat we bouwen",[174,544,545],{},"Vier soorten webwerk keren in onze opdrachten steeds terug, en elk heeft nu een eigen pagina met het bewijs erachter:",[186,547,548,558,570,579],{},[189,549,550,555,556,255],{},[192,551,552],{},[221,553,554],{"href":223},"Beheerpanelen en dashboards"," — de backoffices achter producten: toegang op basis van rollen, formulieren die echte machinerie aansturen, tabellen die op schaal bruikbaar blijven. Verankerd door de beheer-UI die merkapps lanceert voor ons ",[221,557,463],{"href":462},[189,559,560,566,567,569],{},[192,561,562],{},[221,563,565],{"href":564},"\u002Fservices\u002Fweb-development\u002Fnuxt-development","Nuxt-ontwikkeling"," — marketingsites, contentplatforms en migraties naar serverrendering, zoals de overstap van ",[221,568,458],{"href":457}," van Django-templates naar Nuxt. Deze site is de vaste demo.",[189,571,572,578],{},[192,573,574],{},[221,575,577],{"href":576},"\u002Fservices\u002Fweb-development\u002Fcompanion-web-app","Companion-webapps"," — het browseroppervlak van een product dat vooral in een mobiele app leeft, met één API en één backend voor beide.",[189,580,581,585,586,255],{},[192,582,583],{},[221,584,169],{"href":425}," — JavaScript dat draait in pagina's die je niet beheert, gebouwd zonder afhankelijkheden en defensief, zoals de verzamelaar achter ons ",[221,587,588],{"href":242},"botdetectieplatform",[226,590,592],{"id":591},"flutter-voor-het-web-voors-en-tegens","Flutter voor het web — voors en tegens",[174,594,595],{},"Flutter kan naar het web compileren, en klanten met een mobiele Flutter-app vragen vaak of ze die ook voor hun website kunnen hergebruiken. Het eerlijke antwoord: soms — maar zelden voor openbaar, contentgedreven web. Dit is de afweging.",[597,598],"features-table",{":heading":599,":rows":600,":top-left-label":601},"[{\"label\": \"Nuxt met SSR\", \"hightlightLabel\": \"Openbaar web\"}, {\"label\": \"Flutter web\"}, {\"label\": \"Klassieke SPA\"}]","[{\"label\": \"SEO \u002F indexeerbaarheid\",\"cells\": [{\"text\": \"Uitstekend (SSR)\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Slecht (canvasrendering)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Zwak (lege schil)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Omvang van de eerste download\",\"cells\": [{\"text\": \"Klein\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Zwaar (grote bundel)\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Gemiddeld\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Code gedeeld met mobiel\",\"cells\": [{\"text\": \"Geen\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Bijna 100%\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Deels (React Native)\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"App-achtige of complexe UI\",\"cells\": [{\"text\": \"Goed\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Uitstekend\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Goed\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Content- en marketingsites\",\"cells\": [{\"text\": \"Ideaal\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Past slecht\", \"color\": \"error\", \"icon\": \"lucide:x\" },{ \"text\": \"Werkbaar\", \"color\": \"warning\", \"icon\": \"lucide:minus\" }]}, {\"label\": \"Toegankelijkheid\",\"cells\": [{\"text\": \"Native HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" },{ \"text\": \"Verbetert, beperkt\", \"color\": \"warning\", \"icon\": \"lucide:minus\" },{ \"text\": \"Native HTML\", \"color\": \"success\", \"icon\": \"lucide:check-circle\" }]}, {\"label\": \"Past het best bij\",\"cells\": [{\"text\": \"Sites en webapps\", \"color\": \"success\"},{ \"text\": \"Interne of app-achtige tools\", \"color\": \"warning\"},{ \"text\": \"Dashboards\", \"color\": \"warning\"}]}]","Aspect",[174,603,604,607],{},[192,605,606],{},"Waar Flutter web uitblinkt:"," een app-achtig product waar je al een mobiele Flutter-codebase hebt en één team overal wilt laten opleveren — interne dashboards, tools achter een login, sterk interactieve of op canvas gebaseerde interfaces achter een inlogmuur, waar SEO niet telt en gebruikers een app verwachten en geen pagina.",[174,609,610,613,614,618],{},[192,611,612],{},"Waar het pijn doet:"," alles wat op Google gevonden moet worden. Flutter web rendert naar een canvas, dat crawlers moeizaam lezen, stuurt een zware eerste bundel, en werkt de browser tegen op toegankelijkheid en ",[299,615,617],{"slug":616},"deep-linking","deep linking",". Voor marketingsites, blogs, webwinkels en landingspagina's is dat diskwalificerend.",[527,620,621],{},[174,622,623,626,627,630,631,634,635,639,640,644,645,255],{},[192,624,625],{},"💡 Kort gezegd:"," gebruik ",[192,628,629],{},"Nuxt met SSR"," voor alles wat openbaar of SEO-gedreven is — marketingsites, content, webwinkels, marketingpagina's van een SaaS. Gebruik ",[192,632,633],{},"Flutter web"," wanneer je een mobiele Flutter-app uitbreidt naar een app-achtige webtool waar vindbaarheid via zoekmachines niet het doel is. We bouwen allebei en zeggen je eerlijk welke jouw project nodig heeft. Staat mobiel ook op tafel, zie dan onze dienst ",[221,636,638],{"href":637},"\u002Fservices\u002Fflutter-app-development","Flutter-appontwikkeling"," en de afwegingen in ",[221,641,643],{"href":642},"\u002Fblog\u002Fflutter-vs-react-native-2026","Flutter tegenover React Native in 2026"," en ",[221,646,648],{"href":647},"\u002Fblog\u002Fflutter-vs-native-2026","Flutter tegenover native",[226,650,652],{"id":651},"tarieven-voor-webontwikkeling","Tarieven voor webontwikkeling",[174,654,655],{},"Heldere bandbreedtes op basis van omvang en complexiteit",[657,658],"pricing-table",{":items":659},"[{\"title\": \"Marketing- of landingssite\", \"subtitle\": \"Snel, SEO-klaar, contentgedreven\", \"price\": \"web-development\u002Flanding\", \"terms\": \"2-4 weken\", \"lines\": [\"Nuxt met SSR voor volledige indexeerbaarheid\", \"Responsief, mobile-first ontwerp\", \"SEO-meta, Open Graph en gestructureerde data\", \"Nuxt Content of Markdown-CMS\", \"Contactformulieren en analyse\", \"Afgestemd op Core Web Vitals\", \"Uitrol en domeininstelling\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Aan de slag\"}},{\"highlight\": \"Populair\",\"title\": \"Webapp\", \"subtitle\": \"Product achter een login, interactief\", \"price\": \"web-development\u002Fapp\", \"terms\": \"1-3 maanden\", \"lines\": [\"Alles uit Marketingsite\", \"Gebruikersauthenticatie (OAuth \u002F JWT)\", \"Veilige sessies en cookieafhandeling\", \"Koppeling met REST- of GraphQL-API\", \"Toegang op basis van rollen\", \"Databaseontwerp en koppeling\", \"Beheerdashboard\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Aan de slag\"}},{\"title\": \"Headless-CMS-platform\", \"subtitle\": \"Content in handen van redacteuren, op schaal\", \"price\": \"web-development\u002Fheadless-cms\", \"terms\": \"2-4 maanden\", \"lines\": [\"Backend op Strapi of Nuxt Content\", \"Eigen redactioneel beheerpaneel\", \"Ondersteuning voor meertalige content\", \"Server-gerenderd en indexeerbaar\", \"Beheer van media en assets\", \"Preview- en publicatieproces\", \"API-first architectuur\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Aan de slag\"}},{\"title\": \"SaaS \u002F e-commerce\", \"subtitle\": \"Complex, schaalbaar webproduct\", \"price\": \"web-development\u002Fsaas\", \"terms\": \"4+ maanden\", \"lines\": [\"Alle platforms en koppelingen\", \"Betalingen en abonnementen\", \"Multi-tenant-architectuur\", \"Geavanceerde beveiliging en compliance\", \"Schaalbare backendinfrastructuur\", \"Monitoring en observability\", \"Persoonlijke ondersteuning\"], \"callToAction\": {\"to\": \"\u002Fcontact?intent=web-development\", \"label\": \"Aan de slag\"}}]",[527,661,664],{":leading-icon":662,":title":663},"lucide:dollar-sign","Maatwerktarieven mogelijk",[174,665,666],{},"Elk project is anders. Deze bandbreedtes zijn indicatief en gebaseerd op gangbare omvang. We geven een gedetailleerde offerte zodra we je wensen, koppelingen en planning begrijpen. Neem contact op voor een gratis kennismaking en een nauwkeurige raming.",[226,668,353],{"id":352},[174,670,671],{},"Veelgestelde vragen over onze diensten voor webontwikkeling",[358,673,675],{":items":674},"[{\"title\":\"Waarom bouwen jullie met Nuxt in plaats van WordPress of een websitebouwer?\",\"text\":\"Nuxt geeft je serverrendering, wat betekent dat zoekmachines en linkvoorbeelden bij het eerste verzoek volledig opgebouwde HTML zien in plaats van een lege schil. Je krijgt de snelheid en indexeerbaarheid van een statische site met de kracht van een echte applicatie, volledig versiebeheer over de code, en geen plug-inballast of beveiligingsoppervlak van een gangbare WordPress-installatie. Voor contentzware sites combineren we Nuxt met een headless CMS, zodat redacteuren alsnog een prettig beheerpaneel hebben.\"},{\"title\":\"Verbetert serverrendering de SEO echt?\",\"text\":\"Ja, aanzienlijk. Met SSR staan de pagina-inhoud, de metatags, de Open Graph-gegevens en de gestructureerde data in de HTML die de server verstuurt, zodat crawlers ze kunnen lezen zonder JavaScript uit te voeren. Singlepageapps die volledig in de browser renderen worden trager geïndexeerd en kunnen door sommige crawlers en linkvoorbeelden helemaal worden gemist. SSR is het meest bepalende besluit op frameworkniveau dat je voor organisch zoekverkeer kunt nemen.\"},{\"title\":\"Kunnen jullie mijn webapp met Flutter voor het web bouwen?\",\"text\":\"Dat kunnen we, en voor het juiste project past het uitstekend. Flutter web werkt goed voor app-achtige producten en interne tools achter een login, zeker wanneer je al een mobiele Flutter-app hebt en één codebase wilt delen. Het past slecht bij alles wat op Google moet scoren, omdat het naar een canvas rendert dat crawlers moeizaam lezen en een zware eerste bundel verstuurt. Voor openbare, content- of e-commercesites raden we Nuxt met serverrendering aan.\"},{\"title\":\"Hoe gaan jullie veilig om met authenticatie en gebruikersgegevens?\",\"text\":\"We bouwen echte autorisatie op de server, niet alleen een inlogscherm. Sessies gebruiken httpOnly-, secure- en SameSite-cookies zodat tokens niet door scripts in de browser te stelen zijn, en we ondersteunen OAuth- en JWT-stromen met toegang op basis van rollen. Cookietoestemming wordt AVG-conform afgehandeld. Heb je een bestaande app, dan beoordeelt onze dienst voor audits van AI-code authenticatie, sessieafhandeling en gegevensblootstelling als aparte controle.\"},{\"title\":\"Moet ik Nuxt Content of Strapi gebruiken voor mijn content?\",\"text\":\"Dat hangt af van wie de content bewerkt. Nuxt Content is ideaal wanneer developers of technische schrijvers content in Markdown onder versiebeheer beheren, zoals een blog of documentatie, zonder database. Strapi is de juiste keuze wanneer niet-technische redacteuren een prettig beheerpaneel nodig hebben om producten, aanbiedingen of campagnes te beheren. Beide renderen via de Nuxt-front-end op de server, dus de site blijft hoe dan ook snel en indexeerbaar. We helpen je kiezen op basis van je team.\"},{\"title\":\"Wat kost een webontwikkelproject?\",\"slot\":\"cost\",\"text\":\"Een snelle marketing- of contentsite kost doorgaans 5.000 tot 12.000 dollar, een webapp achter een login 15.000 tot 40.000, een headless-CMS-platform 20.000 tot 50.000, en een complex SaaS- of e-commerceproduct meer dan 50.000. Het uiteindelijke bedrag hangt af van het aantal functies, de koppelingen en de omvang van het ontwerp. We geven een vaste offerte na een gratis kennismaking.\"}]",[676,677,678],"template",{"v-slot:cost_body":376},[174,679,680,681,684,685,687,688,691,692,694],{},"Een snelle marketing- of contentsite kost doorgaans ",[339,682],{"format":341,"service":683},"web-development\u002Flanding",", een webapp achter een login ",[339,686],{"format":341,"service":342},", een headless-CMS-platform ",[339,689],{"format":341,"service":690},"web-development\u002Fheadless-cms",", en een complex SaaS- of e-commerceproduct ",[339,693],{"format":341,"service":346},". Het uiteindelijke bedrag hangt af van het aantal functies, de koppelingen en de omvang van het ontwerp. We geven een vaste offerte na een gratis kennismaking.",[174,696,697],{},"::",{"title":376,"searchDepth":377,"depth":377,"links":699},[700,701,707,708,709,710],{"id":438,"depth":377,"text":439},{"id":471,"depth":377,"text":472,"children":702},[703,704,705,706],{"id":478,"depth":380,"text":479},{"id":485,"depth":380,"text":486},{"id":492,"depth":380,"text":493},{"id":506,"depth":380,"text":507},{"id":541,"depth":377,"text":542},{"id":591,"depth":377,"text":592},{"id":651,"depth":377,"text":652},{"id":352,"depth":377,"text":353},"Snelle, SEO-klare webapps gebouwd op Nuxt, SSR en Tailwind",{"heading":713,"text":714,"buttons":715},"Klaar voor een webapp die scoort én presteert?","Laten we je idee omzetten in een snelle, SEO-klare webapplicatie waar je gebruikers én zoekmachines blij van worden.",[716,719],{"to":717,"label":718,"leadingIcon":404,"color":405,"variant":406},"\u002Fcontact","Start je project",{"to":720,"label":414,"color":409,"variant":410},"\u002Fportfolio",[722,724],{"to":717,"label":723,"leadingIcon":404,"color":409,"variant":410},"Gratis kennismaking",{"to":725,"label":726,"color":405,"variant":406},"#web-development-pricing","Bekijk de tarieven",{"url":728,"alt":433,"text":729},"\u002Fservices\u002Fweb-development.webp","Gebouwd op de stack waarop deze site draait",{},"Webontwikkeling op Nuxt, SSR en Tailwind: snelle, SEO-klare webapps met authenticatie, headless CMS en Strapi. Gratis kennismaking.","Webontwikkeling — Nuxt, SSR en SEO","Webapps op Nuxt en SSR die snel laden en scoren — authenticatie, een headless CMS, en een mobile-first opzet die de browser niet tegenwerkt.",null,{"title":433,"description":711},"services\u002Fweb-development","p92rA0sP287XvDBhKgojlFRT935CF84lhk7DjimM7Ks",[],[740,755,775,787,801,815,829,846,859,874,888,901,916,930,946,956,969,980,990,1001,1013,1024,1039,1048,1061,1075,1082,1094,1107,1118,1133,1146,1159,1172,1185,1198,1211,1222,1233,1245,1256,1268,1278,1290,1303,1316,1328,1342,1353,1365,1379,1388,1400],{"slug":741,"term":742,"definition":743,"category":744,"aliases":745,"links":747,"related":751,"readMore":-1,"target":753,"hasArticle":754},"aosp","AOSP","Het Android Open Source Project — Android zonder de Google-laag erbovenop, door iedereen vrij te forken. Kassaterminals, kiosken en autosystemen draaien op forks ervan, en werken op dat niveau legt delen van het OS bloot die een app-ontwikkelaar nooit ziet.","platform",[746],"Android Open Source Project",[748],{"kind":749,"url":750},"website","https:\u002F\u002Fsource.android.com\u002F",[752],"host-card-emulation","\u002Fglossary#aosp",false,{"slug":301,"term":756,"definition":757,"category":758,"aliases":759,"links":764,"related":770,"readMore":-1,"target":774,"hasArticle":754},"AVG","De EU-verordening over persoonsgegevens van mensen in de EU: een rechtsgrond om ze te verzamelen, echte toestemming voor tracking, en het recht om ze in te zien en te laten wissen. Ze volgt je gebruikers, niet je servers, en geldt dus ongeacht waar het bedrijf staat ingeschreven.","practice",[760,761,762,763],"GDPR","General Data Protection Regulation","Algemene verordening gegevensbescherming","gegevensbescherming",[765,767],{"kind":749,"url":766},"https:\u002F\u002Fgdpr.eu\u002F",{"kind":768,"url":769},"wikipedia","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGeneral_Data_Protection_Regulation",[771,772,773],"pci-dss","soc-2","hipaa","\u002Fglossary#gdpr",{"slug":776,"term":777,"definition":778,"category":744,"aliases":779,"links":780,"related":784,"readMore":-1,"target":786,"hasArticle":754},"app-clips","App Clips","Een Apple-functie die een klein stuk van een iOS-app draait — onder de 15 MB — zonder het geheel te installeren. Te starten via een QR-code, een NFC-tag of een link, voor als de eerste handeling van een gebruiker niet eerst een gang naar de App Store zou moeten vergen.",[],[781],{"kind":782,"url":783},"documentation","https:\u002F\u002Fdeveloper.apple.com\u002Fapp-clips\u002F",[616,785],"install-referrer","\u002Fglossary#app-clips",{"slug":788,"term":789,"definition":790,"category":744,"aliases":791,"links":792,"related":797,"readMore":-1,"target":800,"hasArticle":754},"bigquery","BigQuery","Het analytische datawarehouse van Google Cloud. Je laat SQL los op miljarden rijen en het scant ze in seconden, op opslag die losstaat van de machines die de query uitvoeren — en juist dat houdt rapportage en verkenning weg bij de database die het live verkeer bedient.",[],[793,795],{"kind":749,"url":794},"https:\u002F\u002Fcloud.google.com\u002Fbigquery",{"kind":768,"url":796},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FBigQuery",[798,799],"object-storage","elasticsearch","\u002Fglossary#bigquery",{"slug":802,"term":803,"definition":804,"category":758,"aliases":805,"links":810,"related":813,"readMore":-1,"target":814,"hasArticle":754},"ci-cd","CI\u002FCD","Automatisering die elke wijziging bouwt, test en uitlevert zonder dat iemand handmatig commando's uitvoert. Op mobiel is het wat van een release een druk op de knop maakt in plaats van een middag wachten tot iemand anders tijd heeft.",[806,807,808,809],"CI","continuous integration","continuous delivery","continue integratie",[811],{"kind":768,"url":812},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCI\u002FCD",[],"\u002Fglossary#ci-cd",{"slug":816,"term":817,"definition":818,"category":819,"aliases":820,"links":822,"related":825,"readMore":-1,"target":828,"hasArticle":754},"crud","CRUD","Create, read, update, delete — de vier bewerkingen achter zo goed als elk formulier en elk beheerscherm. Verzamelnaam voor de helft van een app die routinematig gegevensbeheer is, tegenover de delen die echte domeinlogica dragen.","architecture",[821],"Create, Read, Update, Delete",[823],{"kind":768,"url":824},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FCreate,_read,_update_and_delete",[826,827],"rest","graphql","\u002Fglossary#crud",{"slug":830,"term":831,"definition":832,"category":819,"aliases":833,"links":839,"related":842,"readMore":-1,"target":845,"hasArticle":754},"container-registry","Containerregistry","Een gehoste opslagplaats voor container-images, aangesproken op naam en tag — Docker Hub, GitHub Container Registry, of die van je eigen cloudprovider. Een build daarheen pushen verandert 'werkt op mijn machine' in een image die iedereen ongewijzigd kan pullen en draaien.",[834,835,836,837,838],"container registry","image registry","Docker registry","GHCR","ghcr.io",[840],{"kind":782,"url":841},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fpackages\u002Fworking-with-a-github-packages-registry\u002Fworking-with-the-container-registry",[843,844],"dev-container","multi-arch-image","\u002Fglossary#container-registry",{"slug":616,"term":847,"definition":848,"category":744,"aliases":849,"links":854,"related":857,"readMore":858,"target":858,"hasArticle":422},"Deep linking","Een link die een specifiek scherm in een geïnstalleerde app opent in plaats van het beginscherm of een webpagina. Deferred deep linking overleeft een installatie, zodat een tik die via de appwinkel loopt alsnog op het juiste scherm landt.",[850,851,852,853],"deferred deep linking","universal links","Android App Links","diepe links",[855],{"kind":768,"url":856},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMobile_deep_linking",[776,785],"\u002Fglossary\u002Fdeep-linking",{"slug":843,"term":860,"definition":861,"category":758,"aliases":862,"links":867,"related":872,"readMore":-1,"target":873,"hasArticle":754},"Dev Container","Een ontwikkelomgeving die één keer beschreven staat in devcontainer.json — het OS, de tools en de runtimeversies die een project nodig heeft — en die bij iedere bijdrager identiek in een container opent, in plaats van een installatiehandleiding die iedereen anders leest.",[863,864,865,866],"devcontainer.json","Dev Containers","VS Code Dev Containers","ontwikkelcontainer",[868,870],{"kind":749,"url":869},"https:\u002F\u002Fcontainers.dev\u002F",{"kind":782,"url":871},"https:\u002F\u002Fcode.visualstudio.com\u002Fdocs\u002Fdevcontainers\u002Fcontainers",[830],"\u002Fglossary#dev-container",{"slug":875,"term":876,"definition":877,"category":819,"aliases":878,"links":883,"related":886,"readMore":-1,"target":887,"hasArticle":754},"floating-point","Drijvende komma","Het binaire IEEE 754-formaat achter double en float. Het kan 0,1 niet exact weergeven, dus 0.1 + 0.2 is 0.30000000000000004 — onzichtbaar in graphics en fataal bij geld, dat thuishoort in gehele kleinste eenheden (centen) of een decimaal type.",[879,880,881,882],"IEEE 754","double","floating point","zwevende komma",[884],{"kind":768,"url":885},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FIEEE_754",[],"\u002Fglossary#floating-point",{"slug":799,"term":889,"definition":890,"category":744,"aliases":891,"links":894,"related":899,"readMore":-1,"target":900,"hasArticle":754},"Elasticsearch","Een zoek- en analysemachine die records indexeert zodat je ze interactief kunt filteren en doorzoeken in plaats van ze te scannen. Waar je naar grijpt als de vraag 'laat me deze specifieke sessies zien, op zes manieren ingeperkt' is en niet 'tel deze kolom op'.",[892,893],"Elastic","ELK",[895,897],{"kind":749,"url":896},"https:\u002F\u002Fwww.elastic.co\u002Felasticsearch",{"kind":768,"url":898},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FElasticsearch",[788],"\u002Fglossary#elasticsearch",{"slug":902,"term":903,"definition":904,"category":819,"aliases":905,"links":909,"related":912,"readMore":-1,"target":915,"hasArticle":754},"end-to-end-encryption","End-to-end-versleuteling","Versleuteling die op het verzendende apparaat wordt aangebracht en pas op het ontvangende weer wordt weggehaald, zodat de dienst die het bericht vervoert het niet kan lezen — niet na een vordering, niet na een datalek. Het beschermt de inhoud, nooit de metadata.",[906,907,908],"E2EE","end-to-end encryption","end-to-end versleuteld",[910],{"kind":768,"url":911},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FEnd-to-end_encryption",[913,914],"tls","jwt","\u002Fglossary#end-to-end-encryption",{"slug":917,"term":918,"definition":919,"category":819,"aliases":920,"links":924,"related":925,"readMore":-1,"target":929,"hasArticle":754},"fan-out","Fan-out","Eén keer uit een bron lezen en elke update afleveren bij iedere client die erop geabonneerd is. De naïeve versie schrijft in een lus naar abonnees en loopt vast zodra één socket traag is; een echte buffert per client en laat vallen wie niet kan bijbenen.",[921,922,923],"fanout","broadcast","uitzending",[],[926,927,928],"websocket","pub-sub","server-sent-events","\u002Fglossary#fan-out",{"slug":931,"term":932,"definition":933,"category":758,"aliases":934,"links":938,"related":941,"readMore":-1,"target":945,"hasArticle":754},"feature-flags","Feature flags","Schakelaars die functionaliteit aan- of uitzetten vanuit configuratie in plaats van vanuit een release. Ze laten één binary zich per merk, markt of gebruiker anders gedragen, en laten je een riskante functie uitzetten zonder een nieuwe build door de review te sturen.",[935,936,937],"feature flag","feature toggle","functieschakelaar",[939],{"kind":768,"url":940},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FFeature_toggle",[942,943,944],"staged-rollout","white-label","multi-tenancy","\u002Fglossary#feature-flags",{"slug":942,"term":947,"definition":948,"category":758,"aliases":949,"links":953,"related":954,"readMore":-1,"target":955,"hasArticle":754},"Gefaseerde uitrol","Een build eerst naar een klein percentage gebruikers uitbrengen en pas verbreden als het crashvrije percentage standhoudt. Een slechte build die je bij tien procent betrapt is een slechte middag; dezelfde build bij honderd procent is een slechte week.",[950,951,952],"staged rollout","gefaseerde release","canary release",[],[931,802],"\u002Fglossary#staged-rollout",{"slug":957,"term":958,"definition":959,"category":758,"aliases":960,"links":964,"related":967,"readMore":-1,"target":968,"hasArticle":754},"golden-test","Golden test","Een test die een widget rendert en het resultaat pixel voor pixel vergelijkt met een opgeslagen referentiebeeld. In Flutter is het de goedkoopste manier om te zien of een herontwerp de empty state brak op 320pt, in donkere modus, bij 200% tekstgrootte.",[961,962,963],"golden tests","screenshottest","snapshottest",[965],{"kind":782,"url":966},"https:\u002F\u002Fapi.flutter.dev\u002Fflutter\u002Fflutter_test\u002FmatchesGoldenFile.html",[802],"\u002Fglossary#golden-test",{"slug":827,"term":970,"definition":971,"category":819,"aliases":972,"links":973,"related":978,"readMore":-1,"target":979,"hasArticle":754},"GraphQL","Een querytaal voor API's waarin de client precies de velden benoemt die hij wil en één antwoord terugkrijgt dat daarop past. Het haalt de over-fetching weg waar REST-endpoints naar afglijden, en voegt er een eigen faalmodus aan toe: een onbegrensde query die het hele datamodel afloopt.",[],[974,976],{"kind":749,"url":975},"https:\u002F\u002Fgraphql.org\u002F",{"kind":768,"url":977},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FGraphQL",[826],"\u002Fglossary#graphql",{"slug":773,"term":981,"definition":982,"category":758,"aliases":983,"links":985,"related":988,"readMore":-1,"target":989,"hasArticle":754},"HIPAA","De Amerikaanse wet over beschermde gezondheidsinformatie — hoe die opgeslagen, verstuurd, gelogd en gedeeld mag worden. Net als PCI-DSS is het een architectuurkeuze aan het begin, geen beleidsstuk dat je vlak voor de lancering toevoegt.",[984],"Health Insurance Portability and Accountability Act",[986],{"kind":768,"url":987},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHealth_Insurance_Portability_and_Accountability_Act",[771,301,772],"\u002Fglossary#hipaa",{"slug":518,"term":991,"definition":992,"category":819,"aliases":993,"links":996,"related":999,"readMore":-1,"target":1000,"hasArticle":754},"Headless CMS","Een contentsysteem met een redactieomgeving en een API, maar zonder eigen front-end. Redacteuren publiceren op één plek, en de site of app rendert die content zelf — zodat de presentatielaag van jou is en niet van de CMS-leverancier.",[994,995],"headless contentmanagementsysteem","content-API",[997],{"kind":768,"url":998},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FHeadless_content_management_system",[452,826],"\u002Fglossary#headless-cms",{"slug":752,"term":1002,"definition":1003,"category":744,"aliases":1004,"links":1008,"related":1011,"readMore":-1,"target":1012,"hasArticle":754},"Host Card Emulation","Een Android-telefoon zich in software laten gedragen als een contactloze kaart via NFC, zonder secure element in hardware. Zo betaalt een wallet-app bij een terminal: de telefoon spreekt hetzelfde contactloze EMV-protocol als de plastic kaart zou hebben gedaan.",[1005,1006,1007],"HCE","EMV Contactless","contactloos betalen",[1009],{"kind":782,"url":1010},"https:\u002F\u002Fdeveloper.android.com\u002Fdevelop\u002Fconnectivity\u002Fnfc\u002Fhce",[771,741],"\u002Fglossary#host-card-emulation",{"slug":1014,"term":1015,"definition":1016,"category":744,"aliases":1017,"links":1018,"related":1021,"readMore":-1,"target":1023,"hasArticle":754},"impeller","Impeller","De renderengine die Flutter vandaag gebruikt, standaard op iOS sinds 2023 en op Android sinds 2024. Hij compileert zijn shaders vooraf in plaats van tijdens de eerste animatie, wat de shader-jank wegnam die Flutters zichtbaarste productieprobleem was.",[],[1019],{"kind":782,"url":1020},"https:\u002F\u002Fdocs.flutter.dev\u002Fperf\u002Fimpeller",[1022],"skia","\u002Fglossary#impeller",{"slug":1025,"term":1026,"definition":1027,"category":1028,"aliases":1029,"links":1033,"related":1036,"readMore":-1,"target":1038,"hasArticle":754},"in-app-purchase","In-app-aankoop","Digitale goederen of een abonnement verkopen via de Apple- of Google-billing die beide winkels verplicht stellen voor digitale content en waarover ze commissie rekenen. Het moeilijke is nooit de aankoop; het is het herstellen ervan op een nieuw toestel en de rechten kloppend houden.","business",[1030,1031,1032],"IAP","in-app purchase","in-app-abonnement",[1034],{"kind":782,"url":1035},"https:\u002F\u002Fdeveloper.apple.com\u002Fin-app-purchase\u002F",[1037],"product-market-fit","\u002Fglossary#in-app-purchase",{"slug":785,"term":1040,"definition":1041,"category":744,"aliases":1042,"links":1043,"related":1046,"readMore":-1,"target":1047,"hasArticle":754},"Install Referrer","Een Google Play-API die een net geïnstalleerde Android-app de campagneparameters overhandigt van de link die tot de installatie leidde. De Android-helft van deferred deep linking, en de betrouwbare manier om te weten waar een gebruiker vandaan kwam.",[],[1044],{"kind":782,"url":1045},"https:\u002F\u002Fdeveloper.android.com\u002Fgoogle\u002Fplay\u002Finstallreferrer",[616,776],"\u002Fglossary#install-referrer",{"slug":914,"term":1049,"definition":1050,"category":1051,"aliases":1052,"links":1054,"related":1059,"readMore":-1,"target":1060,"hasArticle":754},"JWT","Een ondertekend token dat zijn eigen claims meedraagt, zodat een server kan zien bij wie een verzoek hoort zonder een sessie op te zoeken. Standaard voor mobiele authenticatie. De handtekening bewijst dat er niets is gewijzigd; ze verbergt niet wat erin staat.","protocol",[1053],"JSON Web Token",[1055,1057],{"kind":749,"url":1056},"https:\u002F\u002Fjwt.io\u002F",{"kind":768,"url":1058},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJSON_Web_Token",[771],"\u002Fglossary#jwt",{"slug":1062,"term":1063,"definition":1064,"category":758,"aliases":1065,"links":1070,"related":1073,"readMore":-1,"target":1074,"hasArticle":754},"kyc","KYC","Know Your Customer — de identiteitscontroles die een gereguleerd financieel product uitvoert voordat het iemand geld laat verplaatsen: documentscans, liveness, sanctie- en witwascontroles. Het bepaalt de onboarding sterker dan welke ontwerpkeuze ook.",[1066,1067,1068,1069],"Know Your Customer","AML","KYC\u002FAML","witwascontrole",[1071],{"kind":768,"url":1072},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKnow_your_customer",[771,301],"\u002Fglossary#kyc",{"slug":76,"term":74,"definition":1076,"category":744,"aliases":1077,"links":1079,"related":1080,"readMore":1081,"target":1081,"hasArticle":754},"Bedrijfslogica geschreven in Kotlin delen tussen Android, iOS en de server, terwijl elk platform zijn eigen native UI houdt. Het alternatief voor Flutter wanneer de interface native moet zijn maar de regels erachter niet.",[1078],"KMP",[],[],"\u002Ftechnologies\u002Fkmp",{"slug":1083,"term":1084,"definition":1085,"category":1028,"aliases":1086,"links":1089,"related":1092,"readMore":-1,"target":1093,"hasArticle":754},"mvp","MVP","De kleinste versie van een product die je aan echte gebruikers kunt uitbrengen en die nog steeds de vraag beantwoordt waarvoor je het bouwde. Een besluit over scope, niet over kwaliteit — een MVP moet nog altijd werken.",[1087,1088],"minimum viable product","minimaal levensvatbaar product",[1090],{"kind":768,"url":1091},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMinimum_viable_product",[943],"\u002Fglossary#mvp",{"slug":844,"term":1095,"definition":1096,"category":819,"aliases":1097,"links":1102,"related":1105,"readMore":-1,"target":1106,"hasArticle":754},"Multi-architectuur-image","Eén image-tag die per CPU-architectuur naar andere binaries verwijst — linux\u002Famd64 en linux\u002Farm64 zijn het gebruikelijke paar — zodat dezelfde docker pull ongewijzigd werkt op Intel- en AMD-servers en op Apple Silicon-laptops.",[1098,1099,1100,1101],"multi-arch build","multi-arch image","multi-platform image","linux\u002Famd64 + linux\u002Farm64",[1103],{"kind":782,"url":1104},"https:\u002F\u002Fdocs.docker.com\u002Fbuild\u002Fbuilding\u002Fmulti-platform\u002F",[830],"\u002Fglossary#multi-arch-image",{"slug":944,"term":1108,"definition":1109,"category":819,"aliases":1110,"links":1113,"related":1116,"readMore":-1,"target":1117,"hasArticle":754},"Multi-tenancy","Eén deployment die veel klanten bedient, waarbij elke klant alleen zijn eigen data, configuratie en ingeschakelde functies ziet doordat de tenantcontext per verzoek wordt bepaald. Het is wat een vloot merkapps één product maakt in plaats van veel forks.",[1111,1112],"multi-tenant","tenant",[1114],{"kind":768,"url":1115},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FMultitenancy",[943,931],"\u002Fglossary#multi-tenancy",{"slug":1119,"term":1120,"definition":1121,"category":1051,"aliases":1122,"links":1126,"related":1131,"readMore":-1,"target":1132,"hasArticle":754},"oauth","OAuth","De standaard achter Inloggen met Apple, Google en de rest: de gebruiker geeft je app toestemming bij een aanbieder die hij al vertrouwt, en je app krijgt een token in plaats van zijn wachtwoord. Niemand hoeft nieuwe inloggegevens te verzinnen en jij bewaart ze nergens.",[1123,1124,1125],"OAuth 2.0","social login","Inloggen met Apple",[1127,1129],{"kind":749,"url":1128},"https:\u002F\u002Foauth.net\u002F2\u002F",{"kind":768,"url":1130},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FOAuth",[914],"\u002Fglossary#oauth",{"slug":798,"term":1134,"definition":1135,"category":819,"aliases":1136,"links":1141,"related":1144,"readMore":-1,"target":1145,"hasArticle":754},"Objectopslag","Opslag die een heel bestand onder een sleutel bewaart in plaats van in een mappenboom — Amazon S3 en de vele diensten die zijn API spreken. Goedkoop, praktisch onbeperkt, en de gebruikelijke plek voor ruwe events, back-ups en media: eenmaal geschreven, zelden gelezen, eeuwig bewaard.",[1137,1138,1139,1140],"S3","S3-compatibele opslag","object storage","blob storage",[1142],{"kind":768,"url":1143},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FObject_storage",[788],"\u002Fglossary#object-storage",{"slug":771,"term":1147,"definition":1148,"category":758,"aliases":1149,"links":1152,"related":1157,"readMore":-1,"target":1158,"hasArticle":754},"PCI-DSS","De beveiligingsstandaard van de kaartindustrie die iedereen bindt die kaartgegevens opslaat, verwerkt of verstuurt. De meeste apps blijven er bewust buiten door de kaartinvoer over te laten aan een gecertificeerde betaaldienstverlener.",[1150,1151],"PCI DSS","Payment Card Industry Data Security Standard",[1153,1155],{"kind":749,"url":1154},"https:\u002F\u002Fwww.pcisecuritystandards.org\u002F",{"kind":768,"url":1156},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPayment_Card_Industry_Data_Security_Standard",[914],"\u002Fglossary#pci-dss",{"slug":1160,"term":1161,"definition":1162,"category":744,"aliases":1163,"links":1167,"related":1170,"readMore":-1,"target":1171,"hasArticle":754},"platform-channels","Platform channels","De brug waarmee een Flutter-app native iOS- en Android-code aanroept — Keychain en Keystore, biometrie, betaalschermen, elke SDK zonder Dart-pakket. Routinewerk maar echt werk, en de eerste plek waar een engineer die nooit buiten Dart kwam vastloopt.",[1164,1165,1166],"platform channel","method channel","platformkanaal",[1168],{"kind":782,"url":1169},"https:\u002F\u002Fdocs.flutter.dev\u002Fplatform-integration\u002Fplatform-channels",[76],"\u002Fglossary#platform-channels",{"slug":1173,"term":1174,"definition":1175,"category":1051,"aliases":1176,"links":1180,"related":1183,"readMore":-1,"target":1184,"hasArticle":754},"post-quantum-cryptography","Post-quantumcryptografie","Versleutelingsalgoritmen die veilig moeten blijven tegen een toekomstige quantumcomputer, inmiddels gestandaardiseerd door NIST. De migratie is nu al dringend, nog vóór die hardware bestaat, omdat verkeer dat vandaag wordt onderschept later alsnog te ontsleutelen valt.",[1177,1178,1179],"PQC","post-quantum cryptography","postkwantumcryptografie",[1181],{"kind":768,"url":1182},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPost-quantum_cryptography",[913,902],"\u002Fglossary#post-quantum-cryptography",{"slug":1037,"term":1186,"definition":1187,"category":1028,"aliases":1188,"links":1192,"related":1195,"readMore":-1,"target":1197,"hasArticle":754},"Product-market fit","Het punt waarop een product aantoonbaar mensen heeft gevonden die het willen — ze gebruiken het, komen terug en betalen. Daarvoor beantwoordt engineering een vraag; daarna bedient engineering de vraag.",[1189,1190,1191],"PMF","product\u002Fmarket fit","productmarktfit",[1193],{"kind":768,"url":1194},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FProduct-market_fit",[1083,1196],"time-to-market","\u002Fglossary#product-market-fit",{"slug":1199,"term":1200,"definition":1201,"category":758,"aliases":1202,"links":1205,"related":1208,"readMore":-1,"target":1210,"hasArticle":754},"prompt-injection","Prompt injection","Een aanval waarbij tekst van een gebruiker door een taalmodel als instructie wordt gelezen in plaats van als data, en het model zo om zijn eigen regels heen wordt gestuurd. De LLM-variant van SQL-injectie, en hij duikt overal op waar gebruikersinvoer in een prompt wordt geplakt.",[1203,1204],"injectieaanval","injection attack",[1206],{"kind":768,"url":1207},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPrompt_injection",[1209],"rate-limiting","\u002Fglossary#prompt-injection",{"slug":927,"term":1212,"definition":1213,"category":819,"aliases":1214,"links":1217,"related":1220,"readMore":-1,"target":1221,"hasArticle":754},"Pub\u002FSub","Een berichtenpatroon waarin een producent een gebeurtenis publiceert en willekeurig veel consumenten die elk voor zich lezen, met een broker ertussen. De producent wacht nooit op ze, en zo blijft een verzoekpad snel terwijl het tragere werk erachter gebeurt.",[1215,1216],"publish\u002Fsubscribe","Google Cloud Pub\u002FSub",[1218],{"kind":768,"url":1219},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FPublish%E2%80%93subscribe_pattern",[],"\u002Fglossary#pub-sub",{"slug":826,"term":1223,"definition":1224,"category":819,"aliases":1225,"links":1228,"related":1231,"readMore":-1,"target":1232,"hasArticle":754},"REST","De gangbare stijl voor HTTP-API's: een URL benoemt een resource en het HTTP-werkwoord zegt wat ermee moet gebeuren. De standaardmanier waarop een app met een backend praat, en wat de meeste externe integraties verwachten aan te treffen.",[1226,1227],"REST API","Representational State Transfer",[1229],{"kind":768,"url":1230},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FREST",[926,928],"\u002Fglossary#rest",{"slug":1209,"term":1234,"definition":1235,"category":758,"aliases":1236,"links":1240,"related":1243,"readMore":-1,"target":1244,"hasArticle":754},"Rate limiting","Een bovengrens op het aantal verzoeken dat één aanroeper binnen een bepaald venster mag doen. Het houdt tegen dat één enthousiaste gebruiker, een scraper of een bot in een middag een maand aan betaald API-budget opmaakt, en het moet aan jouw kant van de integratie staan.",[1237,1238,1239],"rate limit","throttling","verzoeklimiet",[1241],{"kind":768,"url":1242},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRate_limiting",[1199],"\u002Fglossary#rate-limiting",{"slug":772,"term":1246,"definition":1247,"category":758,"aliases":1248,"links":1251,"related":1254,"readMore":-1,"target":1255,"hasArticle":754},"SOC 2","Een rapport van een externe auditor over hoe een organisatie met klantgegevens omgaat — beveiliging, beschikbaarheid, vertrouwelijkheid — en niet een certificaat dat je koopt. Zakelijke kopers vragen erom, en het beperkt de architectuur lang voordat de audit dat doet.",[1249,1250],"SOC2","System and Organization Controls",[1252],{"kind":768,"url":1253},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSystem_and_Organization_Controls",[771,301,773],"\u002Fglossary#soc-2",{"slug":1257,"term":1258,"definition":1259,"category":1028,"aliases":1260,"links":1263,"related":1266,"readMore":-1,"target":1267,"hasArticle":754},"saas","SaaS","Software die als doorlopend abonnement op een gehost product wordt verkocht in plaats van als eenmalige licentie die de klant zelf installeert en draait. De leverancier beheert de servers, levert doorlopend updates en factureert per gebruiker of per verbruik.",[1261,1262],"Software as a Service","software-as-a-service",[1264],{"kind":768,"url":1265},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSoftware_as_a_service",[944,943],"\u002Fglossary#saas",{"slug":928,"term":1269,"definition":1270,"category":1051,"aliases":1271,"links":1273,"related":1276,"readMore":-1,"target":1277,"hasArticle":754},"Server-Sent Events","Een eenrichtingsstroom van server naar client over een gewone HTTP-verbinding. Eenvoudiger dan een WebSocket en het volstaat overal waar alleen de server iets te melden heeft — een voortgangsfeed, een AI-antwoord dat token voor token binnenkomt.",[1272],"SSE",[1274],{"kind":768,"url":1275},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-sent_events",[926,826],"\u002Fglossary#server-sent-events",{"slug":452,"term":1279,"definition":1280,"category":819,"aliases":1281,"links":1285,"related":1288,"readMore":-1,"target":1289,"hasArticle":754},"Server-side rendering","Een pagina op de server als kant-en-klare HTML opbouwen, zodat het eerste antwoord de inhoud, koppen, metatags en gestructureerde data al meedraagt. Crawlers, linkvoorbeelden en trage apparaten lezen dat zonder JavaScript uit te voeren.",[1282,1283,1284],"SSR","server-rendered","renderen op de server",[1286],{"kind":768,"url":1287},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FServer-side_scripting",[518],"\u002Fglossary#server-side-rendering",{"slug":1022,"term":1291,"definition":1292,"category":744,"aliases":1293,"links":1296,"related":1301,"readMore":-1,"target":1302,"hasArticle":754},"Skia","De opensource 2D-graphicsbibliotheek van Google die Chrome, Android en — tot Impeller — elk Flutter-frame tekent. Ze rendert net zo goed naar PDF als naar een scherm, en dat is wat print-naar-PDF in Chrome doet.",[1294,1295],"Skia Graphics Engine","skia-safe",[1297,1299],{"kind":749,"url":1298},"https:\u002F\u002Fskia.org\u002F",{"kind":768,"url":1300},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FSkia_Graphics_Engine",[1014],"\u002Fglossary#skia",{"slug":1304,"term":1305,"definition":1306,"category":819,"aliases":1307,"links":1311,"related":1314,"readMore":-1,"target":1315,"hasArticle":754},"state-management","State management","Hoe een app bepaalt waar een waarde leeft, wie hem mag wijzigen en welke delen van het scherm opnieuw tekenen als dat gebeurt. In Flutter is de keuze tussen Riverpod, BLoC en Provider een van de eerste architectuurbesluiten en het lastigst te herzien.",[1308,1309,1310],"statemanagement","BLoC","Riverpod",[1312],{"kind":782,"url":1313},"https:\u002F\u002Fdocs.flutter.dev\u002Fdata-and-backend\u002Fstate-mgmt\u002Foptions",[957],"\u002Fglossary#state-management",{"slug":913,"term":1317,"definition":1318,"category":1051,"aliases":1319,"links":1323,"related":1326,"readMore":-1,"target":1327,"hasArticle":754},"TLS","De versleutelingslaag onder HTTPS. Ze bewijst dat de server is wie zijn certificaat zegt, spreekt een verse sleutel voor de sessie af en versleutelt alles daarna — zodat het netwerk ertussen alleen cijfertekst ziet die het niet stiekem kan wijzigen.",[1320,1321,1322],"SSL","HTTPS","Transport Layer Security",[1324],{"kind":768,"url":1325},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTransport_Layer_Security",[902,914],"\u002Fglossary#tls",{"slug":1329,"term":1330,"definition":1331,"category":1028,"aliases":1332,"links":1338,"related":1339,"readMore":-1,"target":1341,"hasArticle":754},"staff-augmentation","Teamuitbreiding","Een inhuurmodel waarbij engineers van een externe partner bij je team komen en onder jouw aansturing werken — in jouw repository, jouw sprints, jouw proces — in plaats van een eigen project op te leveren. Je koopt capaciteit; de code en de context blijven bij jou.",[1333,1334,1335,1336,1337],"staff augmentation","team augmentation","dedicated developers","outstaffing","teamversterking",[],[1340,1196],"total-cost-of-ownership","\u002Fglossary#staff-augmentation",{"slug":1196,"term":1343,"definition":1344,"category":1028,"aliases":1345,"links":1348,"related":1351,"readMore":-1,"target":1352,"hasArticle":754},"Time to market","Hoe lang het duurt om een product van besluit naar echte gebruikers te krijgen. De meeste discussies over stack en scope gaan eigenlijk over dit getal, want elke gewonnen week is een week omzet, feedback en concurrentiepositie.",[1346,1196,1347],"TTM","doorlooptijd tot de markt",[1349],{"kind":768,"url":1350},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTime_to_market",[1083,1340],"\u002Fglossary#time-to-market",{"slug":1340,"term":1354,"definition":1355,"category":1028,"aliases":1356,"links":1360,"related":1363,"readMore":-1,"target":1364,"hasArticle":754},"Total cost of ownership","Wat een product over zijn hele leven kost in plaats van alleen de bouw: onderhoud, upgrades, jaarlijkse OS- en winkelmigraties, en het tweede team dat je aanneemt om twee codebases gelijk te houden. Meestal groter dan de bouwofferte, en er vrijwel nooit in opgenomen.",[1357,1358,1359],"TCO","kosten van eigenaarschap","totale eigendomskosten",[1361],{"kind":768,"url":1362},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FTotal_cost_of_ownership",[1196],"\u002Fglossary#total-cost-of-ownership",{"slug":1366,"term":1367,"definition":1368,"category":1051,"aliases":1369,"links":1371,"related":1376,"readMore":-1,"target":1378,"hasArticle":754},"webrtc","WebRTC","De standaard voor browsers en mobiel om audio, video en data rechtstreeks tussen twee apparaten te sturen, waarbij servers er alleen aan te pas komen om ze aan elkaar voor te stellen. Hierop is een videogesprek in een app gebouwd, tenzij er een gehuurde SDK onder zit.",[1370],"Web Real-Time Communication",[1372,1374],{"kind":749,"url":1373},"https:\u002F\u002Fwebrtc.org\u002F",{"kind":768,"url":1375},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebRTC",[1377,926],"xmpp","\u002Fglossary#webrtc",{"slug":926,"term":1380,"definition":1381,"category":1051,"aliases":1382,"links":1383,"related":1386,"readMore":-1,"target":1387,"hasArticle":754},"WebSocket","Een protocol dat één verbinding openhoudt tussen client en server, zodat beide kanten op elk moment kunnen sturen in plaats van dat de client keer op keer vraagt. Waar live koersen, chat en aanwezigheidsindicatoren op draaien.",[],[1384],{"kind":768,"url":1385},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWebSocket",[928,826],"\u002Fglossary#websocket",{"slug":943,"term":1389,"definition":1390,"category":1028,"aliases":1391,"links":1395,"related":1398,"readMore":1399,"target":1399,"hasArticle":422},"White-label","Eén product dat onder veel merken wordt uitgebracht. Een white-label platform voor mobiel bouwt elke klant een winkelklare app met een eigen naam, ontwerp en content vanuit één gedeelde codebase, in plaats van het project per klant te forken.",[1392,1393,1394],"white label","multi-tenant app","merkloos product",[1396],{"kind":768,"url":1397},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FWhite-label_product",[1083],"\u002Fglossary\u002Fwhite-label",{"slug":1377,"term":1401,"definition":1402,"category":1051,"aliases":1403,"links":1406,"related":1411,"readMore":-1,"target":1412,"hasArticle":754},"XMPP","Een open, gefedereerd berichtenprotocol, en al lang het alternatief voor zelf een chatbackend schrijven of er een huren. Het dekt ook aanwezigheid, typindicatoren en bestandsoverdracht, en het is oud genoeg dat elk platform een volwassen clientbibliotheek heeft.",[1404,1405],"Jabber","Extensible Messaging and Presence Protocol",[1407,1409],{"kind":749,"url":1408},"https:\u002F\u002Fxmpp.org\u002F",{"kind":768,"url":1410},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FXMPP",[1366,926],"\u002Fglossary#xmpp"]