Interactive Nabla architecture
AI platform, homelab services, functional dependencies, and observable integrations.
The page starts with foundations and components with the largest blast radius before leaf applications. The detailed view then keeps the complete relationship graph declared in nabla-compose.
Operations and troubleshooting
One read-only snapshot of FastAPI runtime, dependency health, TrueNAS, pfSense and Cloudflare evidence. Start here to identify the failing layer before changing configuration.
Impact and root-cause inspector
Select a service to separate local health, observed blocked_by causes, and structural blast radius across required topology relations.
Architecture health and filters
Services stay first; filters use operator presentation roles while the complete topology remains the basis for dependency criticality and blast-radius calculations.
72 declared services shown of 72
1 · Services & experimentsPrimary homelab outcomes: track service availability, errors, latency and traffic.RED49 components49 need attention
Garage
UnknownGarage WebUI exposed through Cloudflare Tunnel directly to the LAN-bound :3909 origin without Traefik.
AnythingLLM - albandrieu
UnknownPrivate LLM workspace and RAG
LocalAI (GPU)
UnknownLocal AI models (GPU instance)
Ollama (GPU)
UnknownLarge language models (GPU instance)
Open SpeedTest
UnknownOpen SpeedTest - Network speed testing
PortTracker - albandrieu
UnknownPort tracking service
Scrutiny Collector - albandrieu
UnknownWorkstation SMART collector posting disk telemetry to the Scrutiny Web/API hosted on TrueNAS.
2 · Critical core platformFoundations whose failure can remove a whole layer: track availability, quorum/readiness, pressure, capacity and errors.USE2 components2 need attention
3 · Security controlsControl availability and security posture stay separate dimensions.POSTURE4 components4 need attention
4 · Shared platform & dataShared backends: track availability, latency, saturation and capacity without conflating impact with required dependency.RED + USE9 components9 need attention
PostgreSQL
UnknownDatabase server (TCP — use a Postgres client, not a normal web browser tab)
Garage S3
UnknownGarage S3-compatible object-storage API exposed through the direct HAProxy/TLS re-encryption/Traefik path.
5 · Observability & supportObservability and auxiliary tools: important for diagnosis without automatically marking monitored services unavailable.SUPPORT8 components8 need attention
Garage Admin
UnknownGarage Admin API exposed through Cloudflare Tunnel directly to the LAN-bound :3903 origin without Traefik.
Show critical dependency hierarchyRead required dependencies, blast radius, and the canonical Nabla Compose lifecycle order (phase + priority). Critical path
Critical dependency hierarchy
Foundational infrastructure and shared state are shown before applications, using declared required dependencies and their transitive blast radius.
Canonical Nabla Compose lifecycle order: required dependencies remain authoritative, then lifecycle phase and numeric priority determine operational order.1 · Infrastructure foundations
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
2 · Shared data and state
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
3 · Shared platform services
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
4 · Applications and consumers
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
Inspect dependency impact
5 · Support and low-impact components
Inspect dependency impact
Inspect dependency impact
Criticality is derived from blocking required relations (dependsOn, consumesApi, routesTo, storesIn, authenticatesVia and structural partOf). Databases, caches and storage kinds are treated as shared state when they have required dependents. Observability and exposure links do not artificially increase startup criticality.
Compact hierarchy
Mobile view of criticality tiers, effective health, and direct relations. The complete interactive graph remains available below.
Infrastructure foundations3 servicesunknown
- Dockerrequired · hostedBy
Shared data and state7 servicesunknown
- Dockerrequired · hostedBy
- Dockerrequired · hostedBy
- Dockerrequired · hostedBy
- Traefikrequired · exposedBy
- Dockerrequired · hostedBy
- Garage S3required · consumesApi
- Cloudflare Tunnel Connectorrequired · exposedBy
- Garage S3required · partOf
- Cloudflare Tunnel Connectorrequired · exposedBy
Shared platform services13 servicesunknown
- Dockerrequired · hostedBy
- Mimirrequired · storesIn
- Dockerrequired · hostedBy
- InfluxDBrequired · storesIn
- Dockerrequired · hostedBy
- Dockerrequired · hostedBy
- Dockerrequired · hostedBy
- PostgreSQLrequired · dependsOn
- Dockerrequired · hostedBy
- Dockerrequired · hostedBy
- PostgreSQLrequired · dependsOn
- Dockerrequired · hostedBy
- Dockerrequired · hostedBy
- MongoDBrequired · dependsOn
- OpenSearch Securityrequired · storesIn
- Dockerrequired · hostedBy
- Ollamarequired · routesTo
Applications and consumers2 servicesunknown
- Dockerrequired · hostedBy
- ClickHouserequired · storesIn
- Dockerrequired · hostedBy
Interactive service topology
Use the graph search and controls to switch between the AI platform, services, critical path, full catalog, and optional relations. On mobile, the compact hierarchy above provides a more direct view before the complete graph.
The wheel scrolls the page. Use Ctrl/Cmd + wheel or the +/− controls to zoom the diagram.
AI Platform is grouped by functional layers. The main flow moves from interfaces through control plane, inference, tools, orchestration and observability; edge semantics remain distinct from required/optional strength.
Homelab network and ingress paths
This React Flow diagram is the exact same component used on the TrueNAS page. Direct HAProxy/Traefik ingress and Cloudflare Tunnel now both show their WAN transit before pfSense, with tunnel traffic then crossing the LAN switch to TrueNAS/cloudflared. OpenWebUI illustrates a direct tunnel origin on :31028 that never traverses Traefik. The DNS filter separates name resolution from HTTP routing: LAN clients use pfSense/Unbound 172.17.0.1:53; public names recurse externally with Quad9/Cloudflare as public-only fallbacks, while the int.albandrieu.com Domain Override delegates to Pi-hole 172.17.0.24:53, fed by pihole-dns-sync from eligible Traefik labels. The graph also captures the previous failure mode where WAN-only Unbound outgoing interfaces made the Pi-hole forwarder expire; the validated setting is Outgoing Network Interfaces = All with Forwarding Mode disabled. Garage keeps three surfaces: s3.int.albandrieu.com through HAProxy → TLS re-encryption → Traefik → :3900, garage.albandrieu.com through Tunnel → cloudflared → :3909, and garage-admin.albandrieu.com through Tunnel → cloudflared → :3903.
The wheel scrolls the page. Use Ctrl/Cmd + wheel to zoom the diagram.
Declared configuration, observed runtime, and health
The architecture deliberately separates what should exist, what is actually running, and what is operationally usable. This makes configuration drift visible without turning the website or the TrueNAS API into the configuration source of truth.
1. nabla-compose
Declarative source: x-nabla services, stable identity, runtime binding, and topology relationships. services.json and service-topology.json are generated from code.
2. TrueNAS API
Observed runtime source: the official truenas_api_client queries app.query for Apps, containers, states, and versions. It never decides that a service should exist or be public.
3. fastapi-sample
Reconciliation layer: joins declared bindings to TrueNAS workloads, classifies drift (in_sync, declared_only, observed_only, conflict), and keeps health checks separate.
4. albanandrieu.com
Presentation layer: visualizes topology, runtime status, and health without becoming a backend data source.
Declared ≠ Observed ≠ Healthy