website/flake.nix
iris d3a55c5631 initial landing scaffold (hyperhive/website MVP)
Tracks hyperhive#502 — landing-only first cut. Static site
generator: Zola (Rust, fits the swarm's stack and the operator's
"sounds exciting" go-ahead on the issue thread).

## Structure

- `flake.nix` — `nix build .#website` produces the dist; `nix
  develop` drops into a shell with zola for `zola serve` live
  reload. No CI runner; the flake is the validation contract.
- `config.toml` — Zola config; base URL `hyperhive.darkest.space`
  per #502. Single-page landing — feeds / search index off.
- `content/_index.md` — landing copy. Editable without touching
  templates so non-engineers can refresh prose.
- `templates/base.html` + `templates/index.html` — base layout +
  landing-specific extension. og:tags + favicon wired through.
- `sass/main.scss` — theme. Catppuccin Mocha palette + the amber
  accent from the swarm's identity hex mark. Self-contained
  (no @import) so the file is reviewable in one place.
- `static/{favicon,hex-mark,hyperhive}.svg` — copies of the
  dashboard's `branding/hyperhive.svg` (hex motif). Used as
  favicon, hero inline, and og:image respectively.

## Theme

Monospace identity throughout — matches dashboard / agent
terminals so the website reads as part of the same family
rather than a separate marketing artifact. Banner glyphs
(`░▒▓█▓▒░`) on the title, dashed dividers, cyan/mauve/amber
accents, glow text-shadow on the hero. Subtle CSS-only pulse
on the hex motif (slow `rotate` on the SVG; speeds up on hover
for a small "noticed" cue).

## Three-column "what's inside"

`the swarm` / `the dashboard` / `the boundary` — quick
orientation for visitors who clicked through from a link
without context. Copy intentionally short; deep dives belong
in /docs (future, not in this MVP).

## Scope drop

Per mara on #502:
- no nav / blog / docs yet — landing only
- no screenshots in MVP, follow via issues in this repo
- public visibility

## Provenance

Scaffolded under `iris/website` because my agent forge token
doesn't carry org-admin to create repos under `hyperhive/`.
Manager confirmed their token doesn't either; mara will do the
org transfer once she gets to it. README documents this.
2026-05-27 10:08:56 +02:00

64 lines
2 KiB
Nix

{
# hyperhive marketing landing — Zola static site build (#502).
#
# `nix build` → `result/` is the `public/` Zola dist, ready to drop
# under any static-file host. No CI runner needed; the flake is the
# validation contract.
description = "hyperhive marketing landing";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs { inherit system; };
in {
packages.website = pkgs.stdenv.mkDerivation {
pname = "hyperhive-website";
version = self.shortRev or "dev";
src = ./.;
nativeBuildInputs = [ pkgs.zola ];
# Zola reads `config.toml` from CWD, writes `public/` next to it,
# which we then move to $out. The build is offline / hermetic —
# no network access needed at build time, which fits the nix
# sandbox without extra fetchurls.
buildPhase = ''
runHook preBuild
zola build --output-dir public
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r public/. $out/
runHook postInstall
'';
# Static-site dist; no shared libs to patchelf, no executables.
dontFixup = true;
};
# `nix build` with no attribute → the website dist.
packages.default = self.packages.${system}.website;
# `nix develop` → a shell with zola for local iteration:
# `zola serve` runs the dev server with live reload.
devShells.default = pkgs.mkShell {
packages = [ pkgs.zola ];
};
# `nix run` is the dev-server shortcut: `nix run . -- serve`
# boots Zola's hot-reload server on http://127.0.0.1:1111/.
apps.default = {
type = "app";
program = "${pkgs.zola}/bin/zola";
};
});
}