# hyperhive frontend npm workspaces project for the hyperhive browser-facing assets: - `packages/shared/` — shared modules used by both surfaces (terminal pane, Catppuccin palette + body typography). - `packages/dashboard/` — the hive-c0re dashboard SPA. - `packages/agent/` — the per-container web UI (default agent page, stats, screen). ## Build ``` npm install # one-off; uses the checked-in package-lock.json npm run build # builds every workspace into packages/*/dist/ ``` The Rust binaries serve `packages/dashboard/dist/` and `packages/agent/dist/` via `tower_http::ServeDir` at runtime; the build derivation is wired up in `nix/modules/frontend.nix`. Per-agent additions are layered on top of the default agent dist via the `hyperhive.frontend.extraFiles` option in `agent.nix`. ## Why npm + esbuild - **Hermetic**: dependencies vendored via the checked-in lockfile; `buildNpmPackage` in nix uses it as the source-of-truth so the output is reproducible without network access at build time. - **esbuild**: vanilla-JS bundler, no framework runtime overhead. Each workspace's `build.mjs` is ~30 lines. - **Single-PR migration**: see issue #273 for the design proposal and the four-commit shape (npm scaffold → nix derivations → container plumbing → Rust cutover).