# hyperhive frontend npm workspaces project for the hyperhive browser-facing assets: - `packages/shared/` — shared modules used by every surface (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). - `packages/swarm-ui/` — the swarm-level operator UI shell (project- bootstrap scope, no functionality yet). ## 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; `nix/packages/frontend.nix` wires up the build derivation. The `services.hyperhive.agent.frontend.extraFiles` option in `agent.nix` layers per-agent additions on top of the default agent dist. ## 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**: each package is a small Preact app, bundled with no framework beyond Preact itself. Each workspace's `build.mjs` is ~30 lines. - **Single-PR migration**: see the tracked design proposal and the four-commit shape (npm scaffold → nix derivations → container plumbing → Rust cutover).