In Hoe deze website met prompts werd gebouwd beschreef ik hoe AI hielp een oude WordPress-installatie om te bouwen tot een statische website op AWS S3 en CloudFront. Ik had onderschat hoe snel een eenvoudige persoonlijke site in een ingewikkeld softwareproject kon veranderen.
Hoe de complexiteit groeide
We begonnen met enkele pagina’s. Daarna kwamen weersverwachtingen, trainingsgegevens, spellen, beveiligingscontroles, geautomatiseerde releases en negen talen. Naast Engels voegden we Duits, Spaans, Chinees, Frans, Braziliaans Portugees, Japans, Hindi en Nederlands toe. Dat vergrootte het bereik, maar elke taal bracht ook extra HTML, navigatielinks, feeds, metadata en mogelijke fouten mee.
Onze naïeve aanname: een statische website is goedkoop om te bouwen, dus negen complete versies opnieuw genereren kost nauwelijks iets. In werkelijkheid wachtte zelfs een kleine Engelse wijziging op lettertypen, afbeeldingen, alle taalversies van de navigatie, de sitemap en controles. We maakten alle negen talen tot één ondeelbare voorwaarde voor iedere release.
Elke taal moest klaar zijn vóór publicatie
Het probleem waren niet de vertalingen zelf, maar onze afhankelijkheidsstructuur.
Wanneer bescherming een obstakel wordt
In de GitHub-geschiedenis liepen we vast op geheimmenscanners, verschillen in reproduceerbare builds, vastgelopen lettertype-installaties, workflowfouten en ontbrekende AWS IAM-rechten. Tijdens herstel werden 534 openbare objecten gecontroleerd: 501 klopten, 24 weken af en negen nieuwe pagina’s waren niet leesbaar.
Elke beveiliging had een goede reden. Samen maakten ze kleine wijzigingen moeilijk. Meer automatisering betekent niet automatisch betere automatisering. Een mislukte controle moet worden onderzocht, niet genegeerd.
Het nieuwe ontwerp: eerst Engels
We willen de belangrijkste taal loskoppelen van de acht vertalingen die daarna kunnen volgen.
korter is beter
Dit schema beschrijft de beoogde uitrolvolgorde, niet het bewijs dat deze al zo is uitgevoerd. Vertalingen worden aan de exacte Engelse bron gebonden via SHA-256. Als de Engelse tekst verandert, vervallen eerdere goedkeuringen. Een ontbrekende vertaling mag nooit stilzwijgend door de Engelse tekst worden vervangen.
Reproduceerbare builds, OIDC, minimale AWS-rechten, kostenlimieten en geen CloudFront-invalidaties blijven verplicht.
Wat we daadwerkelijk hebben gecontroleerd
PR’s #119–#122 leverden een compiler voor Engelse artikelen, een tweede voor acht beoordeelde talen en een testvolgorde Engels → talen → integriteitscontrole. De handmatige test heeft geen AWS-schrijfrechten. De gefaseerde publicatie blijft beveiligd met expliciete toestemmingsvariabelen; de bestaande OIDC-workflow voert vóór S3 nog steeds de volledige sitecontrole uit.
Groene CI betekent dus niet dat Engels al live was terwijl andere talen werden verwerkt. De testlogs meldden sourceToHtmlBuildComplete=false, productionDeploymentApproved=false en nul S3-schrijfacties.
De gemeten tijdwinst
We vergeleken twee vergelijkbare negen-talige wijzigingen in de changelog van 7 november 2026. Dit zijn metingen van de volledige bestaande pipeline, niet van twee echt gefaseerde productiereleases.
| Maatstaf | Eerder | Later | Verschil |
|---|---|---|---|
| Offline-CI | 3:38 min (218 s) | 3:18 min (198 s) | 9,2% sneller |
| Volledige kwaliteitspoort | 2:55 min (175 s) | 2:27 min (147 s) | 16,0% sneller |
| Gitleaks | 56 s | 67 s | 11 s trager |
| Semgrep | 10 s | 11 s | vrijwel gelijk |
| pip-audit | 13 s | 12 s | vrijwel gelijk |
| PR geopend tot merge | 41:50 min | 34:29 min | 7:21 min korter |
korter is beter
De kwaliteitspoort zit binnen de offline-CI en moet niet worden opgeteld. Beveiligingsjobs draaien parallel. Semgrep en pip-audit sloegen hun dure scanstappen over bij deze documentatiewijzigingen. Twee runs bewijzen ook nog geen blijvende verbetering.
We verwijderden dubbele assetcontroles, hergebruikten SHA-256-hashes en navigatiegegevens, cacheten Python- en Sharp-downloads, maakten de duur van generatoren zichtbaar en introduceerden een snelle route voor alleen documentatie.
De Engelse snelle route
Een afzonderlijke schaduwbenchmark mat 0,562 seconde voor de Engelse HTML-controle: 60 pagina’s, 96 assets en 514 lokale links. De gesimuleerde Engelse merge-controles duurden 15 seconden. Alle 501 bestanden van andere talen bleven onveranderd.
Dat zijn deelmetingen en proefuitvoeringen, geen werkelijke tijd van merge tot S3-publicatie. De 15 seconden rechtstreeks vergelijken met 198 seconden volledige CI zou misleidend zijn.
Van pull request tot live pagina
Een PR is geen deployment. Na tests, beoordeling en merge controleert de release de exacte bestanden, SHA-256-manifesten, AWS-rechten en het kostenbudget. Pas daarna worden ze naar S3 geschreven. CloudFront ververst zonder betaalde invalidatie via de normale TTL.
Voor een echte gefaseerde meting leggen we T0 Engelse merge, T1 Engelse checks gereed, T2 S3-upload Engels bevestigd, T3 vertalingen gestart en afgerond en T4 upload acht talen bevestigd vast. Dan pas weten we hoeveel eerder Engelstalige lezers de inhoud ontvangen.
Debuggen met AI
ChatGPT kan mislukte PR-controles onderzoeken, logs lezen, gerichte oplossingen voorstellen en de volgende CI-run controleren. Dat is vooral ’s avonds handig. Het betekent niet dat een chatsessie zonder actieve verbinding onbeperkt blijft doorwerken. De uiteindelijke beoordeling blijft noodzakelijk.
De les
De grootste verbetering is niet alleen enkele seconden minder rekentijd. Het eerste bruikbare resultaat mag niet afhankelijk zijn van elk optioneel vervolgresultaat. Engels kan eerder worden gepubliceerd, terwijl acht andere talen met dezelfde kwaliteitsnormen later volgen. Echte productiemetingen zullen het voordeel moeten aantonen.


cloud / systemen