feat(server): embed SPA via memory-serve behind embed-web feature

Adds `memory-serve` 2.1 as an optional workspace dependency, a `build.rs`
that runs `load_directory` only when `CARGO_FEATURE_EMBED_WEB` is set, a
`web_assets` module serving `web/dist` at `/` with SPA fallback (200 OK)
for unknown client-side routes, and a feature-gated integration test.

The default build (no feature) compiles and tests cleanly without `web/dist`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 23:22:26 +02:00
parent 1d1be5fbe9
commit 7170be016d
7 changed files with 240 additions and 0 deletions
+9
View File
@@ -11,6 +11,9 @@ path = "src/lib.rs"
name = "server"
path = "src/main.rs"
[features]
embed-web = ["dep:memory-serve"]
[dependencies]
tokio.workspace = true
axum.workspace = true
@@ -24,10 +27,16 @@ db = { path = "../db" }
domain = { path = "../domain" }
search = { path = "../search" }
rpassword.workspace = true
memory-serve = { workspace = true, optional = true }
[build-dependencies]
memory-serve = { workspace = true }
[dev-dependencies]
reqwest.workspace = true
serde_json.workspace = true
tower.workspace = true
http-body-util.workspace = true
api = { path = "../api" }
auth = { path = "../auth" }
db = { path = "../db" }