Commit Graph
20 Commits
Author SHA1 Message Date
Jordy Hoogeveen 624f51679a bugfix 2026-09-10 15:40:27 +02:00
Jordy HoogeveenandClaude Opus 5 4e923fa998 Versienummer naar 1.0.2-dev voor de volgende cyclus
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 14:44:24 +02:00
Jordy HoogeveenandClaude Opus 5 857322a490 Tokendocumentatie terug naar één werkstation-token
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 14:30:18 +02:00
Jordy HoogeveenandClaude Opus 5 6fd4f4766b Versie 1.0.1 in README-badge en frontend, changelog vrijgegeven
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 14:16:09 +02:00
Jordy Hoogeveen 1b14553417 bugfixes 2026-09-10 14:03:34 +02:00
Jordy Hoogeveen 09cc6ae488 Versie 1.0.0 in package.json en README-badge, no-store op de API 2026-09-09 21:59:18 +02:00
Jordy Hoogeveen 71cb9b9449 bugfixes and final release 2026-09-09 17:36:34 +02:00
Jordy Hoogeveen 51f876efd3 bugfix 2026-09-09 12:43:11 +02:00
Jordy Hoogeveen dbdb3ecfc3 Droogloop van release.ps1 laat de working tree ongemoeid 2026-09-09 11:25:35 +02:00
Jordy Hoogeveen 2a4edee192 Favicon-caching en 404 op ontbrekende statische bestanden 2026-09-09 11:04:26 +02:00
Jordy Hoogeveen 1d1ab487d9 bugfix test 2026-09-08 22:09:28 +02:00
Jordy HoogeveenandClaude Opus 5 081820dfd6 release.ps1 respecteert core.sshCommand bij de origin-controle
Het script zette GIT_SSH_COMMAND hard op "ssh", waarmee het de al
geconfigureerde core.sshCommand overschreef. Op Windows praat alleen de
OpenSSH van het systeem met de ssh-agent; Git's eigen ssh niet. Afhankelijk
van de PATH-volgorde faalde de controle daardoor met "Permission denied"
terwijl git zelf prima kon pushen.

Nu wordt core.sshCommand als basis gebruikt (met "ssh" als fallback) en
worden alleen BatchMode en ConnectTimeout toegevoegd.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 23:40:24 +02:00
Jordy HoogeveenandClaude Opus 5 cb98262698 Leesbare foutmeldingen in release.ps1 in plaats van een stacktrace
Invoke-Cmd gooide bij een fout een exception, waardoor je een PowerShell-
stacktrace met het volledige buildx-commando kreeg en de eigenlijke oorzaak
(401 van de registry) wegviel.

- Invoke-Cmd meldt nu "Mislukt: <commando> (exitcode N)" en stopt met exit 1
- Optionele -Uitleg scriptblock per stap: de push-stap test opnieuw of je op de
  registry bent ingelogd en geeft dan de docker login-instructie; de tag-push
  wijst naar git ls-remote en het https-alternatief
- De preflight-meldingen zijn gewone gekleurde regels in plaats van
  Write-Error, dus geen "Write-Error:" voorvoegsel meer
- Elke afbreking sluit af met "Er is niets gepubliceerd."

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 22:56:19 +02:00
Jordy HoogeveenandClaude Opus 5 50ed671e97 Release-script controleert registry-login en origin vóór de build
De release strandde pas na een volledige multi-arch build op
"401 Unauthorized" van de registry, en bleef daarvoor minuten hangen op een
SSH-wachtwoordprompt bij de tag-controle. Beide checks staan nu vooraan.

- Stap 1 heet nu "Controles (tags + registry-login)" en test achtereenvolgens:
  bestaat de tag al lokaal, is origin bereikbaar, bestaat de tag al op origin,
  bestaat het image al, en is er een geldige registry-login
- Registry-login: wanneer REGISTRY_USER en REGISTRY_TOKEN (of GITEA_TOKEN)
  gezet zijn logt het script zelf in via --password-stdin, anders stopt het met
  instructies. dev.ps1 push doet dezelfde controle
- Git draait met GIT_SSH_COMMAND="ssh -o BatchMode=yes -o ConnectTimeout=10",
  dus geen hangende prompts meer; bij geen toegang een uitleg met het
  https-alternatief
- Scripts eindigen expliciet met exit 0 (anders lekt de exitcode van het
  laatste docker-commando door), en een -DryRun meldt in de slotregel dat er
  niets is gepubliceerd
- BEHEER.md: registry-login met token en de REGISTRY_USER/REGISTRY_TOKEN route

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 22:47:48 +02:00
Jordy Hoogeveen 1bf31f04eb Change to 2 container 1 app and 1 database 2026-09-04 12:56:31 +02:00
Jordy HoogeveenandClaude Opus 5 9566e17f90 Azure DevOps pipeline verwijderd
Wordt niet gebruikt. azure-pipelines.yml is weg, en de verwijzingen ernaar
in README.md, BEHEER.md (sectie CI/CD), Changelog.md en .dockerignore zijn
opgeruimd. De testsuite draait onveranderd lokaal via test.ps1 / test.sh.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 12:24:22 +02:00
Jordy HoogeveenandClaude Opus 5 1c0eed61f6 Dependencies naar de nieuwste versies + update-check in de testsuite
Upgrades
- Frontend: React 19.2, Vite 8.2, @vitejs/plugin-react 6.1, ESLint 9.39
- Backend: Express 5.2, Helmet 8.3, express-rate-limit 8.7, pino 10.3,
  pino-http 11, pg 8.23, dotenv 17.4, bcryptjs 3.0, ESLint 10.9
- Lockfiles opnieuw gegenereerd (backend had er geen)

Breaking changes opgevangen
- Express 5 laat kale wildcards in routes niet toe: app.use("/api/*") is een
  prefix-mount geworden en app.get("*") pad-loze middleware
- Vite 8 bundelt met Rolldown, dat de object-vorm van manualChunks niet kent;
  omgezet naar build.rollupOptions.output.advancedChunks
- Rate-limit headers verschillen per RFC-draft; de test kijkt nu naar de hele
  RateLimit-headerfamilie in plaats van naar RateLimit-Limit
- ESLint blijft in de frontend op 9: eslint-plugin-react ondersteunt nog geen
  ESLint 10 (peer <= ^9.7)

Update-check bij het testen
- docker/check-updates.mjs vergelijkt beide package.json's met het
  npm-register; werkt zonder node_modules en zonder npm install
- test.ps1 draait dit als stap 1 van 4, met -Strict (falen) en -SkipDeps
  (offline). Ook informatief in de Test-stage van de pipeline
- Bewuste uitzonderingen met reden in docker/update-exceptions.json
- dev.ps1 up gebruikt --renew-anon-volumes, anders houdt de dev-container de
  oude node_modules na een upgrade

Overig
- ESLint flat configs voor beide packages; npm run lint werkte niet omdat er
  geen configuratie was. Beide draaien nu groen (alleen waarschuwingen over
  bestaande ongebruikte variabelen)
- README.md, BEHEER.md en Changelog.md bijgewerkt

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 12:21:06 +02:00
Jordy HoogeveenandClaude Opus 5 bfec3a25f3 Migratie naar 2-container opzet (app + database)
De Express-app serveert nu zelf de gebouwde Vite-frontend op / met een
SPA-fallback naar index.html; de aparte nginx-container is vervallen.
Bedoeld voor self-hosting op een Raspberry Pi: één image, één origin,
geen interne proxy en geen CORS tussen frontend en API.

Docker
- Nieuwe multi-stage Dockerfile in de root met targets test, development
  en production; frontend/Dockerfile, frontend/nginx-spa.conf en
  backend/Dockerfile verwijderd
- docker-compose.yml: alleen app + postgres, app publiceert APP_PORT
  (standaard 3400) naar containerpoort 3001
- docker-compose.dev.yml: dev-container draait API (node --watch) en de
  Vite dev-server samen via docker/dev-entrypoint.sh, hot reload intact
- .dockerignore, .env.example, .gitignore en .gitattributes toegevoegd

Backend
- express.static + SPA-fallback op STATIC_DIR (default /app/public), met
  immutable caching voor gehashte assets en no-store voor index.html
- Rate limiting alleen nog op /api — statische bestanden liepen anders na
  200 requests tegen de limiet aan
- Helmet CSP toegespitst op wat de frontend laadt (Google Fonts, inline
  styles, base64-avatars); upgrade-insecure-requests uit voor intern http
- Schema-init verplaatst naar initDb(), niet meer bij import van db.js

Tests en CI/CD
- backend/test/app.test.js: 11 tests (node --test) voor API-routes,
  SPA-fallback, cache- en security-headers, zonder database
- test.ps1 / test.sh: backend-tests, productiebuild en smoketest op de
  echte app + postgres stack
- azure-pipelines.yml: Test -> Build (incl. smoketest) -> Publish
  (multi-arch amd64 + arm64, alleen op main/master of een tag)

Scripts en documentatie
- dev.ps1/dev.sh met targets app en postgres, acties logs en test;
  dev.ps1 up wist de dev-database niet langer (alleen dev.ps1 down)
- release.ps1/release.sh bouwen één image voor amd64 + arm64 en draaien
  de testsuite vóór het publiceren
- README.md en BEHEER.md bijgewerkt voor de nieuwe structuur

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 11:51:29 +02:00
Jordy HoogeveenandClaude Opus 5 3c67381de9 Donut-hover met percentages en werkende update-notificatie
- Donut: naadloze segmenten (donkere spleten weg), hover-tooltip per
  categorie met naam, bedrag en aandeel, middenwaarde schaalt mee
- Update-check via de eigen backend (/api/update-check) i.p.v. direct
  naar de Gitea API, die geen CORS-headers stuurt
- Semver-vergelijking, herhaalde check en release-notes in de melding
- release.ps1 maakt de Gitea-release aan (stap 4)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 09:19:23 +02:00
Jordy HoogeveenandClaude Opus 5 e45d5b73fb Initiële commit: VibeFinance 3-container opzet
Basislijn van de bestaande applicatie (Vite/React frontend, Express
backend, PostgreSQL) zoals die in de index stond, plus dev-, release-
en documentatiescripts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-04 09:19:14 +02:00