Homer#

Homer is a static, YAML-configured service dashboard. It renders a single landing page of grouped tiles linking to the other services on the network. It runs on ereshkigal, where it is enabled on port 88, reachable over LAN/Tailscale only (not a Cloudflare origin, not behind CF Access).

Homer is the admin/internal launcher

As of #195 the two launchers are split by audience with no overlap, so nothing drifts out of sync: public/family services (Jellyfin, Navidrome, Audiobookshelf, Kavita, Ask, Grafana, ntfy) live in the Cloudflare App Launcher (generated from tsunaminoai.cloudflare.origins, gated by Entra group — see Authentication & Access). Homer carries only admin/internal tools that are not exposed through Cloudflare. A service should appear in exactly one of the two.

Configuration#

A host enables the dashboard with tsunaminoai.homer.enable = true;. The module wires up the upstream services.homer and an Nginx virtual host to serve it.

Key options under tsunaminoai.homer:

  • enable — expose the dashboard on this host.
  • port — TCP port Nginx listens on. Defaults to 8080; ereshkigal overrides it to 88.
  • links — declarative list of top-bar link tiles (typed name / url / icon / target submodule). Appended to the built-in links.
  • services — list of dashboard groups, each with a name and a list of items (tiles). Host- and module-supplied groups are merged by group name.
  • extraOptions — extra top-level Homer settings merged into the config (ereshkigal uses this for a work-in-progress banner message).
  • openFirewall — open port in the firewall (default true).
  • hostName — the Nginx virtual host name (default localhost).

The base config sets the title “FalseBlue DashBoard”, a three-column layout, and built-in top-bar links (Family Apps → the Cloudflare App Launcher, Docs, Unifi Console, Git Repo, Status Page).

How tiles are contributed#

The services lists from multiple sources are merged by group name: tiles defined in the host config, the module’s built-in voileServices and HA_services, and a self-referential “Homer” tile the module injects. Groups with the same name have their items concatenated, and groups are sorted into a preferred order: Family, Media, Media Acquisition, Home Assistant Services, Admin, Monitoring, Other. Service modules only contribute a Homer tile for services that are not Cloudflare origins — the public/family ones deliberately contribute no Homer tile (#195).

Reverse proxy and TLS#

Nginx fronts the dashboard. When step-ca ACME is enabled (tsunaminoai.pki.acme.enable), the virtual host is configured onlySSL using the host’s ACME certificate, listening on port over HTTPS; the injected Homer self-tile also switches its URL to https://. Otherwise Nginx listens on port over plain HTTP.

Built-in groups and tiles#

Homer’s groups are admin/internal only (see the split note above). The module and host contribute:

  • Family — “Our Documents” (paperless). This is the one remaining public tile in Homer: paperless is served via the voile tunnel with a hand-made CF Access app, not a terranix origins entry, so it isn’t IaC-rendered in the CF launcher yet. Follow-up: bring paperless under tsunaminoai.cloudflare.origins and drop this group.
  • Media — Komga and LanRaragi (both on voile), plus internal doc-pipeline tools (Paperless-NGX, paperless-gpt, AnythingLLM) and Open-WebUI. The public streaming apps (Jellyfin/Navidrome/Audiobookshelf/Kavita) are not here — they’re in the CF App Launcher. See media.
  • Media Acquisition — the servarr stack (Prowlarr, Sonarr, Radarr, Lidarr, Readarr, qBittorrent, Whisparr, Stash) on ereshkigal’s own fqdn.
  • Home Assistant Services — Home Assistant and AdGuard, served by the Home Assistant VM on ereshkigal at 192.168.0.55. (Uptime Kuma retired 2026-08, #249 — superseded by the status page.)
  • Admin — Synology DSM, BorgWarehouse (on voile), and the iDrac (192.168.0.21).
  • Monitoring — the Status Page (status.falseblue.com). Grafana and ntfy are not here — they’re CF App Launcher origins (accessGroup = observability).
  • Other — Gitea (pointing at voile:8418), Kiwix, TaskChampion, plus the auto-injected Homer self-link.