Infrastructure services — organizations, node orchestration, networking, and access control.
Components: HydraOrganization, HydraCluster, HydraNeck, HydraGuard
After completing foundation setup, the pipeline has:
See the Locations runbook for districts and venues setup.
HydraOrganization HydraExperienceLibrary HydraCluster
┌──────────────────┐ ┌───────────────────────────┐ ┌──────────────────────┐
│ visit-flanders │ │ visit-flanders-main-exp │ │ bxl1 / heysel │
│ type: customer │─────→│ owner: visit-flanders │─────→│ body-001 (render) │
│ │ │ agency: soulmade │ │ body-002 (render) │
│ soulmade │ │ district: bxl1 │ │ head-001 (kiosk) │
│ type: agency │ │ venues: heysel, ad6 │ │ head-002 (tablet) │
└──────────────────┘ └───────────────────────────┘ └──────────────────────┘
All of this exists before the first build. When a build arrives (upstream), it flows into this pre-configured topology. HydraNeck ensures bodies and heads within a venue can reach each other over the network.
Register the customer and agency in HydraOrganization. This is a one-time setup step per customer, not repeated per build.
# Register the customer who commissions experiences
hydraorganization create --id visit-flanders --name "Visit Flanders" --type customer
# Register the agency who builds experiences
hydraorganization create --id soulmade --name "Soulmade" --type agency
hydraorganization list --json
SSE events emitted: organization.created
Nodes are the physical devices that will run experiences. Each node enrolls itself with HydraCluster, declaring its district, venue, and role.
Nodes self-enroll by running the HydraNode agent, which heartbeats to HydraCluster. An operator approves them:
# List pending nodes
hydracluster nodes list --status pending
# Approve a node
hydracluster nodes approve body-001
hydracluster nodes approve head-001
HydraNeck ensures bodies and heads within a venue can reach each other over the network. Without the neck, bodies render frames but heads can't receive the stream.
# All nodes in the venue are approved and healthy
hydracluster nodes list --district bxl1 --venue heysel
SSE events emitted: node.enrolled, node.approved
Active components: HydraCluster, HydraNeck, HydraNode agents.
Create the experience in HydraExperienceLibrary. This defines what will be deployed, who owns it, and where it goes — all before any build exists.
hydraexperiencelibrary create visit-flanders-main-experience \
--label "Visit Flanders Main" \
--customer visit-flanders \
--agency soulmade \
--release-project visit-flanders-main-experience \
--district bxl1 \
--venue heysel
The --customer and --agency are organization IDs from HydraOrganization. The --release-project links to a HydraRelease project (which may not have any builds yet). The --district and --venue target where the experience will be deployed.
This is also when you can start on landing pages, solution design, and stakeholder expectations — the experience record is the anchor for all of that.
ExperienceLibrary reads the available topology from HydraVenues and lets you target:
| Decision | Source | Example |
|---|---|---|
| Which districts get this experience? | HydraVenues | bxl1 (Brussels District 1) |
| Which venues within the district? | HydraVenues | heysel, ad6 |
| Which machines are bodies (render nodes)? | HydraCluster | GPU machines that run the UE experience |
| Which machines are heads (interface devices)? | HydraCluster | Kiosks, tablets, or terminals that end users interact with |
Districts and venues must exist in HydraVenues and be active before they can be targeted. ExperienceLibrary validates this before accepting targeting changes. Targeting is geographic — by district and venue, not by organization.
hydraexperiencelibrary get visit-flanders-main-experience --json
hydraexperiencelibrary status
SSE events emitted: experience.created
Active components: HydraExperienceLibrary, HydraOrganization (read), HydraVenues (read), HydraCluster (read).