<Changelog>
Wat is nieuw
Nieuwe functies en verbeteringen per versie.
Versie 9.0
2026-10-04- Stats-API na een deploy niet meer traag
Versie 8.9
2026-10-03- Oude aanvragen doorsturen naar de IdP
Versie 8.8
2026-10-03- Oude aanvragen doorsturen naar de IdP
Versie 8.7
2026-10-03- Inloggen via id.consulting-hands.nl (Consulting-hands ID); ledenbeheer, aanvragen en opzeggen via de IdP
Versie 8.6
2026-09-26- Voorbereiding overstap naar id.consulting-hands.nl: CH-Smart Setup accepteert ook tokens van de nieuwe inlogdienst (alleen actief als die in de instellingen staat; zonder instelling verandert er niets)
Versie 8.5
2026-08-21- Beheer CH-Smart Setup: downloadknop per versie, zodat een nieuwe werkplek de client kan ophalen zonder dat ch al geinstalleerd is
Versie 8.4
2026-08-11- Ingelogd blijven op CH-Smart Setup: het apparaattoken verloopt niet meer zolang het gebruikt wordt, en uitloggen trekt het nu ook op de server in.
Versie 8.3
2026-08-10- Apparatenmaximum bij CH-login geeft nu een duidelijke melding met het maximum erbij, in plaats van de onbegrijpelijke fout 'onbekende code'.
Versie 8.2
2026-08-05- Beheerders kunnen weer inloggen op de CH-Smart Setup apparaatpagina (vinkje 'Ik log in als beheerder'). API-sleutels van beheerders werken nu ook voor CH-Smart Setup. Een tijdelijk inlogslot toont voortaan hoeveel minuten het nog duurt.
Versie 8.1
2026-08-04- chsetup: product_delete-actie in de API, met de reden erbij (has_versions / has_licenses / not_found)
Versie 8.0
2026-08-03- chsetup whoami geeft nu ook admin terug, zodat het beheerscherm zijn knoppen grijs kan laten
Versie 7.9
2026-08-03- Apparaatlogin: goedkeurpagina toont wie goedkeurt + beheerderswaarschuwing + accountwissel; ch login -email verankert het account (server weigert een ander)
- Goedkeurpagina vraagt het ingelogde account bij de server op i.p.v. bij het renderen - anders meldt hij bij iedereen 'geen beheerder'
Versie 7.8
2026-08-03- CH-Smart Setup beheerscherm: producten, versies, licenties, uploads en auditlog op een eigen pagina
Versie 7.7
2026-08-03- Sync-back verbindt alleen nog als er werk is: nieuwe HTTPS-proef sync_probe.php (token uit LIST_KEY, geeft alleen een aantal terug) vervangt de onvoorwaardelijke SFTP-sessie elke run; taakinterval van 5 naar 15 minuten en een hartslagbestand zodat een verdwenen taak zichtbaar blijft
Versie 7.6
2026-08-03- Beheer-infopaneel toont nu welke PHP-extensies geladen zijn (vaste verwachte set, ontbrekende schreeuwt) plus display_errors - de 0-meting voor de aanstaande sprong van PHP 8.1 naar 8.3.
Versie 7.5
2026-08-02- Login-hardening (security-audit fase 0): rem + IP-onafhankelijke pogingenteller op de 2FA-stap, auditlog op de loginketen, en staging schrijft niet langer in de productie-TOTP-store (xlogin vereist de echte productie-2FA).
Versie 7.4
2026-07-22- Nieuwe bibliotheek-skill 'context-aware-learnings-capture' (categorie Documentatie): legt sessie-learnings automatisch vast zodra de context ~90% vol is via statusline + PostToolUse-hook, plus het /learnings-ritueel.
Versie 7.3
2026-07-14- Lid intrekken = soft-delete: lid gaat naar groep 'Ingetrokken' (naast Leden/Blacklist), herstelbaar tot 96 u (grants/2FA behouden), daarna automatisch definitief verwijderd. Bevestigingspopup bij intrekken + Herstellen/Definitief verwijderen-knoppen.
Versie 7.2
2026-07-14- Easter egg: trage 1980-retro ruimtecruiser (bsg.js) drijft af en toe ACHTER de content door beeld, onder een willekeurige hoek in rechte lijn. Alleen voor een ingelogd lid met 50%..<75% van de categorieen geactiveerd. Originele pixel-art.
- Uitloggen: redirect na logout gaat nu altijd naar de publieke hoofdsite https://ai-host4me.nl/ (i.p.v. '/', dat op staging naar de gate/verkeerde pagina resolveerde). Sessie wordt zoals voorheen volledig vernietigd.
- Leden & toegang: e-mailadres van een lid wijzigen (migreert lidmaatschap/toegang/2FA/beheerstatus) + handmatige Ban (oneindig als leeg, anders X minuten) met 'verbannen'-melding bij inlog (bans.json, auth.php-guard).
- Fix: E-mail/Tegels-dropdown in Leden & toegang werd afgekapt door overflow:hidden op .grant-user; overflow weggehaald + summary-hoeken afgerond (styles.css?v=54).
- Leden & toegang: E-mail/Tegels-dropdown opent nu in-flow op volle kaartbreedte (netjes uitgelijnd, nooit meer over de rand). Fix: 'Testomgeving (pre.)'-toegang activeert de gebruiker nu ook echt voor pre.-login (has_staging_access telt mee in login_start/verify/2fa).
- Uitloggen: redirect naar de root van de HUIDIGE host (pre. -> pre., productie -> productie) i.p.v. hardcoded productie.
Versie 7.1
2026-07-14- Easter egg: vriendelijke space-worm (spaceworm.js) — grove pixel-sprite die om de rand van de eerste beheer-tegel kruipt (boven/zijkanten/onder), volgt de tegel bij scroll/resize, verdwijnt als de tegel verborgen is.
- Space-worm v2: kan naar een andere tegel springen, met links-klik opgepakt/verplaatst worden, en bij loslaten buiten een rand valt hij met vleugels open glijdend naar het dichtstbijzijnde randje en kruipt verder. Trail-gebaseerd lijf, alle tegels als oppervlak.
- Inlogcode-mail: kopieerknop werkt nu echt — opent copycode.html die de 6-cijferige code (zonder spaties) via de Clipboard-API naar het klembord kopieert (JS kan niet in de mail zelf).
Versie 7.0
2026-07-13- Easter egg: Donkey-Kong-achtige mini-game (donkeykong.js, canvas, originele graphics) opent bij elke skill-download op skill.php; auto-hook op download.php-links, download loopt door.
- DK-game als beloningsspel: 5 opklimmende levels -> extra skill-categorie (game_reward, max 5, alleen ingelogd). Trigger: 4 of 6 logo-kliks (5 blijft het 404-spel). Casual download-game blijft.
Versie 6.9
2026-07-11- Beheer SEO/SEA: per instelling een '↗ beheren'-deeplink naar de console (GTM-workspace, GA4, Ads, Search Console, Bing).
Versie 6.8
2026-07-11- Google Tag Manager echt laden: GTM-container werd nergens geinjecteerd (alleen opgeslagen). Nu server-side in home.php (head-loader + noscript na body, frame-src CSP) en client-side in marketing.js (Consent Mode), naast de directe GA4.
Versie 6.7
2026-07-11- Cookie-/privacyteksten bijgewerkt voor GA4 in Consent Mode: cookiebeleid + privacybeleid (EN+NL) met _ga-cookies, Google als verwerker + EU-transfer; cookiebanner en homepage-bullet aangepast; datums bijgewerkt.
Versie 6.6
2026-07-11- Inlogcode-mail: kopieerbare code-pill met 📋-symbool (user-select:all, 1 tik selecteert de hele code). OTP-invoer ondersteunt al plakken + bevestigen met Enter of de knop.
- Inlogcode-mail: 'Code invullen & inloggen'-knop (magiclink #code=) — opent de site met de code al ingevuld; bevestigen met knop/Enter. Echte JS-kopieerknop kan niet in e-mail.
- GA4-verificatie fix: gtag.js server-side in de homepage-head (home.php, ook zonder JS detecteerbaar) + marketing.js laadt de tag nu direct via Consent Mode v2 (cookieloos tot consent) i.p.v. pas na cookiekeuze. CSP: *.google-analytics.com.
Versie 6.5
2026-07-10- Konami-demo: sluit open login-modal + toont meteen de demo-bibliotheek (geen refresh nodig); gelijkmatig gloeiende venster-rand als demo-indicator
Versie 6.4
2026-07-10- Gast-demo via Konami-code (up up down down left right + typ host4me) op het inlogscherm: read-only demosessie met 1 skill-, 1 plugin- en 1 Delphi-library-categorie; server-side demo_login + is_demo-guards tegen mutaties; footer toont Demo (gast)
- Staging-gate: Konami-code (up up down down left right + host4me) slaat het gate-wachtwoord over en opent de gast-demo; demo_login zet de sessie, gate serveert daarna de echte site
- Gast-demo werkbalk read-only: API-sleutels-, digest-, GitHub- en contribute-affordances verborgen voor een demo-sessie (server blokkeerde ze al via is_demo)
- Easter egg: 5 snelle kliks op het header-logo springt naar de 404 Space Invaders-game (script.js; reset na 1,2s)
- Logo-easter-egg: kliks nu in capture-fase geteld zodat ook de logo-afbeelding (agent-knop met stopPropagation) meetelt, niet alleen de merknaam
- Bewerkbare site-teksten in de DB + beheer-tegel 'Bewerk teksten' (accordeon, rich-text-editor) -> content_overrides + content.json, live toegepast door i18n.js. Configureerbare tegel-rechten: super-admin kent losse beheer-tegels toe aan leden (tile_grants.json, can_tile-guards per sectie/actie); admin altijd alles
- Tegel-toewijzing in Leden: dropdown is nu een zwevend paneel met de tegels netjes verticaal op eigen regel (geen afgebroken labels meer)
- Leden-knoppenrij (grant-toolbar) loopt nu netjes terug (flex-wrap) zodat de Intrekken-knop niet meer wordt afgekapt; admin styles.css-cachebuster v53
- Tegel-toewijzing: dropdown rechts-verankerd (blijft binnen de kaart) met opties horizontaal in een wrappende rij; geen afgekapte labels meer
- Tijdelijke blokkade van leden met escalatie (24u/48u/verwijderen+blacklist) + blacklist-beheer; blokkademelding bij inlog
- CSRF-fix: programmatische form.submit() (Beheerder-/Testomgeving-vinkjes) krijgt nu ook het token -> geen 403 meer
Versie 6.3
2026-07-09- Opzegpagina binnen het hoofddomein: /cancel.html + cancel-app.js in de webroot (aparte minimale look behouden, relatieve auth.php-calls); alle links (footer/FAQ/terms/privacy/i18n) naar /cancel.html; subdomein-deploy gebruikt nu dezelfde bron als vangnet
- version.py cancel zet cancel.ai-host4me.nl nu op een 301-redirect naar /cancel.html (index.php-redirect, nginx serveert php voor html); uit te voeren na de v63-release
Versie 6.2
2026-07-09- Gebruikersmenu in de footer: ingelogd lid ziet weergavenaam (GitHub-login of zelf ingesteld) met tegels Nieuwsbrief/Weergavenaam/Uitnodigen/API-sleutels/Opzeggen; invite-link geeft de uitnodiger een random categorie bij goedkeuring van het nieuwe lid (cap 5)
- Ask-the-library-chat verplaatst naar boven de 'Use the Library in Claude'-sectie; chat-resultaten tonen per item een toegangsbadge: Toegang (groen) of Geen toegang (nog niet!) met hover-uitleg over skill bijdragen / easter egg vinden
- Ask-chat: toegangsbadge + No-Access hover-tekst wisselen nu live mee met de taalkeuze (resultaten worden opnieuw getekend bij aih:lang)
- Ask-chat: geen-toegang-resultaten zijn niet meer klikbaar (div i.p.v. link, geen pijl); alleen de hover-uitleg op de badge blijft actief
Versie 6.1
2026-07-08- Wekelijkse digest-cron: tools/send_digest.py + digest_task.cmd + Windows-taak ai-host4me-digest (ma 08:00)
- MCP-server 'AI-Host4me Library' (slug mcp-ai-host4me-library) gecureerd in de plugin-catalogus (tools) en live op staging; gaat mee naar productie bij deze release
Versie 6.0
2026-07-08- Starter packs en Ask-the-library wisselen nu live mee met de taalkeuze (luisteren naar het aih:lang-event van i18n.js i.p.v. pas na refresh)
Versie 5.9
2026-07-08- Self-service API-sleutels: leden maken/intrekken hun eigen read-sleutel (max 2) via API-keys-knop in de bibliotheek; auth.php mykeys/mykey_create/mykey_revoke; owner-veld in api_keys
- Security: SHA-256-checksum bij api get + zip-header + op de ledenpagina; /.well-known/security.txt (RFC 9116); e-mailalert bij falende dagelijkse testrun; 2FA-waarschuwing voor beheerders zonder TOTP
- Bibliotheek-UX: globale zoekbalk (titel/beschrijving/slug, beide weergaven) + kind-bewust kopieerbaar install-snippet op de skillpagina; downloadteller stond al in de lijst
- MCP-server van de bibliotheek: mcp-server/server.py (FastMCP; search/get/download/categories via api.php, read-sleutel + checksum-verificatie), downloadbaar + uitgelegd op het developer-portal
- Bibliotheek-chat 'vraag de bibliotheek': chat.php (lexicale retrieval over registries + Claude Haiku, ANTHROPIC_API_KEY server-side, 8 vragen/5min per IP) + tweetalige widget op de homepage (ask.js)
- Changelog-pagina (changelog.html uit CHANGELOG.md via prebuild, klikbare versiebadge); starter packs op de homepage (packs.js, zoek-seed); wekelijkse digest opt-in (auth digest_get/_set + cron_digest.php, digest.enc)
- Beheer: aparte tegel Developer-portal met snelkoppelingen naar developers.html, api-docs, OpenAPI, Postman/Insomnia, MCP-server, changelog en security.txt (nieuw tabblad, host-bewust)
Versie 5.8
2026-07-08- Off-site backup: deploy/backup_private.py (AES-GCM, SQLite-snapshots, restore-test), dagelijkse Windows-taak 03:30, private repo ai-host4me-backup
- Developer-portal: developers.html + api-docs.html (Redoc) + openapi/Postman/Insomnia op de webroot + footer-link
- Legal: license-veld (SPDX, 3431 items verrijkt) op skillpaginas, rechtenverklaring bij inzenden (afgedwongen), notice-and-takedown in terms, Anthropic-disclaimer in footer
- Attributie ook op de publieke skill-preview: bron-repo + licentie (SPDX of zie bron)
Versie 5.7
2026-07-07- API: upstream_pull (write) toegevoegd - upstream-update van een skill via de API, docs bijgewerkt naar v57
- Beheer API-sleutels: keuze Skills-API of Ledenlijst-API bij aanmaken; scope list-sleutels werken op list-api.php en niet op api.php (wrong_api)
- Beheer repo-sync: upstream-controle-kop zelfde grootte als de repo-sync-kop (h3 naar h2)
Versie 5.6
2026-07-07- API: onderhouds-acties repo_sync (write), upstream_check en sync_status (read) in api.php + beheer-tegel en docs/api bijgewerkt
Versie 5.5
2026-07-07- Beheer repo-sync: laatste sync-datum en -tijd per categorie in nieuwe sync_log-tabel, weergave in twee kolommen
- Beheer upstream-controle: laatste controle-datum en -tijd per categorie in nieuwe upstream_log-tabel, weergave in twee kolommen
Versie 5.4
2026-07-07- 1980-shop easter egg: elke unieke skill-download activeert een random extra categorie (max 5 unieke downloads, eigen teller in de database); bij toekenning wordt de shop herladen en een old-school 1980-popup getoond
Versie 5.3
2026-07-07- Footer: rechterkolom gesplitst in twee kolommen (menu-keuzes + taalselector | account/juridisch/download/support); Nederlands-link is nu een taalselector zoals in de header
- Versie-weergave in punt-notatie (v53 = 5.3) in footer, meta en version.json.display; interne git-tags blijven vN
- 404 Space Invaders: 5 levels met oplopende aliensnelheid per level; na level 5 WINNER met galactisch vuurwerk
- 404-game beloning: ingelogde winnaar krijgt een extra categorie toegevoegd aan het account (max 5 per gebruiker, teller in de database); daarna melding + verwijzing naar de volgende easter eggs
- Terminal easter egg: elke unieke skill-download in de terminal activeert een random extra categorie (max 5 unieke downloads per gebruiker, teller in de database); daarna blijft downloaden vrij zonder extra categorie
- Terminal: refresh-commando + automatische lijstverversing na een download-categorie-beloning, zodat de nieuw ontgrendelde categorie meteen zichtbaar is
- Terminal-login: spaties worden uit de geplakte inlog-/2FA-code gestript (bij plakken en vóór verzenden)
Versie 5.2
2026-07-07- Documentatie: senior code-review, CODEMAP.md + SENIOR_CODE_REVIEW.md, file-headers en per-onderdeel-comments in alle source files (geen functionele wijzigingen)
- Code-review-remediatie: CSRF-bescherming beheer, rate_limit cross-bucket-fix, rate-limiting login/list-api/reviews/submit, 2FA in opzegflow, origin-strip API, SMTP header-injectie-filter, resend-feedback + .catch, listener-leaks, cache-busters gelijk, shop Escape+paginering
Versie 5.1
2026-07-07- Skill ai-host4me-skills-api live in de bibliotheek (development): Skills-API-referentie met OpenAPI-spec en Delphi-client
Versie 5.0
2026-07-07- Skills-API hardening: rate-limiting (240/min + brute-force-rem), save in transactie + busy_timeout, library-kind, readme-sanitization, list-paginering, eenduidig foutmodel list-api, optionele LIST_API_KEY, rotatie-advies API-sleutels
- Easter egg uitgebreid: aliens vliegen los door beeld (links/rechts, licht dalend); vliegtuigje schiet ze incidenteel kapot met explosie
Versie 4.9
2026-07-07- SEO/SEA-optimalisatie: robots.txt + sitemap (5843 URLs), JSON-LD + OG/Twitter-metadata, publieke skill-previews, 4 landingspaginas, logo -97 procent, easter eggs on-demand, gratis-badge + clusters-sectie, beheer-tegel SEO en SEA met Consent Mode v2, dashboard-grafiek organisch verkeer
Versie 4.8
2026-07-07- Skill globale-md-backup-github live in de bibliotheek (devops): backup globale .claude-config naar private GitHub met datum-tijd ZIP
- Easter egg: 404-vliegtuigje vliegt af en toe over de webapp (flyby.js) - diagonale random koers, schiet soms
- Lijstweergave: actiekolom verbreed (92 naar 176px) - download-teller/GitHub-knop liepen over de categorie-chip heen
- Pre-gate: beheerder-vinkje weg; beheerdersadres wordt automatisch herkend + uitlegtekst wie een inlogmail ontvangt
Versie 4.7
2026-07-06- Footer-knop Download: opent popup-iframe met Windows/Android-app-download (downloads.php); links instelbaar via nieuwe beheer-tegel App-downloads
Versie 4.6
2026-07-06- Gedelegeerde beheerders (super-admin wijst leden volledige beheerrechten toe) + audit trail in SQLite van alle beheer-acties; super-admin-only Audit trail-tegel met zoekbare popup (zoek/klik of na 5s filtert)
Versie 4.5
2026-07-06- Beheer Logging: rapporten openen in verplaatsbare/resizebare popup-vensters (iframe) - meerdere naast elkaar te vergelijken; viewlog staat same-origin framing toe
Versie 4.4
2026-07-06- Permissions-Policy-header toegevoegd (camera/microfoon/geolocatie/payment/usb/FLoC uit) op PHP-paginas + startpagina-wrapper
Versie 4.3
2026-07-06- Rate-limiting op publieke endpoints: request_access (5/uur/IP) en collect.php analytics (120/min/IP); generieke rate_limit()-helper (IP gehasht, faalt-open)
Versie 4.2
2026-07-06- B1 securityheaders-wrapper (home.php): op productie als index.php (marker AIH_HOME_HEADERS), test-canary /home.php op beide omgevingen
Versie 4.1
2026-07-06- Security-hardening: per-login pogingenlimiet op de e-mailcode (#1), securityheaders/CSP op alle PHP-paginas (#2), anti-enumeratie bij login (#3), CSRF-token op repo-sync AJAX (#4), purpose-gescheiden subsleutels (#6); security-auditrapport in beheer Logging
Versie 4.0
2026-07-06- Avatars-endpoint: dubbele GitHub-accounts (zelfde avatar via meerdere ledenadressen) 1x tonen
- Testautomatisering (testautomation/): dagelijkse full-test + quick-test na elke staging-deploy; beheer-menu Logging met HTML-rapporten; JS/CSS geminified bij deploy
Versie 3.9
2026-07-06- GitHub-koppelvoorstel alleen direct na een succesvolle login (niet meer bij elk paginabezoek met actieve sessie)
- Fork-repo hernoemd naar ai-host4me-library (naam ai-host4me kan al bestaan, bv. als private repo -> repo_create_failed); GitHub-foutdetail zichtbaar in de popup
- Fork-bestaanscheck: staat het item al in de gebruikersrepo, dan melding met GitHub-link en stoppen (niets overschrijven)
- Hero-rondjes tonen willekeurig de GitHub-avatars van alle gekoppelde leden (publiek endpoint met alleen avatar-URLs, geen namen/e-mails)
Versie 3.8
2026-07-06- GitHub-koppeling per lid: token koppelen (AES-opslag), publieke repo ai-host4me automatisch aangemaakt, per item een GitHub-knop met bevestigingspopup, GitHub-avatar in de hero, optioneel GitHub-veld bij de aanvraag
- GitHub-autorisatie in beheer per lid (invullen+autoriseren, daarna alleen delete; token moet bij dat account horen); leden zonder koppeling krijgen bij iedere login een voorstel met overslaan-optie
- GitHub-koppelmodal: tokennaam ai-host4me_repo voorbereid in de link; duidelijkere uitleg dat de scope public_repo een klaargezet GitHub-vinkje is; betere foutmelding
- Detailpagina: Fork naar GitHub-knop naast Download ZIP (met bevestigingspopup); zonder koppeling verwijst de knop naar de koppel-modal (#github-koppelen)
- Fork-knop detailpagina: exact dezelfde maat als Download ZIP (inset-rand, font inherit) + 14px tussenruimte
Versie 3.7
2026-07-05- Terminal-weergave: footer-knop TERMINAL opent terminal-UI (prompt ai-host4me>) met help/dir/ls/open/go -www/exit/clear/version; ook via #terminal
- Terminal v3: inline prompt (PowerShell-gedrag), login met e-mailcode+2FA, clusters/cats/skills/plugins/libs-tabellen (15 regels, selectievakjes), select/info/download, stats/whoami
- Staging besloten: pre.ai-host4me.nl alleen na login (gate-index.php met e-mailcode+2FA; index.html buiten de webroot)
- Staging-gate in huisstijl: space-achtergrond, auth-modal, OTP-cijfervakjes met 'Opnieuw sturen'-aftelling en 2FA-QR (zelfde flow als de site-login)
- 1980 SHOP: retro-webshopweergave (footer-knop naast TERMINAL) - categorieen-zijbalk per cluster, productpagina's met technische gegevens, winkelwagen + gratis afrekenen (ZIP-downloads), zoeken, marquee
- Testomgeving-toegang: beheer-vinkje 'Testomgeving (pre.)' per lid; gate-login accepteert productieleden en stuurt leden zonder vinkje ingelogd door naar productie (xlogin-token)
- 1980 SHOP in de kleurstelling van de webapp (site-CSS-variabelen: donker navy + accent)
- Repo-sync en upstream-controle gefaseerd: categorieen groter dan 25 in fasen van 25 (AJAX) met voortgangsbalk; zipball 1x gedownload en gecachet tussen fasen - beheer blijft responsief
- Fase-grootte sync/upstream-controle verlaagd naar 10 en instelbaar in beheer (1-100, admin_settings.json)
- 1980 SHOP: lettertypes opgeschaald voor leesbaarheid (basis 12->15px, koppen/tabellen/zijbalk mee)
Versie 3.6
2026-07-05- Beheer: GitHub-archief-tegel — confirm-menu voor het terugzetten van nieuwe (upstream-gesyncte) versies naar de mkatwi-archiefrepo's, met wachtrij + lokale verwerker tools/archive_sync_back.py
- Navigatie: 'Skills-bibliotheek/Skills Library' -> algemene term 'Bibliotheek/Library'
- GitHub-archief: scheduler (Windows-taak, 5 min) + sync-logboek met zoekfunctie in beheer; sync-back ondersteunt nu ook bibliotheek-skills en retries (max 3)
Versie 3.5
2026-07-05- Nieuw cluster Code libraries: derde kind (library) door de hele stack — site-toggle, database, toegangsbeheer, export, info-tegel, stats; archief mkatwi/ai-host4me-lib + publisher publish_libraries.py; eerste library DelphiAnthropic (categorie Delphi)
- Hero: telling code libraries in de online-badge + herotekst noemt plugins (MCP-servers) en Delphi/Lazarus-code en -libraries (EN+NL)
- Cyborg-light laadindicator (scanline + tekst) bij het laden van de bibliotheek en de beheer-categorielijsten
- Hero-eyebrow: 'Claude Skills - MCP - Delphi/Lazarus Bibliotheek/Library' (NL+EN)
Versie 3.4
2026-07-05- Beheer: plugin-categorieen apart toekenbaar in toegangsbeheer (Skills/Plugins-groepen) + CSV-export van skills/plugins met cluster- en categoriekeuze
- Export: 'Alle categorieen selecteren'-vinkje + categorielijst volgt de clusterkeuze (skills/plugins)
- Toegangsbeheer: categorie-vinkje selecteert de hele categorie zonder de accordeon te openen (lijst laadt onzichtbaar)
- Export: extra JSON-downloadknop (zelfde selectie/kolommen als CSV, met behoud van datatypes)
- Toegangsbeheer: fix categorie-vinkje — selectie van alle onderliggende items werkt nu ook echt (pre-toggle/preventDefault-revert opgelost)
- Export: selectie per cluster onthouden (ook na download/herladen, via localStorage) + Reset-knop
- Toegangsbeheer: groene succesmelding na opslaan (bij het betreffende lid, met actueel aantal items)
- Export: download neemt de selecties van alle clusters integraal mee (kind-gescopete categorie-tokens); bestandsnaam volgt de inhoud
- Toegangsbeheer: na opslaan klapt alles in; succesmelding staat boven de (gesloten) lidregel
- Beheer: startscherm met tegels per onderdeel (incl. Dashboard-tegel; topbar-knop weg); tegel opent 1 sectie, terugknop naar overzicht; oude ankers routeren mee
- Dashboard: terugknop naar het beheeroverzicht (admin.php); site-link naar rechts
- Dashboard: terugknop als brede balk (zelfde admin-backbar-stijl als de beheer-secties)
- Site-brede back-bar-stijl: alle 'terug naar'-links als brede klikbare box (skill-pagina, juridische pagina's, beheer, dashboard); topbars uniform met Naar de site + Uitloggen rechts; styles v38
- Beheer: info-tegel over de volle breedte (accordeon, scrollbaar) met systeem- en productie-informatie (aantallen skills/plugins/syncs/bronrepos/gebruikers/uploads, browser, IP, gebruiker, rechten, PHP- en SQLite-versie)
- Info-tegel: siteversie van deze omgeving + actuele productieversie (op staging live opgehaald)
Versie 3.3
2026-07-05- 2FA-QR: issuer/label = werkelijke host (pre.ai-host4me.nl vs ai-host4me.nl) zodat staging en productie in Google Authenticator te onderscheiden zijn
- qr-code-generator-skill bijgewerkt: TOTP-issuer per omgeving (host als issuer)
Versie 3.2
2026-07-05- Plugins-registry hersteld en geborgd: 2616 plugins (2614 MCP + gmail/whatsapp) live; registry in git + merge in publisher voorkomt overschrijven door deploys
Versie 3.1
2026-07-05- MCP-cluster route 1: 2614 gecureerde MCP-servers gepubliceerd als plugins (kind=plugin) via plugins.json; publicatiepijplijn tools/publish_mcp_plugins.py (curatie + NL-batchvertaling + INFO-zips); build_mcp.py + auth.php?action=mcp als basis voor de volledige catalogus (route 2)
Versie 3.0
2026-07-04- Plugins hernoemd naar Plugins-MCP-Servers in alle zichtbare labels (soort-toggle, tegel-tags, hero-badge, skill-pagina); interne datawaarde kind=plugin ongewijzigd voor API-compatibiliteit
Versie 2.9
2026-07-04- Filterherstel bibliotheek: soortkeuze (Skills/Plugins) reset een niet-passende categorie automatisch; nul resultaten toont melding + Toon alles-knop (voorheen onverklaard leeg raster door onthouden filters)
Versie 2.8
2026-07-04- Plugins (gmail, whatsapp) omgezet naar het standaard taalmodel: Engelse basistekst + NL-variant (title_nl/description_nl/readme.nl.html, has_nl) - vertaalknop verschijnt nu ook op plugin-tegels
Versie 2.7
2026-07-04- 404-pagina met bestuurbare Space Invaders-game (pijltjes = bewegen, spatie = schieten, ontploffende invaders, score/levens, touch-knoppen); activeren via TransIP-paneel Index- en errorpagina's
Versie 2.6
2026-07-04- Ledenrechten-pagina geoptimaliseerd: lazy accordeons per categorie (AJAX), opslaan wijzigt alleen geopende categorieen, Alles aan/uit als serveractie met bevestiging
- Gele hero-badge met live-aantal skills/plugins online (klikbaar naar de bibliotheek); stats-endpoint uitgebreid met aantallen
Versie 2.5
2026-07-04- Skill-archief batch-publicatie: 12 nieuwe categorieen, registry archive_skills.json, DB-schema v2 (meta/readme gesplitst + transactie-import), publisher tools/publish_archive.py (hervatbaar), incrementele deploys + fullrelease-commando
Versie 2.4
2026-07-03- Na inlog is er nu een type-filter Alles/Skills/Plugins (segmented toggle naast de categorie-chips): filtert op kind, combineert met categorie-filter, lijst-zoekvelden en paginering, en de keuze wordt onthouden (sessionStorage, net als de categorie). skills-auth.js v18, styles.css v35
Versie 2.3
2026-07-03- Tweede plugin geregistreerd: Gmail (OpenClaw channel plugin van manuelfedele, v0.4.0, MIT) — Gmail/IMAP met app-passwords, server-side zoeken, threads, verzenden/beantwoorden en bijlagen-download naar schijf. Cluster gmail//plugin; ZIP+readme in skills-private, entry in plugins.json; plugin ook toegevoegd aan de repo mkatwi/ai-host4me-plugins (map gmail/ + README-tabel)
- Gmail-plugin omgebouwd naar Claude-versie (v2 in de database; v1 = OpenClaw-origineel blijft inzichtelijk/downloadbaar): nieuwe Claude-skill skills/gmail-imap (setup, config met App Password, claude mcp add-registratie, alle 9 tools, zoeksyntaxis, veiligheid) op basis van de gmail-imap MCP-server (Go) van de auteur; plugin-README/metadata/titel hernoemd van OpenClaw naar Claude met bronvermelding; OpenClaw-runtime bewaard als legacy-openclaw/. Site: titel 'Gmail (Claude-plugin)', nieuwe readme (plugin + volledige skill) en ZIP incl. skill
- WhatsApp-plugin ook omgebouwd naar Claude-versie (v2 in de database; v1 = OpenClaw-origineel blijft downloadbaar): wacli-skill herschreven voor Claude met GEVERIFIEERDE installatieroutes (de oude brew-formule steipete/tap/wacli bleek niet meer te bestaan -> gecorrigeerd naar brew install openclaw/tap/wacli, plus Windows-releasebinary en go install; repo/homepage/formule gecontroleerd), OpenClaw-routeringstekst vervangen door Claude-gebruik; README/metadata/titel hernoemd naar Claude; runtime naar legacy-openclaw/. Site: titel 'WhatsApp (Claude-plugin)', nieuwe readme + ZIP incl. herschreven skill
Versie 2.2
2026-07-03- Toegangsaanvragen in het beheer: aanvraag kan nu ook GEWEIGERD worden (knop met optioneel reden-veld; aanvrager krijgt een nette huisstijl-mail met de reden en de uitnodiging om opnieuw aan te vragen; aanvraag verdwijnt uit de wachtrij). Gewenste categorie wordt altijd getoond — ook expliciet 'geen gekozen' bij oude aanvragen zonder categorie
- Hierarchie cluster//(skill|plugin) ingevoerd: elk item heeft kind (skill/plugin) en cluster (bestaande categorieen = clusters met skills). Nieuwe plugins-registratie skills-private/plugins.json + eerste plugin 'whatsapp' (OpenClaw channel plugin uit nieuwe private repo mkatwi/ai-host4me-plugins, cluster whatsapp, ZIP 149KB + readme). Tegels tonen het label cluster//kind (plugins met amber accent). API: list levert clusters-overzicht en filtert op ?kind= en ?cluster=; save accepteert kind+cluster. Alles komt via de bestaande import ook in de versleutelde database (incl. versiebeheer). skills-auth.js v17, styles.css v32
- Tegel-layout: slug-badge (links) en cluster//kind-tag (rechts) kunnen elkaar niet meer overlappen (beide max 45% breed met ellipsis). Detailpagina toont nu ook het hierarchie-label cluster//skill of cluster//plugin naast de slug-badge (plugins met amber accent), zodat het cluster daar ook duidelijk is. styles.css v33
- Detailpagina: dubbele badge samengevoegd tot een pad-label in de bestaande slug-badge: cluster//kind//naam (bv. 'Documentatie & Schrijven//skill//documentation'); als cluster en naam gelijk zijn (bv. plugin whatsapp) alleen cluster//kind
- Tegel-layout verfijnd: cluster//kind-label (rechtsboven) mag nu de volle tegelbreedte gebruiken zodat bv. 'Documentatie & Schrijven//skill' volledig past; alleen bij echt te lange namen kapt hij af met ellipsis. Slug-badge staat op een eigen regel eronder (iets omlaag), dus overlappen is uitgesloten. styles.css v34
Versie 2.1
2026-07-03- Skill-data verplaatst naar een versleutelde SQLite-database (private/skills.sqlite, buiten de webroot): alle metadata + readmes EN/NL per rij AES-256-GCM-versleuteld (zelfde sleutelmodel als de ledenlijst; onleesbaar zonder LIST_KEY). Database ververst zichzelf automatisch uit de bestanden bij deploy/repo-sync/upload (fingerprint), met bestanden-fallback als SQLite ontbreekt. skill.php leest readmes uit de DB; ZIP-bestanden blijven op schijf in de prive-map. Nieuw _skills_db.php
- Extern skills-API (api.php) voor andere websites/applicaties: X-Api-Key-header, scopes read (list/get incl. readmes/zip, telt mee in downloadstatistieken) en write (save/delete; API-schrijvingen winnen van de bestanden-import). Beheer-menu: sectie 'Skills-API & sleutels' met key-generator (naam+scope; sleutel eenmalig getoond, alleen HMAC-hash opgeslagen), sleuteloverzicht met laatst-gebruikt/calls en intrekken, plus DB-herimportknop
- Upstream-referentie per skill: origin_url (de oorspronkelijke repo waar de skill vandaan komt) in skills.json/database — 38 skills gekoppeld via het archief, uploads dragen hun repo_url mee, build_skills.py vult automatisch uit het archief. Detailpagina toont 'Bron: GitHub'-link
- Versiebeheer in de skills-database: elke inhoudelijke wijziging (deploy/repo-sync/upstream-pull/API-save) maakt een versie-snapshot (skill_versions, versleuteld, incl. ZIP-kopie). Detailpagina: versie-keuzelijst in het statistiekpaneel, banner bij oudere versie, download per versie (download.php?ver=N). API: get levert versiegeschiedenis en ?ver=N een specifieke versie
- Beheer: upstream-controle per categorie — vergelijkt elke skill met zijn oorspronkelijke repo (laatste commit op het bronpad via de GitHub-API) en toont actueel/update-beschikbaar; knop 'Update ophalen' haalt de upstream-versie binnen als nieuwe versie (origin_sha vastgelegd in sync_meta, overleeft deploys). Nieuwe functies in _repo_sync.php (parse_github_url, upstream_check_category, upstream_pull)
- Versie-keuzelijst op de detailpagina was te smal (tekst 'v1 — 2026-07-03 (nieuwste)' viel af): staat nu op een eigen regel over de volle paneelbreedte (min. 235px), iets ruimere padding. styles.css v31
Versie 2.0
2026-07-03- Skill-detailpagina: statistiekpaneel in npm-stijl met downloadgrafiek (sparkline, tabs All time/30d/7d, k-notatie; data uit downloads.sqlite via download_series) en 'Laatste update' = laatste repo-sync (relatief + datum, EN/NL) + categorie. build_skills.py stempelt synced bij elke build; bestaande skills geseed
- Beheer: nieuwe functie 'Skills bijwerken (repo-sync per categorie)' — knop per categorie haalt de repo-zipball op (GITHUB_TOKEN uit de deploy-config, want privé-repo) en vernieuwt per skill ZIP + Engelse readme + synced-datum (sync_meta.json, overleeft deploys; NL volgt bij volgende lokale build). Nieuw _repo_sync.php; flash-melding met resultaat en waarschuwing als het token ontbreekt
- Statistiekpaneel op de detailpagina staat op brede schermen (>=1240px) rechts NAAST de contentkolom als sticky zijbalk (npm-stijl; grid 1fr+340px, blijft in beeld bij scrollen door de readme); op smallere schermen in de kolom zoals voorheen. Download-knop + teller samen in een dl-row. styles.css v25
Versie 1.9
2026-07-03- Lijstweergave: pager scrolt naar de kolomkop zodat zoekvelden en bovenste regel volledig zichtbaar zijn
Versie 1.8
2026-07-03- Weergavekeuze tegels/lijst (ClawHub-stijl) in de skills-bibliotheek na inlog; keuze onthouden in localStorage; tweetalig
- Lijstweergave: sorteerbare kolommen (Skill/Beschrijving/Categorie) + zoekveld per kolom
- Lijstweergave: categoriekolom als pull-down (synchroon met de categorie-chips)
- Paginering skills-bibliotheek: 30 tegels / 50 lijstregels per pagina met Vorige/Volgende; zoeken en filteren blijft over de volledige lijst gaan
- Pager-scroll houdt rekening met de sticky header (scroll-margin-top) zodat de bovenste skill volledig zichtbaar is
Versie 1.7
2026-07-02- 4 WooCommerce-skills toegevoegd aan de skills-bibliotheek (wordpress-woocommerce-development, odoo-woocommerce-bridge, woocommerce-performance, woocommerce-markdown)
Versie 1.6
2026-07-02- Download-teller per ZIP: elke download via download.php wordt gelogd in een SQLite-database (private/downloads.sqlite, buiten de webroot; slug+lid+tijdstip). Tegels tonen '⬇ N' (tooltip 'N keer gedownload', EN/NL); skill-detailpagina toont de teller naast de downloadknop. Beheer-dashboard: nieuwe sectie Downloads met per ZIP het aantal, unieke leden en laatste download (meeste eerst). Teller faalt stil als SQLite ontbreekt (download nooit geblokkeerd). skills-auth.js v16, i18n.js v11, styles.css v23
- Downloads ook in het analytics-dashboard: elke ZIP-download logt een event (analytics_log_download in _analytics.php; e_c=download, e_a=slug, e_n=slug.zip) onder de nieuwe aparte bron 'download'. dashboard.php bron-filter uitgebreid (Website/Beheer/Downloads/Alles); de events-tabel toont welke ZIP
Versie 1.5
2026-07-02- Privacy Policy, Terms & Conditions en Cookie Policy toegevoegd (tweetalig EN/NL: privacy.html, terms.html, cookies.html + legal.js)
- Cookie-consentbanner (consent.js, opt-in voor statistieken) + footer-links naar de juridische pagina's
- First-party analytics naar GSB shop-beheer-voorbeeld: tracker analytics.js (Matomo-compatibel), collector collect.php -> SQLite buiten de webroot (_analytics.php, gehasht IP)
- Beheerdashboard dashboard.php met analytics-pagina (kerncijfers, Chart.js-grafiek, toppagina's, verwijzers, events; filters bron + periode) achter de beheerderslogin
Versie 1.4
2026-07-02- Skill-README's: klikbare links naar fictieve/relatieve paden (bv. references/mapping.md, ../x/SKILL.md) verwijderd die 404 gaven; externe links blijven. 12 bestaande README's opgeschoond, skill.php strip-t ze bovendien bij het tonen (vangnet voor geuploade/toekomstige skills), en build_skills.py genereert ze voortaan schoon (strip_relative_links)
Versie 1.3
2026-07-02- Derde stap 'Draag een skill bij' + categorie-gebaseerd groeimodel. Poort heeft nu 3 tegels (Inloggen / Toegang aanvragen / Groei je toegang). Aanvraag: keuze uit 1 beschikbare categorie; admin-goedkeuring kent die categorie toe (grant_category). Leden-balk: knop 'Skill toevoegen' -> modal (repo-URL + ZIP + nog niet bezeten categorie) -> submit.php (statische veiligheidscheck: SKILL.md aanwezig, geen exe/sh/bat/ps1 e.d., max 8MB; GEEN server-uitvoering) -> pending. Admin-taak (admin.php #submissions): ZIP-download + repo-link + statische-check-resultaat + Goedkeuren/Afwijzen. Goedkeuren: skill wordt aan de bibliotheek toegevoegd (md_lite readme + skills-index merge via aparte uploaded_skills.json zodat deploys het niet wissen) + categorie toegekend + huisstijl-mail met link om nog een skill te uploaden. Afwijzen: huisstijl-mail met reden. auth.php categories/request_access(category); styles.css v22, skills-auth.js v12, nieuw submit.php
- Bevestigings-/successchermen: dismiss-knop 'Annuleren'/'Cancel' vervangen door 'Oké'/'OK' (nieuwe STR-sleutel ok). Geldt voor: aanvraag verstuurd, skill ingediend, alles-bezeten (skills-auth.js) en review ingediend (reviews.js). Formulier-annuleerknoppen blijven 'Annuleren'. skills-auth.js v13, reviews.js v2
- Na inlog is de 'Groei je toegang'-tegel weer zichtbaar (als kaart onder de skills + in de lege-staat), i.p.v. alleen een knop in de balk. Niet voor beheerders (die hebben alle categorieen al). Balk-knop verwijderd. skills-auth.js v14
- SMTP robuuster: 1x automatische herpoging bij transient connect-fout in smtp_send; login-mailfouten worden gelogd in private/mail_error.log (met SMTP-reden) voor diagnose. Verhelpt sporadische 'login-service niet bereikbaar' (mail_failed) bij provider-hapering
- marcovankatwijk@gmail.com uit SUPER_ADMINS gehaald (alleen admin@ai-host4me.nl blijft super-admin). Daardoor is marcovankatwijk een gewoon lid en onderworpen aan de per-categorie/skill-toegang; ziet na inlog alleen de toegewezen categorie i.p.v. alles. Beheer blijft via admin@ai-host4me.nl
- Knop 'Skill toevoegen' op de 'Groei je toegang'-tegel amber gemaakt (auth-btn primary, zoals Inloggen) i.p.v. ghost, zodat de tegel meer opvalt. skills-auth.js v15
- Favicon vervangen door het logo (binaire-hoofd) op indigo merk-achtergrond, gegenereerd uit images/logo-head.png: favicon.ico (16/32/48), favicon-96x96.png, apple-touch-icon.png (180). Link-tags in index.html/skill.php/cancel bijgewerkt (favicon-skill-patroon); favicon-bestanden aan deploy-set + cancel-shared toegevoegd
Versie 1.2
2026-07-01- Fix NL-vertaling: titelveld van skills 007 en claude-docs-consultant was door de API met extra tekst gevuld (007 kreeg de hele grap-README, claude-docs-consultant een meta-opmerking). Titels hersteld naar '007 — Licence to Audit' en 'Claude Docs Consultant' in translations_nl.json + skills.json; README's/omschrijvingen waren correct
Versie 1.1
2026-07-01- Skill-vertaling (NL/EN), vooraf bij de build: build_skills.py genereert NL-versies (title_nl/description_nl/readme.nl.html) via de Claude API met persistente cache (tools/translations_nl.json), netjes overgeslagen zonder ANTHROPIC_API_KEY. Tegels: vertaalknop rechts naast 'Skill openen' (alleen als has_nl); wisselt titel+omschrijving EN<->NL en zet ?lang op de open-link. skill.php: taalkeuze-toggle (EN|NL) bovenin de header en serveert readme.nl.html bij ?lang=nl. 3 skills nu al vertaald als voorbeeld; rest volgt bij een build met key. styles.css v21, skills-auth.js v11
- NL-vertalingen toegevoegd voor 10 skills (kleinere README's, volledig: titel+omschrijving+readme.nl.html): writing/web-design/project-management + debugging, billing-automation, ide-file-operations, agent-browser, embedding-strategies, aurelius-mapping, qr-code-generator. Opgeslagen in tools/translations_nl.json + skills.json (has_nl). Resterende 38 (grote README's) via de build met ANTHROPIC_API_KEY
Versie 1.0
2026-07-01- Social-proof getal ('Customers Served'/'Klanten bediend') is nu eerlijk: exact aantal gebruikers (goedgekeurde leden via nieuw publiek auth.php?action=stats, alleen de telling) + aantal referenties (reviews op de pagina), i.p.v. het opgeblazen '10K+'. Tooltip toont de uitsplitsing, tweetalig; valt terug op alleen de referenties als de telling niet laadt
- Reviews: ingelogde leden kunnen een review indienen (reviews.php?action=add, sterren+naam+rol+tekst) die als 'pending' wordt opgeslagen (reviews.json, privé). Beheerder keurt goed/af in admin.php (sectie 'Reviews ter goedkeuring', per gebruiker). Goedgekeurde reviews tonen publiek in een carrousel (reviews.js): altijd ~4 zichtbaar incl. de nieuwste, met links/rechts-pijlen. Bestaande 4 reviews als tweetalige seed. Social-proof telt de goedgekeurde reviews als referenties. styles.css v19, reviews.js v1
- Hero: tekstkolom (.hero-copy) van 760->900px zodat de NL-titel op 2 regels valt ('...systeem' op regel 1, 'dat vo//edig werkt' op regel 2) net als de Engelse versie; grote lettergrootte (4.6rem) blijft. Subtekst (.hero-sub) van 520->640px voor langere regels (~breedte tweede titelregel; 4->3 regels). styles.css v20
Versie 9
2026-07-01- Install-box ('Hoe te gebruiken') heeft nu OS-tabs (Windows/macOS/iOS/Android); standaard Windows PowerShell (Copy-Item ...). Bij keuze macOS -> cp -r, iOS/Android -> Claude-app: Customize -> Skills. Label+commando passen zich aan, taalbewust (aih:lang). styles.css ?v=17
- Install-box: kopieerknop met klembord-icoon achter het commando (alleen bij Windows/macOS, niet bij iOS/Android-app-instructie). Kopieert via navigator.clipboard met execCommand-fallback; toont kort een vinkje als feedback. styles.css ?v=18
- Platform-tegels herordend naar dezelfde volgorde als de install-keuze (Windows, macOS, iOS, Android; 'PC'->'Windows', 'Mac'->'macOS'). Klik op een tegel scrollt nu naar de install-box en selecteert direct de bijbehorende OS-tab (data-os) zodat het juiste commando meteen zichtbaar is
Versie 8
2026-07-01- 2FA (Google Authenticator) uitgebreid naar alle leden: na de e-mailcode volgt nu ook voor gewone leden een TOTP-stap; eerste keer enrollment met QR-code, daarna verificatie. auth.php login_verify/login_2fa gegeneraliseerd (pending_2fa i.p.v. pending_admin); UI (skills-auth.js) ondersteunde dit al
- Beheerder-goedkeuring stuurt de klant nu een gebrande welkomstmail (approval_email_html/send_approval_email in _lib.php, vanuit approve_email bij nieuwe goedkeuring): bevestiging + amber knop 'Inloggen & 2FA instellen' + 3-staps uitleg. Gedeelde email_shell voor login- en approval-mail
- E-mails (inlogcode + welkomstmail) nu volledig in het website-palet (Thema F Indigo): donkere surface-kaart (--card #212450) met --border, lichte tekst (--fg), donkere codevakjes en amber accent/knop i.p.v. de eerdere witte opmaak. Gedeelde email_shell aangepast
- E-mail: kaart-body een tint lichter (--card-hover #282C5E) dan de header (--card #212450), zodat de header meer accent/contrast krijgt
- Stap 1 'Hoe te gebruiken' + FAQ q3: verouderde afreken/betaal-tekst vervangen door toegang-aanvragen-met-reden (gratis lidmaatschap, goedkeuring door beheerder -> welkomstmail). Install-commando gecorrigeerd naar 'cp -r ai-host4me-skills/* ~/.claude/skills/' (de /* kopieert de losse skill-mappen direct in de skills-map i.p.v. een wrappermap te nesten). i18n.js ?v=9
- Reviews vervangen door echte bouw-ervaringen: r1/r2 = Oprichter (community-site+RAG met Claude/Delphi; AI-Host4me met Delphi/KAI), r3 = Security-engineer (security-scan+rapport, cross-check), r4 = Ontwikkelaar (2FA + veilige opslag gebruikersnaam). EN+NL. i18n.js ?v=10
- Skills gerubriceerd in 9 categorieen (build_skills.py CATEGORY_MAP + skills.json). Per-gebruiker skill-toegang (opt-in, standaard geen; versleuteld in grants.enc): auth.php?action=skills filtert op toegewezen skills, skill.php/download.php met per-skill 403. Na login categorie-filterbalk (chips) + categorie-tag per tegel (skills-auth.js v9, styles.css v16). Admin-pagina: per lid toegang toewijzen per categorie EN per skill (vinkjes + Alles aan/uit), lege leden zonder toegang. Beheerders altijd alle skills
- Footer-link voor ingelogde beheerder: toont nu 'Beheer' met hyperlink naar admin.php (i.p.v. 'Beheerder uitloggen'). Uitloggen zit nu als knop op de admin-pagina zelf (auth.php?action=logout -> terug naar basis-index)
- CTA-band ('Klaar om van AI een systeem te maken?'): subtekst was links uitgelijnd door .section-sub:not(.center){margin-left:0}; center-class toegevoegd aan titel+subtekst zodat alles gecentreerd staat
- Skills-overzicht onthoudt nu de gekozen categorie + scrollpositie: bij het openen van een skill worden ze in sessionStorage bewaard en na terugkeer (browser terug) hersteld. history.scrollRestoration op manueel; scroll-herstel eenmalig via dubbele requestAnimationFrame. skills-auth.js v10
Versie 7
2026-07-01- Bewegende sterrenhemel-achtergrond (3 parallax-lagen, vallende sterren, nevel) op alle pagina's: index, cancel, skill-detail en beheer; respecteert prefers-reduced-motion
- Inlogcode-e-mail is nu een gebrande HTML-mail (multipart/alternative met platte-tekst-fallback): indigo header-band met logo + merknaam, code in losse cijfervakjes, AI-Host4me-kleuren
- Inlogcode-mail: begroeting vervangen door 'Welkom'
Versie 6
2026-07-01- Opzegpagina: codestap vernieuwd naar OTP-scherm (6 losse cijfervakjes met auto-doorspringen, plakken, backspace), 'Opnieuw sturen over M:SS'-aftelling (60s) en Verify-knop. Tweetalig. cancel-app.js ?v=2, styles.css ?v=13 (.otp-*).
- OTP-codescherm doorgetrokken naar leden-login en beheerderslogin: e-mailcode (step2, met 'Opnieuw sturen'-aftelling) en 2FA-code (step3, zonder resend) gebruiken nu losse cijfervakjes (auto-doorspringen/plakken/backspace) + Verify-knop. Gedeelde buildOTP/startResend-helpers. styles.css ?v=14, skills-auth.js ?v=8.
Versie 5
2026-07-01- Beheerderslogin onderaan de site (footer-knop) met 2FA (TOTP / Google Authenticator): na de e-mailcode volgt voor beheerders een 6-cijferige TOTP-stap. Eerste keer enrollment met setup-sleutel (handmatig in Authenticator), daarna verificatie. TOTP-secrets per beheerder AES-versleuteld (totp.enc, zelfde LIST_KEY). TOTP geverifieerd tegen RFC 6238-testvectoren. auth.php: login_verify -> need_2fa voor admins + login_2fa. styles.css ?v=8, i18n.js ?v=5, skills-auth.js ?v=2.
- 2FA-enrollment met QR-code: zelf-gehoste qrcode-generator (vendor/qrcode.js, MIT) rendert de otpauth-URI lokaal in de browser tot een scanbare QR voor Google Authenticator (geheim verlaat de browser niet). Handmatige setup-sleutel blijft als fallback. styles.css ?v=9, skills-auth.js ?v=3.
- Skill 'qr-code-generator' toegevoegd aan mkatwi/Claude_Skill_library en skills-bibliotheek herbouwd (47 -> 48 skills).
- Beheerderslogin gehard: geen default e-mail (handmatig invullen); alleen admin@ai-host4me.nl is geldig, anders melding 'geen geldig e-mailadres' + logo wordt rood (.brand-img.is-error). Server-side lockout per IP: 5 mislukte pogingen -> 15 min, daarna +5 -> 1 uur (anti-phishing/brute-force). Geldt ook voor het admin-adres via de gewone login-route. styles.css ?v=10, skills-auth.js ?v=4.
- Niet-goedgekeurd adres bij leden-login toont nu een nette pop-up met het logo + tekst 'Je adres is nog niet goedgekeurd — vraag toegang aan' (EN/NL) en een knop Toegang aanvragen. styles.css ?v=11, skills-auth.js ?v=5.
- Footer-knop dynamisch: ingelogde beheerder ziet 'Beheerder uitloggen' (klik = uitloggen) i.p.v. 'Beheerderslogin' (EN/NL, taalwissel-bewust). Uitloggen werkt ook via skills-balk en detailpagina; auth.php?action=logout redirect bij browser-navigatie -> terug naar index.html (JSON bij fetch). styles ongewijzigd; i18n.js dispatcht nu aih:lang-event; skills-auth.js ?v=6, i18n.js ?v=6.
- Fix: gewone leden-login stuurt alleen een code als het adres in de goedgekeurde ledenlijst staat (nieuwe is_member()). Config-beheerders (SUPER_ADMINS) zijn niet langer auto-toegelaten via de leden-login; zij gebruiken de beheerderslogin. Voorheen kreeg een beheerder-adres (bv. marcovankatwijk@gmail.com) onterecht een code via de leden-login.
- Gate-kaarten + skills-app reageren nu op taalwissel: bij omschakelen wordt de skills-sectie (Alleen voor leden / Nog geen account, en de skill-tegels/modals) opnieuw gerenderd in de gekozen taal (EN/NL). De Engelse teksten bestonden al; ze werden alleen niet toegepast bij wisselen. skills-auth.js ?v=7.
- Opzegpagina cancel.ai-host4me.nl nagemaakt (naar voorbeeld cancel.zenithforge.pro): 3-staps flow (e-mail -> code -> bevestigen opzeggen) in het AI-Host4me-thema, tweetalig EN/NL. Eigen e-mailcode-login; nieuwe auth.php?action=cancel laat een lid zichzelf uit de ledenlijst verwijderen. Eigen kopie van de PHP-backend op het subdomein met PRIVATE_ROOT -> hoofd-privé, zodat het dezelfde (productie-)ledenlijst gebruikt. Nieuwe deploy-actie 'version.py cancel'.
- Tekst: 'Abonnement opzeggen' -> 'Lidmaatschap opzeggen' (NL) en 'Cancel Subscription' -> 'Cancel membership' (EN) in footer-link en FAQ. i18n.js ?v=7.
- FAQ-vraag 6 vervangen door lidmaatschap-bewoording: 'Hoe zeg ik mijn lidmaatschap op?' / 'How do I cancel my membership?' met uitleg dat lidmaatschap gratis is (geen abonnement/verlenging/betaling) en altijd op te zeggen via cancel.ai-host4me.nl. i18n.js ?v=8.
Versie 4
2026-06-30- Staging-deploy toegevoegd: 'version.py staging' zet de werkmap (pre-release, vN-pre) naar het test-subdomein via DEPLOY_STAGING_ROOT, los van productie (incl. privé-skills in staging-privé-map).
- Login-mails via EIGEN SMTP i.p.v. savva.tech: zelf-gehoste passwordless e-mailcode (PHP genereert/verifieert in sessie, 10 min geldig), verstuurd via eigen SMTP (smtp_send in _lib.php), afzender noreply@ai-host4me.nl. SMTP-gegevens uit de lokale deploy-config naar server-side _secrets.php (niet in git). savva.tech is uit de loginflow.
- Geheime e-maillijst: de toegang-allowlist staat nu AES-256-GCM VERSLEUTELD (allowed.enc, onleesbaar zonder de sleutel). Nieuwe beheer-API list-api.php (list/add/remove) beveiligd met de geheime sleutel via X-List-Key header (Bearer kan ook waar header doorkomt). LIST_KEY uit deploy-config -> _secrets.php. admin.php beheert dezelfde versleutelde lijst. Migreert bestaande allowed.json automatisch.
- Beheerder admin@ai-host4me.nl toegevoegd aan SUPER_ADMINS (altijd toegelaten + beheerrechten: admin.php + lijstbeheer). Inloggen via e-mailcode naar admin@ai-host4me.nl.
Versie 3
2026-06-30- Deploy-fix: i18n.js en images/logo-head.png ontbraken in de deploy-set (waren niet mee in v2); toegevoegd aan push.py/version.py. SFTP-helper maakt nu submappen aan (mkdir -p, voor images/).
- NL hero-woordgrap: 'dat vo//edig werkt' (volledig, // in amber) — Nederlands equivalent van het Engelse Actua//y. i18n.js cache-buster ?v=2.
- Skills-bibliotheek toegevoegd uit repo mkatwi/Claude_Skill_library (47 skills): tegel per skill (#skills) met naam + SKILL.md-samenvatting, klik -> detailpagina met volledige README (markdown gerenderd) + ZIP-download. Build-script tools/build_skills.py (cloned repo, genereert ZIPs+pagina's+tegels). Deploy-set neemt skills/** + data/skills.json mee. styles.css ?v=6, i18n.js ?v=3.
- Skills achter login (server-side, PHP-poort op TransIP): privé-opslag BUITEN de webroot, alleen via PHP na login. Login via users-service e-mailcode (/auth/email + /auth/code, server-side), met allowlist-goedkeuring. #skills toont ingelogd de tegels, anders een inlog- en een aanvraag-tegel (aanvraagformulier -> mail naar agent@ai-host4me.nl + admin.php om goed te keuren). Nieuwe bestanden: _config.php/_lib.php/auth.php/skill.php/download.php/admin.php/skills-auth.js. styles.css ?v=7, i18n.js ?v=4.
Versie 2
2026-06-30- Pre-release changelog-workflow toegevoegd: note/pending/prerelease/release; live site toont vN-pre tijdens testen
- Nieuw kleur-/typethema 'Indigo': bg #181A38, surface #212450, border #313566, accent amber #F4B560; koppen Plus Jakarta Sans, tekst Inter (i.p.v. zwart + Space Grotesk)
- Nieuw logo: binaire-code mensenhoofd (images/logo-head.png), herkleurd naar amber met transparante achtergrond; in header naast woordmerk. Favicon blijft de amber-spark (leesbaar op 16px).
- Schrijfwijze merknaam aangepast: ai-host4me -> AI-Host4me (titel, header, footer, meta). URLs/e-mail/paden blijven lowercase.
- Logo-hoofd vergroot (52px) en klikbaar gemaakt: klik toont popover met naam 'Agent' + mail-link agent@ai-host4me.nl. CSS/JS cache-buster ?v=2 toegevoegd.
- Agent-popover tekst: 'Hello, I am Agent, contact me for AI questions.' + mail-link; kleiner lettertype (~12.5px) en compacter (max 230px) zodat de popup de site niet bedekt. styles.css cache-buster ?v=3.
- Agent-popover iets breder (max 260px) + mail-link white-space:nowrap zodat agent@ai-host4me.nl op één regel past. styles.css cache-buster ?v=4.
- Site tweetalig gemaakt (EN/NL): data-i18n-sleutels op alle teksten, nieuwe i18n.js met NL-vertalingen, taalkiezer (globe + dropdown) in header. Keuze onthouden in localStorage, detecteert browsertaal; titel/meta vertalen mee. styles.css ?v=5, i18n.js ?v=1.
Versie 1
2026-06-30- Eerste publieke versie: ai-host4me Claude Skills Library — hero, platformkaarten, capabilities, how-to, reviews, FAQ, footer. Versie-tracker ingebouwd.