10 Commits
Author SHA1 Message Date
Rene Nochebuena d6665047d8 fix(mime): register application/manifest+json for .webmanifest (+ webp/avif); v1.7.1
Go's MIME table has no .webmanifest entry, so http.FileServer sniffed the PWA web
app manifest as text/plain. mime.AddExtensionType at package load makes TypeByExtension
authoritative. A correctness nit (the manifest spec parses by content and nosniff does
not reject manifests), but a PWA server should label its manifest correctly.
2026-08-18 18:43:55 -06:00
Rene Nochebuena b73b9ee022 feat: per-file Cache-Control, navigation-scoped SPA fallback, nosniff, non-root image; v1.7.0
- Cache-Control per file: no-cache for index.html + service workers, immutable 1y for
  content-hashed assets, 1h for the rest (Vite/CRA/Angular). Closes the stale-release
  trap at the HTTP layer that the v1.6.0 image fix closed at the container layer.
- SPA fallback scoped to navigation: a missing asset (path w/ extension) or a non-HTML
  Accept now returns 404 instead of index.html (no more HTML-as-JS 'Unexpected token <').
- X-Content-Type-Options: nosniff on every response.
- Image runs as a non-root 'spa' user.
- README: caching table, fallback contract, and the Angular dist/<project>/browser/ note.
2026-08-18 17:55:56 -06:00
Rene Nochebuena bbc588d933 fix(docker): drop inherited VOLUME /srv/www that caused silent stale deploys
VOLUME ["/srv/www"] created an anonymous volume that docker compose reuses across
container recreation, shadowing a freshly COPY'd SPA bundle with the previous build
— up -d --build exited 0 while serving the old bundle (and poisoned the PWA service
worker's ngsw.json). A child image cannot un-declare an inherited VOLUME, so it must
not be declared: removing it makes the COPY case deterministic and leaves the runtime
bind-mount case unaffected. Also refreshed the README FROM tag v1.0.0 -> v1.6.0.
2026-08-18 17:27:04 -06:00
Rene Nochebuena e4f3ba1882 release: v1.6.0 (coordinated lockstep bump) 2026-08-13 23:12:57 -06:00
Rene Nochebuena b708ca527b chore(spa-server): framework version alignment to v1.5.0 2026-08-12 17:56:36 -06:00
Rene Nochebuena 09b5133f91 chore(spa-server): dependency refresh; framework version alignment to v1.4.0 2026-08-12 15:30:07 -06:00
Rene Nochebuena 59ff806a3a chore(spa-server): framework version alignment to v1.3.0 2026-08-08 10:49:11 -06:00
Rene Nochebuena 6511d84f15 chore(spa-server): framework version alignment to v1.2.0 2026-08-08 02:25:39 -06:00
Rene Nochebuena d8ed4cd78c chore(spa-server): framework version alignment to v1.1.3 2026-08-08 01:27:12 -06:00
Rene Nochebuena 804243d45a chore(spa-server): framework version alignment to v1.1.2 2026-08-08 00:44:07 -06:00