PR #392 moved the slug below the tab strip but kept it INSIDE the sticky chrome — Mara's report ("still at old position everywhere except flow tab") makes the original intent clearer: the slug should be at the page BOTTOM, with the chrome reduced to pure navigation. ## index.html - Remove the banner-thin from `.dashboard-chrome` entirely. - Move it into the existing `<footer>` element (above the divider + project-link line). Sits at the bottom of every tab pane after the main content scrolls past. ## flow.html - Remove the banner-thin from the chrome. The flow page is a full-viewport terminal with `body { overflow: hidden }` and no normal-flow footer position — the slug simply doesn't appear here. The frosted chrome is purely the tab strip now. ## dashboard.css - `--flow-header-h: 4.7em → 3.6em` — chrome is shorter without the banner; terminal padding-top + tail-pill offset + inbox-pill top all derive from this variable, so they follow automatically. - `footer .banner-thin { margin-bottom: 0.8em }` so the slug doesn't crash into the divider + link line below it. No JS changes. Build clean. |
||
|---|---|---|
| .. | ||
| packages | ||
| .gitignore | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
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;
buildNpmPackagein 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.mjsis ~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).