Freeze-check
Korte go/no-go vóór taak 2.1. Geen nieuwe fase, geen herschrijving, geen extra features. Doel: bevestigen dat het handmatige pad nog groen is, en dat bekende vallen vastliggen voordat provisioning ze automatiseert.
Tijdbox: ruim een half uur. Faalt iets in A–C, dan eerst dat herstellen. D is noteren, niet oplossen.
Tenants in scope: pilot (pilot.okhema.studio) en rb-media
(rbmedia.okhema.studio). verify heeft naast DATABASE_URL de vier
build-vars nodig (S3_BUCKET, S3_REGION, S3_PUBLIC_URL,
S3_FORCE_PATH_STYLE); die staan niet in de runtime-env van de container.
Tunnel: Deploy.
A. Live nog groen (~10 min)
Section titled “A. Live nog groen (~10 min)”Per tenant, geen SKIPs op media (beide sites hebben media):
-
verify --http https://pilot.okhema.studio --json→ alles PASS -
verify --http https://rbmedia.okhema.studio --json→ alles PASS -
curl -Iop apex énadmin.van beide tenants: HTTP 200, geldig certificaat -
/robots.txttoontSitemap: https://<SITE_DOMAIN>/sitemap.xmlop beide
DATABASE_URL='…' S3_BUCKET=… S3_REGION=auto S3_PUBLIC_URL=… S3_FORCE_PATH_STYLE=false \ pnpm --filter @platform/ops run verify -- --http https://<domein> --jsonB. Klantpad (~15 min)
Section titled “B. Klantpad (~15 min)”PRD-succescriterium: de site is opleverbaar en content is zelfstandig te beheren. Muteren mag op pilot. Op rb-media alleen kijken, geen theme of content wijzigen zonder de klant.
Op admin.pilot.okhema.studio:
- Inloggen als admin
- Primary-kleur wijzigen → publieke site verandert zonder rebuild
- Nieuwsbericht publiceren → binnen een paar seconden live (richtgetal: < 2 s)
- Contactformulier insturen → rij in
form_submissionsén echte mail in inbox - Wachtwoordreset aanvragen → echte resetmail in inbox (
mail.tsfaalt stil)
Op admin.rbmedia.okhema.studio:
- Klant-admin kan inloggen — loginpagina 200, admin-account met wachtwoord bestaat; sessie niet zelf geopend
- Bestaande pagina’s, media en navigatie zijn zichtbaar in het CMS
- Geen mutatie
C. Backups nog levend (~10 min)
Section titled “C. Backups nog levend (~10 min)”Geen alarmering (hoort bij 4.4). Iemand moet kijken.
Op de VPS:
-
/var/lib/media-backup/last-successjonger dan 26 u (cron15 3 * * *UTC) -
/var/lib/dump-verify/last-successvan de 1e van deze of vorige maand (cron0 4 1 * *UTC — ouder dan een dag is normaal) - Coolify per-database-planning bevat
tenant_piloténtenant_rb-media(dump-all dekt nieuwe tenants; deze lijst niet automatisch) - Nieuwste per-database-
.dmpvan vannacht bestaat voor beide tenants
stat -c '%y %n' /var/lib/media-backup/last-success /var/lib/dump-verify/last-successD. Schuld voor 2.5 — vastleggen, niet fixen (~5 min)
Section titled “D. Schuld voor 2.5 — vastleggen, niet fixen (~5 min)”Elk punt: gezien, en of het in 2.5/2.9 moet landen. Geen tickets nu, tenzij A–C faalt dóór dit punt.
- Eerste deploy: Coolify slaat
node /app/scripts/migrate.mjsover zonder draaiende container en meldt tóch “finished”. Provisioning moet migreren nádat de container bestaat, of de eerste keer zelfdocker execen. -
mail.tsfaalt stil zonder Resend-config; een groene container bewijst geen mail. - Geen gebruikersbeheer-UI; accounts via
create-user/--reset-password. Geen verplichte wachtwoordwijziging bij eerste login. -
SHOW max_connections;op de Coolify-Postgres is daadwerkelijk200(kaart 3 noemde dit nog als nakijken). - Per-database-backuplijst is een handmatige stap bij elke nieuwe tenant; dump-all is het vangnet tot die lijst is bijgewerkt.
Klaar wanneer
Section titled “Klaar wanneer”A–C groen, D ingevuld. Daarna 2.1. Niet wachten op fontstrategie, dark-logo, secret-rotatie of backup-alarmering — die staan bewust later.
Uitgevoerd 17 augustus 2026
Section titled “Uitgevoerd 17 augustus 2026”Uitkomst: 2.1 mag starten. Twee restpunten, geen productgaten.
Beide verify --http --json volledig PASS, geen SKIPs. Apex 200, admin. 302 → /login
(verwacht zonder sessie), Let’s Encrypt tot 9/11 nov 2026. robots.txt toont de
juiste sitemap op beide.
Pilot: ingelogd als tijdelijke admin freeze-check@okhema.studio (daarna
verwijderd). Primary via CMS van #ff0000 → #0ea5e9 → publieke CSS mee,
daarna teruggezet naar #ff0000. Nieuws freeze-check-17-aug-2026 live in
148 ms. Contactinzending + Resend-id f8507257-… naar
michaelvg94@gmail.com; resetmail Resend-id 3bdb8d7b-… naar hetzelfde adres.
Kijk even in die inbox — de container logt verzenden, niet aankomst.
rb-media: geen mutatie. Publieke site, /nieuws, logo via /_image,
loginpagina 200, admin mvangorkum@rb-media.nl met credential-account. Zelf
even inloggen in het CMS om dat hokje af te vinken.
Media-stamp 17 aug 03:15 UTC (4,8 u oud). Dump-verify-stamp 12 aug 14:17 UTC
(rehearsal; cron 0 4 1 * * heeft nog nooit gedraaid, /var/log/dump-verify.log
is leeg, volgende run 1 sep). VERIFY_TENANTS default is alleen tenant_pilot.
Per-database-planning stond op postgres,tenant_pilot — tenant_rb-media
ontbrak sinds go-live 13 aug. Hersteld in Coolify
scheduled_database_backups.id=2 naar
postgres,tenant_pilot,tenant_rb-media. Dump-all van vannacht bevat beide
databases. Eerste per-database-.dmp voor rb-media volgt 30 3 * * * UTC
(nacht van 17 op 18 aug).
D — wat 2.5 moet kennen
Section titled “D — wat 2.5 moet kennen”- Eerste Coolify-deploy slaat pre-deployment
migrate.mjsover. Ongewijzigd. mail.tslogt nu hard in de container, maar het contactformulier blijft 200 als mail niet gaat. Een healthy container bewijst geen inbox.- Geen gebruikersbeheer-UI; deze check had
create-usernodig. max_connections=200bevestigd op de Coolify-Postgres.- Per-database-backuplijst is handwerk. Deze freeze-check liep erin: dump-all
dekte rb-media, de restore-bron (
.dmp) niet. 2.5 moet die lijst bijwerken of alleen op dump-all + operator-backup leunen.
Extra, buiten de checklist
Section titled “Extra, buiten de checklist”www.rbmedia.okhema.studioheeft geen DNS.www.pilotredirect wel (307). Apex +admin.werken. Voor een echt klantdomein later welwwwmeenemen.