Embed the PWA build and serve it with SPA fallback
Independent review Not signed off — 0 high, 1 medium, 1 low (#4)

Add internal/frontend, which embeds internal/frontend/dist and serves it
with Cache-Control "no-cache" for index.html, sw.js and
manifest.webmanifest and "public, max-age=31536000, immutable" for every
other asset. Any other GET or HEAD falls back to index.html, except paths
under the reserved /api, /auth, /media and /health prefixes, which get
the JSON not_found error instead.

NewRouter now takes the asset fs.FS so tests use a fstest.MapFS fixture,
mounts an /api subrouter with JSON 404/405 handlers, and fails fast if
the assets lack index.html. A placeholder dist/index.html is tracked so a
fresh clone compiles; built assets remain git-ignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 22:29:41 -04:00
co-authored by Claude Opus 5.5
parent f0b2696059
commit ee4670754a
7 changed files with 417 additions and 21 deletions
+4
View File
@@ -8,6 +8,10 @@ deploy/secrets/
# Build artifacts and dependencies
node_modules
dist
# Placeholder so the Go embed compiles on a fresh clone; built assets stay ignored.
!internal/frontend/dist/
internal/frontend/dist/*
!internal/frontend/dist/index.html
# Local databases
*.db