Skip to content

Repositories

Six active repositories, one dependency direction, no overlap in responsibility. All are private under github.com/poindexter12.

Private repositories

Links to the repositories will 404 unless you have access. This site is the public-safe overview.

The map

RepoRoleHolds state?
jacaranda-inventoryNetwork intent registryNo — YAML + git history
jacaranda-foundationMust-exist-first servicesYes (own tfstate branch)
jacaranda-homelabLive infra monorepo — everything elseYes (own tfstate branch)
jacaranda-modulesShared modules, version-taggedNo
fleetPipeline controller app + its own deployYes (local encrypted)
jacaranda-infraGen-1 monolith — retired, read-only referenceHistorical

jacaranda-inventory

The source of truth for network intent: VLANs, IP allocations, DNS records, Proxmox node placement — as YAML, validated by a Go CLI (registry). No database; git is the history.

  • registry reserve / release / set-status mutate allocations with invariant checks; nothing ever deletes.
  • registry query --format json is the machine interface other repos build on (Ansible inventories, DNS publishing).
  • registry dns-export emits the full DNS picture in zone-file form.
  • CI runs registry check --strict on every push.

jacaranda-foundation

The must-exist-first layer, deliberately standalone (ADR-0001): if everything else burns down, foundation can rebuild the world.

ServiceWhatShape
piholeDNS filtering + the estate's authoritative internal DNS4 LXC replicas (2 profiles × HA pair)
secrets-server1Password Connect Server3-node Keepalived HA
step-caSSH Certificate Authority3-node Keepalived HA
fleet opsCross-service SSH keys, packages, baselineRecipes, not a service

Deploys run in two phases: deploy (stand up on hardcoded IPs, bootstrap TLS) then finalize (register DNS, switch TLS to step-ca, sign SSH host certs). Foundation also owns full-dns-sync — the applier that publishes the entire registry's DNS to every Pi-hole.

jacaranda-homelab

The live infra monorepo — every directory maps to real running things, in three tiers:

TierMeaningContents
platform/Shared capabilities services build onpostgres, ingress, observability, authelia (being rebuilt — see Roadmap)
hosted-apps/Third-party apps we runmusa (Twenty CRM), inbox-zero, maxwells-wallet
physical/Bare-metal hosts — SSH-CA + DNS onlyAnsible-only, no VM creation

Each stack follows one layout: terraform/envs/{test,prod} roots symlinked to a shared _env.tf, Ansible inventory generated from the registry, one justfile with op read as the only secrets seam. This site also lives here, under site/.

jacaranda-modules

Reusable OpenTofu modules and just helpers, consumed via git::ssh://…//<module>?ref=vX.Y.Z — exact tags, no ranges, no submodules. Notable modules: lxc-docker-app (the standard single-LXC app shape), vmid-ranges (VMID validation every stack pins), ssh-host-cert. Contains no state, no environment specifics, no real IPs.

fleet

A self-authored controller CLI for pipeline stacks. Application source repos normally contain no infrastructure — fleet is the exception that proves the owner-based rule: self-authored apps keep their own deploy/, and its deploy consumes jacaranda-modules exactly like the monorepo stacks do.

jacaranda-infra (gen-1)

The original monolith: NetBox IPAM, Telmate provider, a central DNS aggregation stack. Retired piece by piece — its audit (jacaranda-homelab/docs/GEN1-AUDIT.md) is why the current principles exist. Kept read-only for reference; never apply from it.

Archived

jacaranda-maxwells-wallet, jacaranda-musa, jacaranda-physical-nodes — gen-2 per-service repos whose stacks were imported into the monorepo (2026-07). Archived on GitHub; their state and deploys live in jacaranda-homelab now.