Over TechSpeeltuin
Over TechSpeeltuin.nl, het eigenbouwde framework en de gebruikte technologieën.
Inhoud laatst bijgewerkt: 15-07-2026
Wat is Techspeeltuin.nl?
TechSpeeltuin is gemaakt door een inwoner van Dordrecht, oorspronkelijk puur als hobby en voor eigen gebruik. Wat begon als een verzameling losse tools en dashboards is langzaam uitgegroeid tot deze site. Op een gegeven moment dacht ik: waarom niet delen? Dus bij deze.
De site bevat behoorlijk wat informatie — van scheepvaart en luchtverkeer tot hulpdiensten, weer, energie en meer. Dat kan overweldigend aanvoelen, en dat begrijp ik. Maar dat is ook precies de opzet: één plek waar zoveel mogelijk interessante data samenkomt. Niet alles is voor iedereen even relevant, en dat is prima. Bekijk en gebruik vooral wat je nuttig vindt en negeer de rest.
TechSpeeltuin.nl draait op een volledig zelfgebouwd PHP-framework — geen WordPress, geen CMS-bloat, maar een lichtgewicht en modulair systeem gebouwd voor snelheid, veiligheid en volledige controle over de eigen data.
Het framework
De kern van de site is OwnBrew Framework, een volledig in-house ontwikkeld, op maat gemaakt PHP-framework. Het framework verzorgt routering, toegangscontrole, templating en het laden van pagina-specifieke CSS en JavaScript. Iedere pagina bestaat uit vier bestanden (PHP, Smarty-template, CSS en JS) die automatisch worden ingeladen — zo blijft de code overzichtelijk en onderhoudbaar zonder onnodige abstractielagen.
Templates worden verwerkt door Smarty, dat zorgt voor scheiding tussen logica en presentatie. Pagina-metadata zoals de paginatitel, het menu-item en de zichtbaarheid worden rechtstreeks in het template opgeslagen, waardoor een pagina volledig zelfbeschrijvend is.
Het framework biedt onder andere:
- Toegangscontrole per pagina: pagina's kunnen publiek, lokaal (thuisnetwerk), achter een login of beperkt tot een specifiek IP-bereik worden gezet — ingesteld via één regel metadata.
- Automatisch menubeheer: het menu wordt opgebouwd op basis van de metadata in de templates, zonder dat er een aparte configuratie bijgehouden hoeft te worden.
- Plugin systeem met hooks: modules kunnen inhaken op het request-lifecycle (voor en na het laden van een pagina, voor en na rendering) zonder de kern aan te passen.
- Asset pipeline: pagina-specifieke CSS en JavaScript worden alleen ingeladen op de pagina's waar ze nodig zijn. Externe libraries (Leaflet, Highcharts, etc.) worden via een centrale asset-registry beheerd.
- CSRF-beveiliging: formulieren en API-aanroepen worden automatisch beveiligd met CSRF-tokens.
- Sitemap-generatie: pagina's die daarvoor zijn aangemerkt worden automatisch opgenomen in de XML-sitemap.
- CRON-monitor: de status van alle achtergrondscripts is intern inzichtelijk, inclusief wanneer ze voor het laatst draaiden en welke resources ze gebruiken.
- Centrale foutregistratie: fouten en waarschuwingen van alle achtergrondscripts en feeds worden gebundeld in één doorzoekbaar logboek, met een overzicht per onderdeel en tijdsvenster.
- Ingebouwde kwaliteitschecks: eigen validators controleren de HTML, CSS en JavaScript van alle pagina's (HTML onder andere via PHP Tidy), zodat kapotte markup, ongebruikte styles of scriptfouten snel opvallen.
- Status- & healthdashboard: een intern overzicht bewaakt of alle onderdelen — ontvangers, services en achtergrondscripts — nog draaien zoals verwacht.
- Request-middleware: elk verzoek passeert een keten van lagen — een eigen Web Application Firewall, authenticatie, rate limiting, CORS en een onderhoudsmodus — vóórdat een pagina wordt geladen.
- Cookieloze statistieken: bezoekersaantallen worden privacy-vriendelijk en server-side bijgehouden, zonder tracking-cookies of externe trackers.
Data ophalen en opslaan
Veel data op TechSpeeltuin wordt verzameld via achtergrondscripts (CRON-jobs) die volledig autonoom draaien. Een groot deel van de signalen wordt ontvangen met eigen ontvangers en apparatuur. De verwerkte data wordt opgeslagen in Redis (voor snelle in-memory toegang) of MySQL (voor persistente opslag).
- ADS-B luchtvaart: vliegtuigposities worden realtime ontvangen via een eigen SDR-ontvanger (Software Defined Radio) en verwerkt tot vluchtinformatie.
- AIS scheepvaart: scheepsbewegingen in de Dordtse wateren worden gevolgd via een eigen AIS-ontvanger.
- MeshCore LoRa: nodes in het lokale LoRa-meshnetwerk worden ontvangen via eigen LoRa-hardware en weergegeven op de kaart.
- P2000: meldingen van hulpdiensten worden ontvangen via een eigen ontvanger op het landelijke P2000-netwerk en real-time weergegeven.
- Radioactiviteit: stralingsniveaus worden lokaal gemeten met eigen detectieapparatuur.
- HF radio: HF-signalen (kortegolf) worden ontvangen via eigen apparatuur en antennes.
- Weerdata: meteorologische gegevens komen van KNMI-feeds en lokale sensoren.
- Energie & financieel: data over energieprijzen, beurzen en verbruik worden periodiek opgehaald uit publieke API's.
- Ruimteweer & radiopropagatie: zonnewind, geomagnetische activiteit (Kp-index), aurora-kansen en HF-propagatievoorspellingen worden opgehaald uit bronnen als NOAA/SWPC en GFZ.
- Luchtkwaliteit & pollen: fijnstof-, ozon- en hooikoorts-indices komen uit publieke API's.
- Activiteiten & evenementen: een doorlopende agenda van activiteiten in Dordrecht, automatisch samengesteld uit meerdere lokale bronnen.
- Lokale overheid: officiële bekendmakingen, raadsinformatie en meldingen over de openbare ruimte worden uit publieke bronnen verzameld.
- Dordrecht in cijfers: demografische en leefomgevingsdata (onder andere CBS), parkeerzones en afvalstatistieken.
Visualisatie en frontend
Op de frontend wordt gebruik gemaakt van Leaflet.js voor interactieve kaarten, inclusief markercluster-ondersteuning voor drukke datasets. Grafieken en statistieken worden weergegeven met Highcharts. Voor icons wordt FontAwesome gebruikt.
De gehele styling is eigengemaakt — geen Bootstrap of Tailwind, maar een eigen lichtgewicht component-bibliotheek met volledige ondersteuning voor dark mode via CSS custom properties.
Realtime data (zoals vliegtuig- en scheepsbewegingen) wordt via Server-Sent Events (SSE) naar de browser gestreamd, zodat de kaart zichzelf bijwerkt zonder paginaverversing.
AI-integratie
Voor het automatisch samenvatten en verrijken van content wordt gebruikgemaakt van een zelfgebouwde AI-helper die meerdere providers ondersteunt. Gegenereerde content wordt opgeslagen in Redis en kan worden weergegeven als Markdown.
Een groot deel van de nieuwssamenvattingen op de homepage wordt automatisch gegenereerd door AI. Hetzelfde geldt voor de bijbehorende afbeeldingen — die worden automatisch gezocht of gegenereerd op basis van trefwoorden uit het nieuwsbericht.
We experimenteren hier volop mee, en dat betekent dat er weleens wat misgaat. Een samenvatting die net niet klopt, een plaatje dat er weinig mee te maken heeft, of een kop die er wat vreemd uitspringt. Dat hoort erbij. Het is een continu proces van tweaken, tunen en leren — en dat vinden we zelf eigenlijk het leukste deel. Trek er dus niet te veel van aan, en meld het gerust als je iets opvallends ziet.
Hoe AI-selecties tot stand komen
Omdat een deel van de content automatisch door AI wordt samengesteld in plaats van met de hand gekozen, leggen we hier open uit hoe dat werkt — zodat je zelf kunt inschatten waar de selecties vandaan komen.
- Bronnen: de nieuwssamenvattingen zijn gebaseerd op openbaar toegankelijke nieuwsbronnen over Dordrecht en omgeving. De onderliggende meetdata (scheepvaart, luchtvaart, weer, en zo verder) komt uit de bronnen die hierboven per onderwerp staan beschreven.
- Samenstellen: achtergrondscripts halen periodiek nieuwe items op. Een AI-model maakt daar een beknopte samenvatting van en kiest of genereert een passende afbeelding op basis van trefwoorden uit het bericht. Wélke items verschijnen en in welke volgorde, wordt automatisch bepaald — er zit geen handmatige redactionele selectie per item tussen.
- Verversen: dit gebeurt doorlopend en automatisch; er is geen vast publicatiemoment. Oudere items schuiven vanzelf door.
- Verificatie: de AI-samenvattingen worden niet stuk voor stuk door een mens nagelezen vóórdat ze verschijnen. We controleren steekproefsgewijs en sturen het systeem bij, maar onnauwkeurigheden kunnen erdoorheen glippen — zie ook Nauwkeurigheid van informatie hieronder.
- Melden: klopt er iets niet of staat er iets ongepasts? Laat het weten via het contactformulier, dan corrigeren we het.
Nauwkeurigheid van informatie
Veel inhoud op TechSpeeltuin — denk aan de informatieve pagina's over technologie, protocollen en regelgeving — is uitgebreid onderzocht en waar mogelijk getoetst aan primaire bronnen. Bij het samenstellen van die inhoud wordt AI als hulpmiddel ingezet, zowel voor het schrijven als voor het uitzoeken van feiten. Dat versnelt het werk enorm, maar AI kan fouten maken: verkeerde technische details, verouderde normen, of subtiele onnauwkeurigheden die er op het eerste gezicht geloofwaardig uitzien. We proberen dat te ondervangen door te verifiëren, maar we zijn ook maar mensen — en soms glipt er iets doorheen.
Daar komt bij dat informatie kan verouderen. Regelgeving wordt herzien, normen worden bijgewerkt, richtlijnen veranderen — en het is goed mogelijk dat de site op dat moment nog niet is bijgewerkt. Dat geldt zeker voor pagina's over frequentiegebruik, technische standaarden en juridische kaders: die kunnen sneller verouderen dan je verwacht.
Behandel de informatie op deze site dan ook als puur informatief en als startpunt, niet als eindpunt. Je hebt zelf de plicht om na te gaan of iets klopt — zeker als je er beslissingen op baseert. Raadpleeg altijd de officiële en primaire bronnen. Zie je iets wat niet klopt of verouderd is? Meld het gerust via het contactformulier — dat wordt zeer op prijs gesteld.
Hosting en infrastructuur
De site draait op een eigen, self-hosted server, aangevuld met monitoring, logging en een Web Application Firewall (WAF) die verdachte verzoeken blokkeert voordat ze de applicatie bereiken. Alle risicovolle code (configuratie, framework-kern, templates) staat buiten de webroot en is niet direct bereikbaar via de browser.
Al het verkeer naar TechSpeeltuin loopt via Cloudflare. Cloudflare fungeert als reverse proxy en biedt meerdere beveiligings- en prestatielagen:
- DDoS-bescherming: volumetrische aanvallen worden automatisch geabsorbeerd voordat ze de server bereiken.
- IP-afscherming: het werkelijke server-IP-adres blijft verborgen achter Cloudflare's netwerk.
- SSL/TLS-terminatie: HTTPS-verbindingen worden afgehandeld via Cloudflare's certificaten, met end-to-end encryptie naar de eigen server.
- Caching van statische assets: afbeeldingen, CSS en JavaScript worden geserveerd vanuit Cloudflare's wereldwijde CDN, wat de laadtijd voor bezoekers buiten Nederland verkort.
- Bot-filtering: automatisch verkeer van bekende kwaadaardige bots en crawlers wordt gefilterd.
- Rate limiting: herhaalde verzoeken van hetzelfde IP-adres kunnen worden beperkt via Cloudflare-regels.
Contact
Vragen, opmerkingen of suggesties? Neem contact op via het contactformulier.
Beveiliging & onafhankelijke tests
De infrastructuur van TechSpeeltuin wordt getoetst door onafhankelijke, publieke tests. De actuele scores — klik voor het live-resultaat:
Waarom Mozilla Observatory een B+ geeft en geen A+
Onze CSP staat bewust 'unsafe-inline' toe voor scripts. De site gebruikt op veel plekken inline scripts en knop-acties (onclick e.d.); die volledig vervangen door een nonce-/hash-gebaseerde CSP is een omvangrijke en foutgevoelige verbouwing — en breekt bij elke nieuwe knop opnieuw — terwijl de praktische veiligheidswinst klein is.
Wat we wél hebben is een afgedwongen CSP met een strikte bronnenlijst, géén 'unsafe-eval', clickjacking-bescherming (frame-ancestors), object-src 'none', en HSTS met preload. De B+ is dus een bewuste, weloverwogen balans tussen degelijke beveiliging en een site die gewoon werkt.
Disclaimer
De informatie op TechSpeeltuin.nl wordt uitsluitend aangeboden voor informatieve doeleinden. De gegevens worden samengesteld op basis van openbaar beschikbare bronnen en eigen ontvangers, en verwerkt tot overzichtelijke weergaven. Hoewel we streven naar correctheid en actualiteit, kunnen wij geen garantie geven voor de juistheid, volledigheid of actualiteit van de gepresenteerde informatie.
Aan de informatie op deze website kunnen geen rechten worden ontleend. De beheerder van TechSpeeltuin.nl is niet aansprakelijk voor schade van welke aard dan ook die voortvloeit uit het gebruik van, het vertrouwen op, of het handelen naar aanleiding van informatie op deze website.
Voor beslissingen met mogelijke gevolgen — waaronder maar niet beperkt tot veiligheid, gezondheid, financiën of noodsituaties — dient u altijd de officiële bronnen te raadplegen. Deze website is geen vervanging voor officiële waarschuwingssystemen, overheidsinformatie of professioneel advies.
Getoonde gegevens van derden (waaronder maar niet beperkt tot weerdata, P2000-meldingen, AIS-data, luchtvaartdata en financiële koersen) zijn eigendom van de respectievelijke bronhouders en zijn onderworpen aan hun gebruiksvoorwaarden. Alle overige content op TechSpeeltuin.nl is eigendom van TechSpeeltuin.nl, tenzij anders vermeld.
Foto's en video's van onze eigen redactie herken je aan het TechSpeeltuin-logo; overig beeldmateriaal (waaronder de afbeeldingen bij nieuwssamenvattingen) blijft eigendom van de oorspronkelijke maker of rechthebbende. Wil je eigen beeld van TechSpeeltuin (her)gebruiken? Neem gerust even contact op.
Wij behouden ons het recht voor deze disclaimer op elk moment te wijzigen zonder voorafgaande kennisgeving. Op het gebruik van deze website is Nederlands recht van toepassing. Voor informatie over hoe wij omgaan met persoonsgegevens, zie onze privacyverklaring.