From 4d544f6941cb6ad62c22aefb043608c3b6de880a Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 12:05:44 -0800 Subject: [PATCH 1/7] Replace hajimari with gethomepage Hajimari has been unmaintained since 2022 with broken helm chart dependencies. Switching to gethomepage which is actively maintained (28k stars, monthly releases) and has similar k8s autodiscovery. - Remove hajimari ArgoCD app and manifests - Add homepage ArgoCD app with jameswynn helm chart - Migrate custom apps, bookmarks, and search config - Enable RBAC for k8s service autodiscovery - Configure Tailscale ingress at go.tail8d86e.ts.net Co-Authored-By: Claude Opus 4.5 --- argocd/apps/hajimari.yaml | 33 ---------- argocd/apps/homepage.yaml | 30 +++++++++ argocd/manifests/hajimari/values.yaml | 95 --------------------------- argocd/manifests/homepage/values.yaml | 95 +++++++++++++++++++++++++++ 4 files changed, 125 insertions(+), 128 deletions(-) delete mode 100644 argocd/apps/hajimari.yaml create mode 100644 argocd/apps/homepage.yaml delete mode 100644 argocd/manifests/hajimari/values.yaml create mode 100644 argocd/manifests/homepage/values.yaml diff --git a/argocd/apps/hajimari.yaml b/argocd/apps/hajimari.yaml deleted file mode 100644 index f43e42e..0000000 --- a/argocd/apps/hajimari.yaml +++ /dev/null @@ -1,33 +0,0 @@ -# Hajimari - Service Dashboard / Start Page -# -# Using custom fork from forge.ops.eblu.me/eblume/hajimari -# Fork enables custom builds with search auto-focus, weather widget, etc. -# -# Auto-discovers k8s services via ingress annotations and displays -# custom apps for non-k8s services (Forge, Registry, NAS). -apiVersion: argoproj.io/v1alpha1 -kind: Application -metadata: - name: hajimari - namespace: argocd -spec: - project: default - sources: - # Helm chart from our fork - - repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/hajimari.git - targetRevision: v0.3.1-blumeops.1 - path: charts/hajimari - helm: - releaseName: hajimari - valueFiles: - - $values/argocd/manifests/hajimari/values.yaml - # Values from blumeops repo - - repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git - targetRevision: main - ref: values - destination: - server: https://kubernetes.default.svc - namespace: hajimari - syncPolicy: - syncOptions: - - CreateNamespace=true diff --git a/argocd/apps/homepage.yaml b/argocd/apps/homepage.yaml new file mode 100644 index 0000000..4521eaf --- /dev/null +++ b/argocd/apps/homepage.yaml @@ -0,0 +1,30 @@ +# Homepage - Service Dashboard / Start Page +# +# Replaced hajimari with gethomepage for active maintenance and better features. +# Auto-discovers k8s services via ingress annotations. +# +# Helm chart: https://github.com/jameswynn/helm-charts/tree/main/charts/homepage +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: homepage + namespace: argocd +spec: + project: default + sources: + - repoURL: https://jameswynn.github.io/helm-charts + chart: homepage + targetRevision: 2.1.0 + helm: + releaseName: homepage + valueFiles: + - $values/argocd/manifests/homepage/values.yaml + - repoURL: ssh://forgejo@forge.ops.eblu.me:2222/eblume/blumeops.git + targetRevision: main + ref: values + destination: + server: https://kubernetes.default.svc + namespace: homepage + syncPolicy: + syncOptions: + - CreateNamespace=true diff --git a/argocd/manifests/hajimari/values.yaml b/argocd/manifests/hajimari/values.yaml deleted file mode 100644 index ebafe6c..0000000 --- a/argocd/manifests/hajimari/values.yaml +++ /dev/null @@ -1,95 +0,0 @@ -# Hajimari values for blumeops -# Service dashboard at go.ops.eblu.me - -# Use custom image from our fork -image: - repository: registry.ops.eblu.me/blumeops/hajimari - tag: v0.3.1-blumeops.1 - -# Page settings -hajimari: - title: BlumeOps - name: Erich - defaultEnable: true - - # Display settings - showAppGroups: true - showAppUrls: false - showAppInfo: true - - # Search - default to Kagi - defaultSearchProvider: Kagi - searchProviders: - - name: Kagi - token: k - icon: simple-icons:kagi - searchUrl: https://kagi.com/search?q={query} - url: https://kagi.com - - name: Google - token: g - icon: simple-icons:google - searchUrl: https://www.google.com/search?q={query} - url: https://www.google.com - - name: DuckDuckGo - token: d - icon: simple-icons:duckduckgo - searchUrl: https://duckduckgo.com/?q={query} - url: https://duckduckgo.com - - # Discover ingresses from all namespaces - namespaceSelector: - any: true - - # Non-k8s services (hosted on indri or LAN) - customApps: - - group: Host Services - apps: - - name: Forgejo - url: https://forge.ops.eblu.me - icon: simple-icons:forgejo - info: Git forge - - name: Registry - url: https://registry.ops.eblu.me - icon: mdi:docker - info: Container registry - - name: Sifaka NAS - url: https://nas.ops.eblu.me - icon: simple-icons:synology - info: NAS dashboard - - # Useful external bookmarks - globalBookmarks: - - group: Admin - bookmarks: - - name: Tailscale Admin - url: https://login.tailscale.com/admin - - name: 1Password - url: https://my.1password.com - - name: Pulumi - url: https://app.pulumi.com/eblume/blumeops-tailnet - -# Service account for reading ingresses across namespaces -serviceAccount: - create: true - -# Tailscale Ingress - exposes at go.tail8d86e.ts.net -# Caddy will proxy go.ops.eblu.me to this -ingress: - main: - enabled: true - ingressClassName: tailscale - annotations: - hajimari.io/enable: "false" - hosts: - - host: go - paths: - - path: / - pathType: Prefix - tls: - - hosts: - - go - -# No persistence needed - config is in values.yaml -persistence: - data: - enabled: false diff --git a/argocd/manifests/homepage/values.yaml b/argocd/manifests/homepage/values.yaml new file mode 100644 index 0000000..09e9c47 --- /dev/null +++ b/argocd/manifests/homepage/values.yaml @@ -0,0 +1,95 @@ +# Homepage values for blumeops +# Service dashboard at go.ops.eblu.me + +# Enable RBAC for Kubernetes service autodiscovery +enableRbac: true + +serviceAccount: + create: true + +# Tailscale Ingress - exposes at go.tail8d86e.ts.net +# Caddy proxies go.ops.eblu.me to this +ingress: + main: + enabled: true + ingressClassName: tailscale + annotations: + gethomepage.dev/enabled: "false" + hosts: + - host: go + paths: + - path: / + pathType: Prefix + tls: + - hosts: + - go + +env: + - name: HOMEPAGE_ALLOWED_HOSTS + value: "go.tail8d86e.ts.net,go.ops.eblu.me" + +config: + # Host services (non-k8s, on indri or LAN) + services: + - Host Services: + - Forgejo: + href: https://forge.ops.eblu.me + icon: forgejo + description: Git forge + - Registry: + href: https://registry.ops.eblu.me + icon: docker + description: Container registry + - Sifaka NAS: + href: https://nas.ops.eblu.me + icon: synology + description: NAS dashboard + + # External bookmarks + bookmarks: + - Admin: + - Tailscale Admin: + - href: https://login.tailscale.com/admin + icon: tailscale + - 1Password: + - href: https://my.1password.com + icon: 1password + - Pulumi: + - href: https://app.pulumi.com/eblume/blumeops-tailnet + icon: pulumi + + # Widgets on the page + widgets: + - search: + provider: custom + url: https://kagi.com/search?q= + target: _blank + suggestionUrl: https://kagi.com/api/autosuggest?q= + - kubernetes: + cluster: + show: true + cpu: true + memory: true + showLabel: true + label: "k8s.tail8d86e.ts.net" + nodes: + show: true + cpu: true + memory: true + showLabel: true + + # Kubernetes autodiscovery + kubernetes: + mode: cluster + + # Layout and styling + settingsString: | + title: BlumeOps + headerStyle: boxed + layout: + Host Services: + style: row + columns: 3 + Admin: + style: row + columns: 3 -- 2.50.1 (Apple Git-155) From 8e1484d5469551c81cdf711f32af6de62378cabf Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 12:20:29 -0800 Subject: [PATCH 2/7] Migrate ingress annotations from hajimari to gethomepage Convert all hajimari.io/* annotations to gethomepage.dev/* format: - hajimari.io/enable -> gethomepage.dev/enabled - hajimari.io/appName -> gethomepage.dev/name - hajimari.io/group -> gethomepage.dev/group - hajimari.io/icon -> gethomepage.dev/icon (si- or mdi- prefix) - hajimari.io/info -> gethomepage.dev/description - hajimari.io/url -> gethomepage.dev/href Updated services: grafana, loki, prometheus, teslamate, miniflux, kiwix, argocd, immich, devpi, torrent Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/argocd/service-tailscale.yaml | 12 ++++++------ argocd/manifests/devpi/ingress-tailscale.yaml | 12 ++++++------ .../manifests/grafana-config/ingress-tailscale.yaml | 12 ++++++------ argocd/manifests/immich/ingress-tailscale.yaml | 12 ++++++------ argocd/manifests/kiwix/ingress-tailscale.yaml | 12 ++++++------ argocd/manifests/loki/ingress-tailscale.yaml | 7 +------ argocd/manifests/miniflux/ingress-tailscale.yaml | 12 ++++++------ argocd/manifests/prometheus/ingress-tailscale.yaml | 12 ++++++------ argocd/manifests/teslamate/ingress-tailscale.yaml | 12 ++++++------ argocd/manifests/torrent/ingress-tailscale.yaml | 12 ++++++------ 10 files changed, 55 insertions(+), 60 deletions(-) diff --git a/argocd/manifests/argocd/service-tailscale.yaml b/argocd/manifests/argocd/service-tailscale.yaml index 33377c0..7569e75 100644 --- a/argocd/manifests/argocd/service-tailscale.yaml +++ b/argocd/manifests/argocd/service-tailscale.yaml @@ -11,12 +11,12 @@ metadata: namespace: argocd annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://argocd.ops.eblu.me" - hajimari.io/icon: "simple-icons:argo" - hajimari.io/appName: "ArgoCD" - hajimari.io/group: "Infrastructure" - hajimari.io/info: "GitOps CD" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "ArgoCD" + gethomepage.dev/group: "Infrastructure" + gethomepage.dev/icon: "si-argo" + gethomepage.dev/description: "GitOps CD" + gethomepage.dev/href: "https://argocd.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/devpi/ingress-tailscale.yaml b/argocd/manifests/devpi/ingress-tailscale.yaml index 8ab7c0f..a62b38e 100644 --- a/argocd/manifests/devpi/ingress-tailscale.yaml +++ b/argocd/manifests/devpi/ingress-tailscale.yaml @@ -5,12 +5,12 @@ metadata: namespace: devpi annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://pypi.ops.eblu.me" - hajimari.io/icon: "simple-icons:pypi" - hajimari.io/appName: "PyPI" - hajimari.io/group: "Infrastructure" - hajimari.io/info: "PyPI cache" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "PyPI" + gethomepage.dev/group: "Infrastructure" + gethomepage.dev/icon: "si-pypi" + gethomepage.dev/description: "PyPI cache" + gethomepage.dev/href: "https://pypi.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/grafana-config/ingress-tailscale.yaml b/argocd/manifests/grafana-config/ingress-tailscale.yaml index 2c84ab9..d86cd7c 100644 --- a/argocd/manifests/grafana-config/ingress-tailscale.yaml +++ b/argocd/manifests/grafana-config/ingress-tailscale.yaml @@ -9,12 +9,12 @@ metadata: namespace: monitoring annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://grafana.ops.eblu.me" - hajimari.io/icon: "simple-icons:grafana" - hajimari.io/appName: "Grafana" - hajimari.io/group: "Observability" - hajimari.io/info: "Metrics dashboards" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Grafana" + gethomepage.dev/group: "Observability" + gethomepage.dev/icon: "si-grafana" + gethomepage.dev/description: "Metrics dashboards" + gethomepage.dev/href: "https://grafana.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/immich/ingress-tailscale.yaml b/argocd/manifests/immich/ingress-tailscale.yaml index e7aca59..3d2368c 100644 --- a/argocd/manifests/immich/ingress-tailscale.yaml +++ b/argocd/manifests/immich/ingress-tailscale.yaml @@ -8,12 +8,12 @@ metadata: namespace: immich annotations: tailscale.com/funnel: "false" - hajimari.io/enable: "true" - hajimari.io/url: "https://photos.ops.eblu.me" - hajimari.io/icon: "simple-icons:immich" - hajimari.io/appName: "Immich" - hajimari.io/group: "Apps" - hajimari.io/info: "Photo management" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Immich" + gethomepage.dev/group: "Apps" + gethomepage.dev/icon: "si-immich" + gethomepage.dev/description: "Photo management" + gethomepage.dev/href: "https://photos.ops.eblu.me" spec: ingressClassName: tailscale rules: diff --git a/argocd/manifests/kiwix/ingress-tailscale.yaml b/argocd/manifests/kiwix/ingress-tailscale.yaml index 661cb83..4558928 100644 --- a/argocd/manifests/kiwix/ingress-tailscale.yaml +++ b/argocd/manifests/kiwix/ingress-tailscale.yaml @@ -6,12 +6,12 @@ metadata: namespace: kiwix annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://kiwix.ops.eblu.me" - hajimari.io/icon: "mdi:wikipedia" - hajimari.io/appName: "Kiwix" - hajimari.io/group: "Apps" - hajimari.io/info: "Offline Wikipedia" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Kiwix" + gethomepage.dev/group: "Apps" + gethomepage.dev/icon: "mdi-wikipedia" + gethomepage.dev/description: "Offline Wikipedia" + gethomepage.dev/href: "https://kiwix.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/loki/ingress-tailscale.yaml b/argocd/manifests/loki/ingress-tailscale.yaml index 252e52e..ed18781 100644 --- a/argocd/manifests/loki/ingress-tailscale.yaml +++ b/argocd/manifests/loki/ingress-tailscale.yaml @@ -7,12 +7,7 @@ metadata: namespace: monitoring annotations: tailscale.com/funnel: "false" - hajimari.io/enable: "false" - hajimari.io/url: "https://loki.ops.eblu.me" - hajimari.io/icon: "mdi:text-box-search" - hajimari.io/appName: "Loki" - hajimari.io/group: "Observability" - hajimari.io/info: "Log aggregation" + gethomepage.dev/enabled: "false" spec: ingressClassName: tailscale rules: diff --git a/argocd/manifests/miniflux/ingress-tailscale.yaml b/argocd/manifests/miniflux/ingress-tailscale.yaml index 9ec90e5..6405745 100644 --- a/argocd/manifests/miniflux/ingress-tailscale.yaml +++ b/argocd/manifests/miniflux/ingress-tailscale.yaml @@ -5,12 +5,12 @@ metadata: namespace: miniflux annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://feed.ops.eblu.me" - hajimari.io/icon: "mdi:rss" - hajimari.io/appName: "Miniflux" - hajimari.io/group: "Apps" - hajimari.io/info: "RSS reader" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Miniflux" + gethomepage.dev/group: "Apps" + gethomepage.dev/icon: "mdi-rss" + gethomepage.dev/description: "RSS reader" + gethomepage.dev/href: "https://feed.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/prometheus/ingress-tailscale.yaml b/argocd/manifests/prometheus/ingress-tailscale.yaml index 941cf92..b49238e 100644 --- a/argocd/manifests/prometheus/ingress-tailscale.yaml +++ b/argocd/manifests/prometheus/ingress-tailscale.yaml @@ -7,12 +7,12 @@ metadata: namespace: monitoring annotations: tailscale.com/funnel: "false" - hajimari.io/enable: "true" - hajimari.io/url: "https://prometheus.ops.eblu.me" - hajimari.io/icon: "simple-icons:prometheus" - hajimari.io/appName: "Prometheus" - hajimari.io/group: "Observability" - hajimari.io/info: "Metrics storage" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Prometheus" + gethomepage.dev/group: "Observability" + gethomepage.dev/icon: "si-prometheus" + gethomepage.dev/description: "Metrics storage" + gethomepage.dev/href: "https://prometheus.ops.eblu.me" spec: ingressClassName: tailscale rules: diff --git a/argocd/manifests/teslamate/ingress-tailscale.yaml b/argocd/manifests/teslamate/ingress-tailscale.yaml index 8ccfcf1..1cb4079 100644 --- a/argocd/manifests/teslamate/ingress-tailscale.yaml +++ b/argocd/manifests/teslamate/ingress-tailscale.yaml @@ -5,12 +5,12 @@ metadata: namespace: teslamate annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://tesla.ops.eblu.me" - hajimari.io/icon: "simple-icons:tesla" - hajimari.io/appName: "TeslaMate" - hajimari.io/group: "Apps" - hajimari.io/info: "Tesla data logger" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "TeslaMate" + gethomepage.dev/group: "Apps" + gethomepage.dev/icon: "si-tesla" + gethomepage.dev/description: "Tesla data logger" + gethomepage.dev/href: "https://tesla.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/torrent/ingress-tailscale.yaml b/argocd/manifests/torrent/ingress-tailscale.yaml index 82039ee..e1c4518 100644 --- a/argocd/manifests/torrent/ingress-tailscale.yaml +++ b/argocd/manifests/torrent/ingress-tailscale.yaml @@ -6,12 +6,12 @@ metadata: namespace: torrent annotations: tailscale.com/proxy-class: "default" - hajimari.io/enable: "true" - hajimari.io/url: "https://torrent.ops.eblu.me" - hajimari.io/icon: "mdi:download" - hajimari.io/appName: "Transmission" - hajimari.io/group: "Apps" - hajimari.io/info: "Torrent client" + gethomepage.dev/enabled: "true" + gethomepage.dev/name: "Transmission" + gethomepage.dev/group: "Apps" + gethomepage.dev/icon: "mdi-download" + gethomepage.dev/description: "Torrent client" + gethomepage.dev/href: "https://torrent.ops.eblu.me" spec: ingressClassName: tailscale defaultBackend: -- 2.50.1 (Apple Git-155) From 75099d29c5ccdebff64ad561292032da20f0a5b8 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 12:53:25 -0800 Subject: [PATCH 3/7] Add pod-selector annotations for Homepage status checks Homepage was looking for pods with labels matching the ingress name (e.g., app.kubernetes.io/name=grafana-tailscale) but actual pods have different labels (e.g., app.kubernetes.io/name=grafana). Added gethomepage.dev/pod-selector to each ingress to specify the correct label selector for pod status checks. Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/argocd/service-tailscale.yaml | 1 + argocd/manifests/devpi/ingress-tailscale.yaml | 1 + argocd/manifests/grafana-config/ingress-tailscale.yaml | 1 + argocd/manifests/immich/ingress-tailscale.yaml | 1 + argocd/manifests/kiwix/ingress-tailscale.yaml | 1 + argocd/manifests/miniflux/ingress-tailscale.yaml | 1 + argocd/manifests/prometheus/ingress-tailscale.yaml | 1 + argocd/manifests/teslamate/ingress-tailscale.yaml | 1 + argocd/manifests/torrent/ingress-tailscale.yaml | 1 + 9 files changed, 9 insertions(+) diff --git a/argocd/manifests/argocd/service-tailscale.yaml b/argocd/manifests/argocd/service-tailscale.yaml index 7569e75..8722670 100644 --- a/argocd/manifests/argocd/service-tailscale.yaml +++ b/argocd/manifests/argocd/service-tailscale.yaml @@ -17,6 +17,7 @@ metadata: gethomepage.dev/icon: "si-argo" gethomepage.dev/description: "GitOps CD" gethomepage.dev/href: "https://argocd.ops.eblu.me" + gethomepage.dev/pod-selector: "app.kubernetes.io/name=argocd-server" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/devpi/ingress-tailscale.yaml b/argocd/manifests/devpi/ingress-tailscale.yaml index a62b38e..00ed337 100644 --- a/argocd/manifests/devpi/ingress-tailscale.yaml +++ b/argocd/manifests/devpi/ingress-tailscale.yaml @@ -11,6 +11,7 @@ metadata: gethomepage.dev/icon: "si-pypi" gethomepage.dev/description: "PyPI cache" gethomepage.dev/href: "https://pypi.ops.eblu.me" + gethomepage.dev/pod-selector: "app=devpi" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/grafana-config/ingress-tailscale.yaml b/argocd/manifests/grafana-config/ingress-tailscale.yaml index d86cd7c..8a0c3fd 100644 --- a/argocd/manifests/grafana-config/ingress-tailscale.yaml +++ b/argocd/manifests/grafana-config/ingress-tailscale.yaml @@ -15,6 +15,7 @@ metadata: gethomepage.dev/icon: "si-grafana" gethomepage.dev/description: "Metrics dashboards" gethomepage.dev/href: "https://grafana.ops.eblu.me" + gethomepage.dev/pod-selector: "app.kubernetes.io/name=grafana" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/immich/ingress-tailscale.yaml b/argocd/manifests/immich/ingress-tailscale.yaml index 3d2368c..a826928 100644 --- a/argocd/manifests/immich/ingress-tailscale.yaml +++ b/argocd/manifests/immich/ingress-tailscale.yaml @@ -14,6 +14,7 @@ metadata: gethomepage.dev/icon: "si-immich" gethomepage.dev/description: "Photo management" gethomepage.dev/href: "https://photos.ops.eblu.me" + gethomepage.dev/pod-selector: "app.kubernetes.io/name=server" spec: ingressClassName: tailscale rules: diff --git a/argocd/manifests/kiwix/ingress-tailscale.yaml b/argocd/manifests/kiwix/ingress-tailscale.yaml index 4558928..1b05405 100644 --- a/argocd/manifests/kiwix/ingress-tailscale.yaml +++ b/argocd/manifests/kiwix/ingress-tailscale.yaml @@ -12,6 +12,7 @@ metadata: gethomepage.dev/icon: "mdi-wikipedia" gethomepage.dev/description: "Offline Wikipedia" gethomepage.dev/href: "https://kiwix.ops.eblu.me" + gethomepage.dev/pod-selector: "app=kiwix" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/miniflux/ingress-tailscale.yaml b/argocd/manifests/miniflux/ingress-tailscale.yaml index 6405745..c67cdc5 100644 --- a/argocd/manifests/miniflux/ingress-tailscale.yaml +++ b/argocd/manifests/miniflux/ingress-tailscale.yaml @@ -11,6 +11,7 @@ metadata: gethomepage.dev/icon: "mdi-rss" gethomepage.dev/description: "RSS reader" gethomepage.dev/href: "https://feed.ops.eblu.me" + gethomepage.dev/pod-selector: "app=miniflux" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/prometheus/ingress-tailscale.yaml b/argocd/manifests/prometheus/ingress-tailscale.yaml index b49238e..91a0a92 100644 --- a/argocd/manifests/prometheus/ingress-tailscale.yaml +++ b/argocd/manifests/prometheus/ingress-tailscale.yaml @@ -13,6 +13,7 @@ metadata: gethomepage.dev/icon: "si-prometheus" gethomepage.dev/description: "Metrics storage" gethomepage.dev/href: "https://prometheus.ops.eblu.me" + gethomepage.dev/pod-selector: "app=prometheus" spec: ingressClassName: tailscale rules: diff --git a/argocd/manifests/teslamate/ingress-tailscale.yaml b/argocd/manifests/teslamate/ingress-tailscale.yaml index 1cb4079..34e6f73 100644 --- a/argocd/manifests/teslamate/ingress-tailscale.yaml +++ b/argocd/manifests/teslamate/ingress-tailscale.yaml @@ -11,6 +11,7 @@ metadata: gethomepage.dev/icon: "si-tesla" gethomepage.dev/description: "Tesla data logger" gethomepage.dev/href: "https://tesla.ops.eblu.me" + gethomepage.dev/pod-selector: "app=teslamate" spec: ingressClassName: tailscale defaultBackend: diff --git a/argocd/manifests/torrent/ingress-tailscale.yaml b/argocd/manifests/torrent/ingress-tailscale.yaml index e1c4518..c8bcba7 100644 --- a/argocd/manifests/torrent/ingress-tailscale.yaml +++ b/argocd/manifests/torrent/ingress-tailscale.yaml @@ -12,6 +12,7 @@ metadata: gethomepage.dev/icon: "mdi-download" gethomepage.dev/description: "Torrent client" gethomepage.dev/href: "https://torrent.ops.eblu.me" + gethomepage.dev/pod-selector: "app=transmission" spec: ingressClassName: tailscale defaultBackend: -- 2.50.1 (Apple Git-155) From caa626a4da9b7cadd4cbb041be60ed316a5fa9ed Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 13:00:59 -0800 Subject: [PATCH 4/7] Fix Homepage layout and add icon colors Layout: - Remove row style from Admin bookmarks (now vertical) - Add Apps, Observability, Infrastructure groups to layout Icons: - Add brand colors to si- icons so they're not greyed out - Grafana #F46800, Prometheus #E6522C, Tesla #CC0000 - ArgoCD #EF7B4D, Immich #4250AF, PyPI #3775A9 Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/argocd/service-tailscale.yaml | 2 +- argocd/manifests/devpi/ingress-tailscale.yaml | 2 +- argocd/manifests/grafana-config/ingress-tailscale.yaml | 2 +- argocd/manifests/homepage/values.yaml | 8 +++++++- argocd/manifests/immich/ingress-tailscale.yaml | 2 +- argocd/manifests/prometheus/ingress-tailscale.yaml | 2 +- argocd/manifests/teslamate/ingress-tailscale.yaml | 2 +- 7 files changed, 13 insertions(+), 7 deletions(-) diff --git a/argocd/manifests/argocd/service-tailscale.yaml b/argocd/manifests/argocd/service-tailscale.yaml index 8722670..fa12f0b 100644 --- a/argocd/manifests/argocd/service-tailscale.yaml +++ b/argocd/manifests/argocd/service-tailscale.yaml @@ -14,7 +14,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "ArgoCD" gethomepage.dev/group: "Infrastructure" - gethomepage.dev/icon: "si-argo" + gethomepage.dev/icon: "si-argo-#EF7B4D" gethomepage.dev/description: "GitOps CD" gethomepage.dev/href: "https://argocd.ops.eblu.me" gethomepage.dev/pod-selector: "app.kubernetes.io/name=argocd-server" diff --git a/argocd/manifests/devpi/ingress-tailscale.yaml b/argocd/manifests/devpi/ingress-tailscale.yaml index 00ed337..0a8e9de 100644 --- a/argocd/manifests/devpi/ingress-tailscale.yaml +++ b/argocd/manifests/devpi/ingress-tailscale.yaml @@ -8,7 +8,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "PyPI" gethomepage.dev/group: "Infrastructure" - gethomepage.dev/icon: "si-pypi" + gethomepage.dev/icon: "si-pypi-#3775A9" gethomepage.dev/description: "PyPI cache" gethomepage.dev/href: "https://pypi.ops.eblu.me" gethomepage.dev/pod-selector: "app=devpi" diff --git a/argocd/manifests/grafana-config/ingress-tailscale.yaml b/argocd/manifests/grafana-config/ingress-tailscale.yaml index 8a0c3fd..c1f06ef 100644 --- a/argocd/manifests/grafana-config/ingress-tailscale.yaml +++ b/argocd/manifests/grafana-config/ingress-tailscale.yaml @@ -12,7 +12,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Grafana" gethomepage.dev/group: "Observability" - gethomepage.dev/icon: "si-grafana" + gethomepage.dev/icon: "si-grafana-#F46800" gethomepage.dev/description: "Metrics dashboards" gethomepage.dev/href: "https://grafana.ops.eblu.me" gethomepage.dev/pod-selector: "app.kubernetes.io/name=grafana" diff --git a/argocd/manifests/homepage/values.yaml b/argocd/manifests/homepage/values.yaml index 09e9c47..0c2f170 100644 --- a/argocd/manifests/homepage/values.yaml +++ b/argocd/manifests/homepage/values.yaml @@ -90,6 +90,12 @@ config: Host Services: style: row columns: 3 - Admin: + Apps: + style: row + columns: 4 + Observability: style: row columns: 3 + Infrastructure: + style: row + columns: 2 diff --git a/argocd/manifests/immich/ingress-tailscale.yaml b/argocd/manifests/immich/ingress-tailscale.yaml index a826928..dc2b2b8 100644 --- a/argocd/manifests/immich/ingress-tailscale.yaml +++ b/argocd/manifests/immich/ingress-tailscale.yaml @@ -11,7 +11,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Immich" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "si-immich" + gethomepage.dev/icon: "si-immich-#4250AF" gethomepage.dev/description: "Photo management" gethomepage.dev/href: "https://photos.ops.eblu.me" gethomepage.dev/pod-selector: "app.kubernetes.io/name=server" diff --git a/argocd/manifests/prometheus/ingress-tailscale.yaml b/argocd/manifests/prometheus/ingress-tailscale.yaml index 91a0a92..3bc6ee8 100644 --- a/argocd/manifests/prometheus/ingress-tailscale.yaml +++ b/argocd/manifests/prometheus/ingress-tailscale.yaml @@ -10,7 +10,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Prometheus" gethomepage.dev/group: "Observability" - gethomepage.dev/icon: "si-prometheus" + gethomepage.dev/icon: "si-prometheus-#E6522C" gethomepage.dev/description: "Metrics storage" gethomepage.dev/href: "https://prometheus.ops.eblu.me" gethomepage.dev/pod-selector: "app=prometheus" diff --git a/argocd/manifests/teslamate/ingress-tailscale.yaml b/argocd/manifests/teslamate/ingress-tailscale.yaml index 34e6f73..755459f 100644 --- a/argocd/manifests/teslamate/ingress-tailscale.yaml +++ b/argocd/manifests/teslamate/ingress-tailscale.yaml @@ -8,7 +8,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "TeslaMate" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "si-tesla" + gethomepage.dev/icon: "si-tesla-#CC0000" gethomepage.dev/description: "Tesla data logger" gethomepage.dev/href: "https://tesla.ops.eblu.me" gethomepage.dev/pod-selector: "app=teslamate" -- 2.50.1 (Apple Git-155) From 5284c41e77a66a107bd7f5f25ba1f49f4a8a552c Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 13:03:47 -0800 Subject: [PATCH 5/7] Use dashboard icons and vertical layout for Homepage Layout: - Change style from row to column for all groups - Services within groups now list vertically - Groups flow side by side naturally Icons: - Switch from si- prefixed icons to dashboard icons - Dashboard icons are full color (grafana.png, prometheus.png, etc.) Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/argocd/service-tailscale.yaml | 2 +- argocd/manifests/devpi/ingress-tailscale.yaml | 2 +- .../manifests/grafana-config/ingress-tailscale.yaml | 2 +- argocd/manifests/homepage/values.yaml | 12 ++++-------- argocd/manifests/immich/ingress-tailscale.yaml | 2 +- argocd/manifests/kiwix/ingress-tailscale.yaml | 2 +- argocd/manifests/miniflux/ingress-tailscale.yaml | 2 +- argocd/manifests/prometheus/ingress-tailscale.yaml | 2 +- argocd/manifests/teslamate/ingress-tailscale.yaml | 2 +- argocd/manifests/torrent/ingress-tailscale.yaml | 2 +- 10 files changed, 13 insertions(+), 17 deletions(-) diff --git a/argocd/manifests/argocd/service-tailscale.yaml b/argocd/manifests/argocd/service-tailscale.yaml index fa12f0b..d75b326 100644 --- a/argocd/manifests/argocd/service-tailscale.yaml +++ b/argocd/manifests/argocd/service-tailscale.yaml @@ -14,7 +14,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "ArgoCD" gethomepage.dev/group: "Infrastructure" - gethomepage.dev/icon: "si-argo-#EF7B4D" + gethomepage.dev/icon: "argocd.png" gethomepage.dev/description: "GitOps CD" gethomepage.dev/href: "https://argocd.ops.eblu.me" gethomepage.dev/pod-selector: "app.kubernetes.io/name=argocd-server" diff --git a/argocd/manifests/devpi/ingress-tailscale.yaml b/argocd/manifests/devpi/ingress-tailscale.yaml index 0a8e9de..08a13ed 100644 --- a/argocd/manifests/devpi/ingress-tailscale.yaml +++ b/argocd/manifests/devpi/ingress-tailscale.yaml @@ -8,7 +8,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "PyPI" gethomepage.dev/group: "Infrastructure" - gethomepage.dev/icon: "si-pypi-#3775A9" + gethomepage.dev/icon: "pypi.png" gethomepage.dev/description: "PyPI cache" gethomepage.dev/href: "https://pypi.ops.eblu.me" gethomepage.dev/pod-selector: "app=devpi" diff --git a/argocd/manifests/grafana-config/ingress-tailscale.yaml b/argocd/manifests/grafana-config/ingress-tailscale.yaml index c1f06ef..23603ba 100644 --- a/argocd/manifests/grafana-config/ingress-tailscale.yaml +++ b/argocd/manifests/grafana-config/ingress-tailscale.yaml @@ -12,7 +12,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Grafana" gethomepage.dev/group: "Observability" - gethomepage.dev/icon: "si-grafana-#F46800" + gethomepage.dev/icon: "grafana.png" gethomepage.dev/description: "Metrics dashboards" gethomepage.dev/href: "https://grafana.ops.eblu.me" gethomepage.dev/pod-selector: "app.kubernetes.io/name=grafana" diff --git a/argocd/manifests/homepage/values.yaml b/argocd/manifests/homepage/values.yaml index 0c2f170..147fa06 100644 --- a/argocd/manifests/homepage/values.yaml +++ b/argocd/manifests/homepage/values.yaml @@ -88,14 +88,10 @@ config: headerStyle: boxed layout: Host Services: - style: row - columns: 3 + style: column Apps: - style: row - columns: 4 + style: column Observability: - style: row - columns: 3 + style: column Infrastructure: - style: row - columns: 2 + style: column diff --git a/argocd/manifests/immich/ingress-tailscale.yaml b/argocd/manifests/immich/ingress-tailscale.yaml index dc2b2b8..31c7858 100644 --- a/argocd/manifests/immich/ingress-tailscale.yaml +++ b/argocd/manifests/immich/ingress-tailscale.yaml @@ -11,7 +11,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Immich" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "si-immich-#4250AF" + gethomepage.dev/icon: "immich.png" gethomepage.dev/description: "Photo management" gethomepage.dev/href: "https://photos.ops.eblu.me" gethomepage.dev/pod-selector: "app.kubernetes.io/name=server" diff --git a/argocd/manifests/kiwix/ingress-tailscale.yaml b/argocd/manifests/kiwix/ingress-tailscale.yaml index 1b05405..c3aeb4c 100644 --- a/argocd/manifests/kiwix/ingress-tailscale.yaml +++ b/argocd/manifests/kiwix/ingress-tailscale.yaml @@ -9,7 +9,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Kiwix" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "mdi-wikipedia" + gethomepage.dev/icon: "kiwix.png" gethomepage.dev/description: "Offline Wikipedia" gethomepage.dev/href: "https://kiwix.ops.eblu.me" gethomepage.dev/pod-selector: "app=kiwix" diff --git a/argocd/manifests/miniflux/ingress-tailscale.yaml b/argocd/manifests/miniflux/ingress-tailscale.yaml index c67cdc5..ad7de3f 100644 --- a/argocd/manifests/miniflux/ingress-tailscale.yaml +++ b/argocd/manifests/miniflux/ingress-tailscale.yaml @@ -8,7 +8,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Miniflux" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "mdi-rss" + gethomepage.dev/icon: "miniflux.png" gethomepage.dev/description: "RSS reader" gethomepage.dev/href: "https://feed.ops.eblu.me" gethomepage.dev/pod-selector: "app=miniflux" diff --git a/argocd/manifests/prometheus/ingress-tailscale.yaml b/argocd/manifests/prometheus/ingress-tailscale.yaml index 3bc6ee8..45b88a7 100644 --- a/argocd/manifests/prometheus/ingress-tailscale.yaml +++ b/argocd/manifests/prometheus/ingress-tailscale.yaml @@ -10,7 +10,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Prometheus" gethomepage.dev/group: "Observability" - gethomepage.dev/icon: "si-prometheus-#E6522C" + gethomepage.dev/icon: "prometheus.png" gethomepage.dev/description: "Metrics storage" gethomepage.dev/href: "https://prometheus.ops.eblu.me" gethomepage.dev/pod-selector: "app=prometheus" diff --git a/argocd/manifests/teslamate/ingress-tailscale.yaml b/argocd/manifests/teslamate/ingress-tailscale.yaml index 755459f..2f10f2d 100644 --- a/argocd/manifests/teslamate/ingress-tailscale.yaml +++ b/argocd/manifests/teslamate/ingress-tailscale.yaml @@ -8,7 +8,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "TeslaMate" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "si-tesla-#CC0000" + gethomepage.dev/icon: "teslamate.png" gethomepage.dev/description: "Tesla data logger" gethomepage.dev/href: "https://tesla.ops.eblu.me" gethomepage.dev/pod-selector: "app=teslamate" diff --git a/argocd/manifests/torrent/ingress-tailscale.yaml b/argocd/manifests/torrent/ingress-tailscale.yaml index c8bcba7..ac77e9c 100644 --- a/argocd/manifests/torrent/ingress-tailscale.yaml +++ b/argocd/manifests/torrent/ingress-tailscale.yaml @@ -9,7 +9,7 @@ metadata: gethomepage.dev/enabled: "true" gethomepage.dev/name: "Transmission" gethomepage.dev/group: "Apps" - gethomepage.dev/icon: "mdi-download" + gethomepage.dev/icon: "transmission.png" gethomepage.dev/description: "Torrent client" gethomepage.dev/href: "https://torrent.ops.eblu.me" gethomepage.dev/pod-selector: "app=transmission" -- 2.50.1 (Apple Git-155) From 5b67297f28346ebb93c1dd3ac1641fce9edd1337 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 13:06:00 -0800 Subject: [PATCH 6/7] Remove Kagi autosuggest (requires auth) Kagi's autosuggest API requires authentication, causing "API Error". Search still works, just without autocomplete suggestions. Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/homepage/values.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/argocd/manifests/homepage/values.yaml b/argocd/manifests/homepage/values.yaml index 147fa06..ce46ac0 100644 --- a/argocd/manifests/homepage/values.yaml +++ b/argocd/manifests/homepage/values.yaml @@ -64,7 +64,6 @@ config: provider: custom url: https://kagi.com/search?q= target: _blank - suggestionUrl: https://kagi.com/api/autosuggest?q= - kubernetes: cluster: show: true -- 2.50.1 (Apple Git-155) From 6682bd76a1e2b8bed87550f3c1ba62d59b84990b Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Fri, 30 Jan 2026 13:18:23 -0800 Subject: [PATCH 7/7] Disable kubernetes widget, fix Kagi autosuggest - Disable kubernetes widget (requires metrics-server) - Use kagisuggest.com for autosuggest (public endpoint) Co-Authored-By: Claude Opus 4.5 --- argocd/manifests/homepage/values.yaml | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/argocd/manifests/homepage/values.yaml b/argocd/manifests/homepage/values.yaml index ce46ac0..4c07899 100644 --- a/argocd/manifests/homepage/values.yaml +++ b/argocd/manifests/homepage/values.yaml @@ -59,23 +59,13 @@ config: icon: pulumi # Widgets on the page + # Note: Kubernetes widget disabled - requires metrics-server widgets: - search: provider: custom url: https://kagi.com/search?q= target: _blank - - kubernetes: - cluster: - show: true - cpu: true - memory: true - showLabel: true - label: "k8s.tail8d86e.ts.net" - nodes: - show: true - cpu: true - memory: true - showLabel: true + suggestionUrl: https://kagisuggest.com/api/autosuggest?q= # Kubernetes autodiscovery kubernetes: -- 2.50.1 (Apple Git-155)