diff --git a/Changelog.md b/Changelog.md index 5f017c2..920eeee 100644 --- a/Changelog.md +++ b/Changelog.md @@ -2,6 +2,19 @@ ## [Niet vrijgegeven] +### Gewijzigd +- Het label bij een beschikbare update in "Over VibeFinance" is "Nieuwe versie" + (was "Nieuwste versie" in 1.0.0) + +### Opgelost +- API-antwoorden sturen nu `Cache-Control: no-store`. Ze hadden alleen een + `ETag` en geen cache-beleid, waardoor de browser zelf mocht bepalen hoe lang + hij ze hergebruikte — per browser en profiel verschillend. Gevolg: de + update-melding bleef in Brave op een oud antwoord hangen (nog van vóór het + werkende token) terwijl een verse Edge het goede kreeg + +## [1.0.0] - 2026-09-09 + ### Gewijzigd - `BEHEER.md` heeft één centrale `## Tokens`-sectie met het tweetoken-model (werkstation `write:*`, Docker-host `read:*`) plus de betekenis van een 401, diff --git a/README.md b/README.md index 87e3139..bd0d0f1 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Eigen vermogen · Schulden · Voortgang · Gebruikersbeheer ![Node.js](https://img.shields.io/badge/Node.js_22-339933?style=flat&logo=node.js&logoColor=white) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL_18-4169E1?style=flat&logo=postgresql&logoColor=white) ![Docker](https://img.shields.io/badge/Docker_Compose-2496ED?style=flat&logo=docker&logoColor=white) -![Version](https://img.shields.io/badge/versie-0.1.9-8b5cf6?style=flat) +![Version](https://img.shields.io/badge/versie-1.0.0-8b5cf6?style=flat) ![Built with Claude](https://img.shields.io/badge/Gebouwd_met-Claude.ai-8b5cf6?style=flat&logo=anthropic&logoColor=white) VibeFinance dashboard diff --git a/backend/src/server.js b/backend/src/server.js index 20685f4..2a7fdc7 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -56,6 +56,17 @@ if (config.NODE_ENV !== "test") { app.use(pinoHttp({ logger })); } +// ── Geen browsercache op de API ─────────────────────────────────────────────── +// Zonder Cache-Control mag de browser zelf bepalen hoe lang hij een antwoord +// hergebruikt (heuristische caching). Dat verschilt per browser en profiel: de +// update-melding bleef in de ene browser op een oud antwoord hangen terwijl een +// verse browser het goede kreeg. API-antwoorden zijn per gebruiker en per moment, +// dus die horen nooit uit de cache te komen. +app.use("/api", (_req, res, next) => { + res.setHeader("Cache-Control", "no-store"); + next(); +}); + // ── API-routes ──────────────────────────────────────────────────────────────── app.use("/api/health", healthRouter); app.use("/api/update-check", updateRouter); diff --git a/backend/test/app.test.js b/backend/test/app.test.js index 9e846ca..b24c9ec 100644 --- a/backend/test/app.test.js +++ b/backend/test/app.test.js @@ -68,6 +68,15 @@ describe("API", () => { assert.equal(body.latest, null); assert.equal(body.disabled, true); }); + + // Zonder expliciete header bepaalt de browser zelf hoe lang hij een + // API-antwoord hergebruikt, en dat verschilt per browser. + it("API-antwoorden komen nooit uit de browsercache", async () => { + for (const pad of ["/api/health", "/api/update-check", "/api/bestaat-niet"]) { + const res = await fetch(`${basis}${pad}`); + assert.match(res.headers.get("cache-control") ?? "", /no-store/, pad); + } + }); }); describe("Frontend serveren", () => { diff --git a/frontend/src/components/NavBar.jsx b/frontend/src/components/NavBar.jsx index ab7daa4..47b95e7 100644 --- a/frontend/src/components/NavBar.jsx +++ b/frontend/src/components/NavBar.jsx @@ -165,7 +165,7 @@ function OverPopup({ onClose, nieuweVersie, T }) { {nieuweVersie && (
- Nieuwste versie + Nieuwe versie v{nieuweVersie.latest} diff --git a/package.json b/package.json index f4408b7..88e575a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "vibefinance", - "version": "0.1.9", + "version": "1.0.0", "description": "VibeFinance — persoonlijk vermogensbeheer", "private": true, "repository": "https://vibehoogie.duckdns.org/vibe/VibeFinance",