No description
  • Astro 60.3%
  • JavaScript 21.1%
  • TypeScript 10.4%
  • CSS 6.3%
  • PHP 1.9%
Find a file
2026-10-06 15:02:46 +00:00
.vscode Nieuwe site: Astro + Keystatic, content gemigreerd uit WordPress 2026-07-10 12:53:45 +02:00
example Bladvorm carrouselfoto exact volgens origineel 2026-07-10 14:37:58 +02:00
public Foto's home en contact via Astro optimaliseren i.p.v. onbewerkt uit public/ 2026-07-12 17:39:31 +02:00
scripts Hosting omgezet naar eigen server met Caddy 2026-07-11 13:30:22 +02:00
server Todo's in README: uptime-monitoring en DDoS-noodplan 2026-07-12 09:34:00 +02:00
src correctie font vorige/volgende knoppen 2026-07-12 20:49:48 +02:00
.gitignore Deploy-doel omgezet naar Strato + Forgejo 2026-07-10 13:04:06 +02:00
AGENTS.md Nieuwe site: Astro + Keystatic, content gemigreerd uit WordPress 2026-07-10 12:53:45 +02:00
astro.config.mjs Update astro.config.mjs 2026-10-06 15:02:46 +00:00
CLAUDE.md Nieuwe site: Astro + Keystatic, content gemigreerd uit WordPress 2026-07-10 12:53:45 +02:00
keystatic.config.ts Foto's home en contact via Astro optimaliseren i.p.v. onbewerkt uit public/ 2026-07-12 17:39:31 +02:00
package-lock.json Deployscript omgezet naar SFTP (Strato SSH-host) 2026-07-11 06:14:48 +02:00
package.json Deployscript omgezet naar SFTP (Strato SSH-host) 2026-07-11 06:14:48 +02:00
README.md Todo's in README: uptime-monitoring en DDoS-noodplan 2026-07-12 09:34:00 +02:00
tsconfig.json Nieuwe site: Astro + Keystatic, content gemigreerd uit WordPress 2026-07-10 12:53:45 +02:00

zorgalgoritmen.nl

Statische website van het Expertisecentrum Zorgalgoritmen, gebouwd met Astro en Keystatic. Vervangt de eerdere headless-WordPress-opzet.

Architectuur

Forgejo-repo (forgejo.ezamonitoring.nl)
     ▲
     │ commits (Keystatic op /keystatic tijdens dev, of direct in Markdown)
     ▼
git push ──▶ op de Hetzner-server: git pull && npm run build
                  └─▶ Caddy serveert dist/ op www.ezamonitoring.nl
  • Content staat als Markdown en JSON in de repo (versiebeheerd, geen database):
    • src/content/nieuws/ — nieuwsartikelen (frontmatter: title, pubDate, excerpt, cover)
    • src/content/paginas/ — contentpagina's (wat-we-doen, over-ons, werken-bij, privacy, disclaimer, cookieverklaring)
    • src/data/ — sitegegevens, homepage- en contactpagina-instellingen
  • Schema's: src/content.config.ts (Astro, met Zod-validatie) en keystatic.config.ts (admin UI) beschrijven dezelfde velden — houd ze samen in sync.
  • Styling: Tailwind CSS 4; het kleurenpalet en de fonts staan in src/styles/global.css (@theme).
  • Formulier: het contactformulier wordt afgehandeld door public/contact.php (PHP mail() via php-fpm + msmtp op de Hetzner-server). Ontvanger en afzender staan bovenin dat bestand.
  • Keystatic draait alleen tijdens npm run dev (zie astro.config.mjs); de productie-build is statisch (plus het ene PHP-bestand voor het formulier).

Commando's

Commando Actie
npm install Dependencies installeren
npm run dev Dev-server op localhost:4321, CMS op /keystatic
npm run build Productie-build naar ./dist/
npm run preview Build lokaal bekijken
npm run deploy Bouwen én uploaden via SFTP (alternatief; de git-route hieronder is leidend)

Content bewerken

  1. npm run dev
  2. Open http://localhost:4321/keystatic
  3. Bewerk nieuws, pagina's of sitegegevens — wijzigingen worden als bestanden opgeslagen
  4. Commit en push naar Forgejo; publiceer op de server met git pull && npm run build

Direct Markdown bewerken in src/content/ kan uiteraard ook.

Later — redacteuren zonder lokale setup: schakel Keystatic om naar GitHub mode (storage: { kind: 'github' }). Redacteuren bewerken dan via de browser; wijzigingen worden commits.

Hosting: Hetzner-server met Caddy

De site draait op een eigen Hetzner-server. Caddy serveert /home/bverhoeff/projects/ezawebsite/dist.

Publiceren (de normale route): lokaal committen en pushen, daarna op de server

git pull && npm run build

Serverkant (eenmalig): zie server/Caddyfile.voorbeeld voor het Caddy-blok (statische site + eigen 404 + caching + beveiligingsheaders) en server/msmtprc.voorbeeld voor mailbezorging van het contactformulier. De hardening van de server (firewall, SSH, fail2ban, automatische updates) staat beschreven in server/hardening.md. Benodigde pakketten op de server:

  • Caddy — serveert dist/, automatische HTTPS
  • php-fpm — alleen voor contact.php (het formulier)
  • msmtp-mta — laat PHP mail() versturen via de Strato-SMTP-relay (poort 587/STARTTLS; Hetzner blokkeert 465)

Alternatief — SFTP-upload met npm run deploy: maak eenmalig een .env-bestand in de projectroot (staat in .gitignore):

DEPLOY_HOST=<hetzner-server>
DEPLOY_USER=<ssh-gebruiker>
DEPLOY_KEY=C:\Users\<jij>\.ssh\id_ed25519
DEPLOY_DIR=/home/bverhoeff/projects/ezawebsite/dist

(DEPLOY_PASS=<wachtwoord> kan ook, maar een sleutel heeft de voorkeur.)

Nog te doen

  • Uptime-monitoring: gratis monitor (bijv. UptimeRobot, of Uptime Kuma op een van de andere servers) die www.ezamonitoring.nl elke paar minuten checkt en mailt bij een storing — zodat een verstoring opvalt zonder er zelf naar te kijken.
  • Noodplan bij DDoS: vooraf niets instellen (Hetzner filtert volumetrische aanvallen al en de statische site is zelf robuust), maar bij een echte aanval Cloudflare voor de site zetten (DNS-wijziging, ±1 uur werk). Zie ook server/hardening.md voor de afweging en de overige openstaande punten (SPF/DKIM/DMARC, externe scan).

Versiebeheer (Forgejo)

De repo staat op https://forgejo.ezamonitoring.nl/bverhoeff/ezawebsite.git (branch main).

Migratie

scripts/migrate.mjs heeft de content eenmalig opgehaald uit de oude WordPress-API (cms.zorgalgoritmen.nl/wp-json). Het script kan opnieuw draaien (node scripts/migrate.mjs) zolang de oude site online is; daarna kan het verwijderd worden.