Skip to content

Homepage

Homepage is the internal dashboard for links to homelab services and external tools. It is active and intended for local-network use.

Current implementation

Property Value
Image ghcr.io/gethomepage/homepage:v1.13.2
Namespace homepage
Service homepage:3000
Local hostname homepage.homelab.internal
Replicas 1
Persistence Configuration from a generated ConfigMap; logs use emptyDir

The workload uses a dedicated ServiceAccount and read-only RBAC so Homepage can discover selected Kubernetes resources. Dashboard configuration, bookmarks, widgets, CSS, and JavaScript live under gitops/apps/lab/homepage/configs.

Dashboard sections

The dashboard is organized by responsibility:

  • Applications contains user-facing workloads such as Linkding and Postiz.
  • Infrastructure & Monitoring contains Flux Operator, Vault, Traefik, Grafana, and Prometheus.
  • AI Assistants contains external AI and developer-assistant services.

These names remain as configuration keys, but their visual headers are hidden to keep the dashboard compact. Service cards also omit descriptions. Icons use Homepage's built-in Dashboard Icons integration when the service has a matching asset. AI Fiesta retains its own logo because Dashboard Icons does not provide one. Internal health endpoints are used for site monitoring where they do not require credentials. Prometheus and Traefik service widgets show summary metadata on their cards. Equal-height cards keep every service in that row aligned with those two widget-enabled cards.

Quick Launch is enabled for keyboard navigation. Start typing anywhere on the dashboard to search service and bookmark names. Internet search suggestions are excluded so results remain focused on configured dashboard items. A launcher button is also available in the bottom-right corner on mobile layouts.

Information widgets show host resources, aggregate Kubernetes cluster usage, current weather for Jagatsinghpur, Odisha, and the local time. Per-node usage is hidden while the cluster has only one node. The weather data comes from Open-Meteo in metric units and does not require an API key.

Homepage uses Kubernetes cluster mode with its dedicated ServiceAccount and read-only RBAC. Ingress discovery is enabled. The Kubernetes information widget uses Metrics Server to display cluster and node CPU and memory usage.

Local preview

Preview the exact GitOps configuration in WSL before deploying it to the cluster. The preview uses the same pinned Homepage image, mounts the tracked files from gitops/apps/lab/homepage/configs individually as read-only files and does not mount the Docker socket. The canonical Kubernetes configuration remains in cluster mode, so its expected API error can appear in the Docker preview because no in-cluster ServiceAccount exists there. The intentionally empty proxmox.yaml is tracked and mounted in both environments so Homepage does not need to generate it during startup.

Docker Desktop must be running with this WSL distribution enabled under Settings > Resources > WSL Integration. Then start the preview from the repository root:

mise run homepage-preview

Open http://localhost:3000. Edit files under gitops/apps/lab/homepage/configs, then use Homepage's refresh control or refresh the browser to inspect the result. Stop a foreground preview with Ctrl+C, then remove its container and network with:

mise run homepage-preview-stop

Links remain usable when the WSL workstation can resolve the homelab domains. Server-side site monitors and service widgets that use *.svc.cluster.local addresses will show unavailable in Docker because those names exist only inside Kubernetes; that is expected and does not affect layout testing.

Repository locations

  • Reusable workload: gitops/apps/base/homepage
  • Lab overlay and ingress: gitops/apps/lab/homepage
  • Activation: gitops/apps/lab/kustomization.yaml
  • Flux entrypoint: gitops/clusters/lab/apps.yaml

Dependencies

  • Flux applies the application overlay.
  • Traefik serves the local hostname.
  • CoreDNS and local DNS resolve cluster and homelab names.

Only deployed local web interfaces are listed. Platform components without a web interface, such as MetalLB, External Secrets Operator, CloudNativePG, Cloudflared, NVIDIA GPU Operator, and Local Path Provisioner, are represented through Grafana and Prometheus rather than misleading dashboard links.