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, juist 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 is te gast in andermans huis, en hij moet zich in elk huis tegelijk onberispelijk gedragen.
Dit is een nichediscipline, en we hebben er een echte referentie in: een signaalverzamelaar die wij bouwden draait ingebed in duizenden sites die we niet beheren, en voedt een platform dat tienduizenden verzoeken per minuut beoordeelt.
De producten die we bouwen
- Meet- en analyticsverzamelaars — scripts die signalen van een pagina verzamelen en naar je platform sturen, zoals dat achter ons botdetectiewerk
- Functionele widgets — chat, boekingen, formulieren, rekentools: een stuk van jouw product dat in de pagina van je klant leeft
- Integraties via een snippet — de onboarding van "voeg één scripttag toe" die jouw product voor de bezoekers van je klant zet
- De ingest achter het script — de backend die ontvangt wat de snippet verstuurt, op welk volume het verkeer van je klanten ook uitkomt
- Het dashboard waarmee je klanten meekijken — rapportage- en configuratieoppervlakken behandelen we op beheerpanelen en dashboards
Wie je embeddable script bouwt
We bouwden er één van begin tot eind, van de snippet tot het platform erachter.
Een verzamelaar in duizenden vijandige pagina's
Voor een 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 — geen framework, geen runtime uit een build, geen 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. Hij werkt in een actief vijandige omgeving: 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.
En het platform dat ontvangt wat hij verstuurt
Een snippet is het zichtbare tiende 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 casestudy.
Wat ingebedde code werkelijk vraagt
Vijf beperkingen onderscheiden dit werk van gewone front-endengineering.
Een omvangbudget in kilobytes
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, niet uit voorkeur. Klein blijven is een functie die terug te zien is in de Lighthouse-scores van je klanten.
Geen enkele aanname over de hostpagina
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.
Defensief door ontwerp
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.
Versionering die je niet kunt afdwingen
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.
Toestemming en privacy als architectuur
Een script van een derde partij is een derde partij — de AVG 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 jouw embed iets is dat de compliancecontroles van je klanten kunnen goedkeuren in plaats van aankaarten.
Hoe we werken
Bouw met vaste scope. Snippet, loader, ingest en de uitrolpijplijn die ze veilig versioneert — als één systeem gescopet en opgeleverd.
Teamuitbreiding. Onze engineers sluiten aan bij het team dat je platform bezit — zie teamuitbreiding.
Hoe dan ook sturen we, zodra we de eisen scherp hebben, binnen twee werkdagen een offerte met duidelijke scope.
Wat een embeddable widget kost
De snippet is klein; het systeem niet — een embed wordt geprijsd vanuit dezelfde gepubliceerde niveaus als de pagina webontwikkeling. De verzamelaar of widget met zijn loader en een slanke ingest valt in het webappniveau op € 12.000-32.000; draagt het platform erachter echte schaal — scoring, analyse, klantdashboards — dan wordt het systeem als werk op SaaS-niveau geprijsd vanaf vanaf € 40.000.
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.
Veelgestelde vragen
Veelgestelde vragen van teams die code uitleveren aan andermans pagina's.
Lees hoe de verzamelaar in het hele systeem past in de casestudy over botdetectie, bekijk de Go-services erachter, of begin bij de pijler webontwikkeling.
