No description
  • Nix 41%
  • SCSS 19.2%
  • CSS 19.1%
  • HTML 17.8%
  • Awk 2.9%
Find a file
iris 1bcfc5ed5f docs theme: fix footer/nav overlap on short doc pages
The sticky sidebar's viewport-tracking kept it painting over the footer
once a page's main content was shorter than the sidebar tree (confirmed
against the live hive-metric doc page). Drop position:sticky (the sidebar
still self-scrolls via its existing max-height + overflow-y:auto, so it
still doesn't lengthen the page) and give body a 100vh floor so a short
page still fills the viewport.
2026-09-13 22:53:39 +02:00
.forgejo/workflows ci: daily nix flake update workflow 2026-09-13 19:14:45 +02:00
content fix(landing): remove repeated intro across hero/prose/cards/features (#36) 2026-06-17 15:28:19 +02:00
nix docs theme: fix footer/nav overlap on short doc pages 2026-09-13 22:53:39 +02:00
sass fix(landing): remove repeated intro across hero/prose/cards/features (#36) 2026-06-17 15:28:19 +02:00
static fix(#43): restore hive-priv to original position (left side now clear) 2026-07-23 15:26:22 +02:00
templates landing: add five missing-feature bullets from the website#58 docs audit 2026-09-02 12:36:03 +02:00
.gitignore initial landing scaffold (hyperhive/website MVP) 2026-05-27 10:08:56 +02:00
config.toml feat: depend on main repo, generate /options + /docs, add CI 2026-06-05 19:00:07 +02:00
flake.lock flake: bump hyperhive input to pick up swarm.md/deploy.md 2026-08-30 13:09:59 +02:00
flake.nix flake: use the already-bound system, not the deprecated pkgs.system 2026-09-07 20:26:56 +02:00
README.md feat: depend on main repo, generate /options + /docs, add CI 2026-06-05 19:00:07 +02:00

hyperhive website

Marketing landing for hyperhive, deployed at hyperhive.darkest.space.

Built with Zola, the Rust static site generator. The landing page is Zola-rendered; the dist also ships generated reference docs sourced from the main repo:

  • /options/ — the NixOS options reference (services.hyperhive.* host options + per-agent hyperhive.*), built from the main repo's packages.<system>.docs.
  • /docs/ — the prose docs (docs/**/*.md) rendered to themed HTML by nix/docs.nix.

Both come from the hyperhive flake input, so they always track the revision you pin (or override) — see Deploy.

░▒▓█▓▒░  scaffolded by `iris`, a claude agent in the swarm  ░▒▓█▓▒░
                ▣  the hive renders its own door  ◇

Copy, theme, layout, and the flake here are AI-authored — templates / SCSS / nix / markdown all from an agent in this same hyperhive deployment, reviewed by the operator before merge. Hex motif art lives upstream in hyperhive/branding/; everything else came out of one prompt-and-iterate session against the #502 thread.

Build

git clone https://forge.darkest.space/hyperhive/website.git
cd website

# one-shot build to ./public
nix build .#website
# → result/ is the dist (landing + /options/ + /docs/), ready to
#   drop under any static host

# validate everything CI checks (build + nixfmt formatting)
nix flake check

# build just the generated docs sub-trees for inspection
nix build .#options   # nix options reference → result/
nix build .#docs      # prose docs → result/

# dev server (live reload on http://127.0.0.1:1111/)
nix develop
zola serve   # serves the landing only; /options + /docs need nix build

Layout

config.toml          # zola config (single source of truth for site meta)
content/_index.md    # landing page copy — edit here for prose changes
templates/
  base.html          # base layout (head, footer, og tags)
  index.html         # landing template extending base
sass/
  main.scss          # theme — Catppuccin Mocha + amber accent
static/
  hyperhive.svg      # single canonical hex motif — favicon + og:image
                     # + inline hero (via Zola `load_data`)
nix/
  docs.nix           # renders the main repo's docs/**/*.md → /docs/ HTML
  docs.css           # Catppuccin Mocha theme for the rendered docs
flake.nix            # `nix build` → site dist, `nix flake check` → CI gate
.forgejo/workflows/
  ci.yml             # runs `nix flake check` on every PR

Deploy

Pinning the docs to your hyperhive revision

The generated /options/ + /docs/ pages come from the hyperhive flake input. By default it tracks the main repo's default branch, so a plain nix build .#website publishes the latest docs. To publish the docs for the exact revision you actually run, override the input.

One-off, from the command line:

nix build .#website \
  --override-input hyperhive git+https://forge.darkest.space/hyperhive/hyperhive.git?ref=v1.2.3
# or point it at a local checkout:
nix build .#website --override-input hyperhive path:/srv/hyperhive

Or wire it in from the deployment flake that consumes this one, so the website and the running hive share a single pinned revision:

{
  inputs.hyperhive.url = "git+https://forge.darkest.space/hyperhive/hyperhive.git";
  inputs.website.url = "git+https://forge.darkest.space/hyperhive/website.git";
  # one source of truth for the revision — the site renders the docs
  # for the same hyperhive you deploy.
  inputs.website.inputs.hyperhive.follows = "hyperhive";
}

Serving the dist

The build output is a plain public/ directory of static files — drop it under any HTTP server's docroot. nginx vhost example for serving it at hyperhive.darkest.space:

server {
    listen      80;
    listen      [::]:80;
    server_name hyperhive.darkest.space;

    # If you've got TLS in front, the usual `return 301
    # https://$host$request_uri;` redirect goes here and the
    # listen lines move to a sibling server { listen 443 ssl …; }
    # block. Keeping this snippet minimal — plain HTTP on a
    # cert-managed host is the smallest working config.

    # Point at wherever `nix build .#website && cp -r result/. …`
    # lands. The dist is fully self-contained: no server-side
    # rendering, no rewrites, no API.
    root        /var/www/hyperhive-website;
    index       index.html;

    location / {
        try_files $uri $uri/ =404;
    }

    # 7-day cache on the immutable assets (SVG, CSS, fonts).
    # `nix build` produces a fresh path each rebuild, so caching
    # is safe — operator can just `mv -T result-new /var/www/…`
    # to swap, no cache-busting hashes needed.
    location ~* \.(svg|css|js|woff2|png|ico)$ {
        expires     7d;
        add_header  Cache-Control "public, immutable";
    }
}

If you're running NixOS, the equivalent module config is:

services.nginx.virtualHosts."hyperhive.darkest.space" = {
  enableACME = true;
  forceSSL = true;
  root = "${pkgs.callPackage ./website {}}";  # or nix build path
};

Theme

Catppuccin Mocha palette + the hyperhive amber from the swarm's identity hex mark. Monospace identity throughout (same family as the dashboard / agent terminals) so the website reads as part of the same project, not a separate marketing artifact.

Theme variables live in sass/main.scss (single source of truth). The hex motif in the hero is the same SVG that ships on the dashboard / forge / agent containers.