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 to8080; ereshkigal overrides it to88.links— declarative list of top-bar link tiles (typedname/url/icon/targetsubmodule). Appended to the built-inlinks.services— list of dashboard groups, each with anameand a list ofitems(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 bannermessage).openFirewall— openportin the firewall (defaulttrue).hostName— the Nginx virtual host name (defaultlocalhost).
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
originsentry, so it isn’t IaC-rendered in the CF launcher yet. Follow-up: bring paperless undertsunaminoai.cloudflare.originsand 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
ereshkigalat192.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.
Related#
- Status page — uptime view the dashboard links to.
- Authentication — how the tiles’ targets are protected.