[ci skip] add Homepage gethomepage.dev annotations to all services

Add Kubernetes ingress annotations for Homepage auto-discovery across
~88 services organized into 11 groups. Enable serviceAccount for RBAC,
configure group layouts, and add Grafana/Frigate/Speedtest widgets.
This commit is contained in:
Viktor Barzin 2026-03-07 16:41:36 +00:00
parent f7994e012e
commit af74aa297d
No known key found for this signature in database
GPG key ID: 0EB088298288D958
76 changed files with 722 additions and 95 deletions

View file

@ -14,6 +14,10 @@ variable "budget_encryption_password" {
sensitive = true
}
variable "nfs_server" { type = string }
variable "homepage_annotations" {
type = map(string)
default = {}
}
module "nfs_data" {
source = "../../../modules/kubernetes/nfs_volume"
@ -103,6 +107,7 @@ module "ingress" {
name = "budget-${var.name}"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "3e6b6b68088a"
extra_annotations = var.homepage_annotations
}

View file

@ -44,6 +44,14 @@ module "viktor" {
tier = local.tiers.edge
budget_encryption_password = lookup(var.actualbudget_credentials["viktor"], "password", null)
sync_id = lookup(var.actualbudget_credentials["viktor"], "sync_id", null)
homepage_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Budget Viktor"
"gethomepage.dev/description" = "Personal budget"
"gethomepage.dev/icon" = "actual-budget.png"
"gethomepage.dev/group" = "Finance & Personal"
"gethomepage.dev/pod-selector" = ""
}
}
# https://budget-anca.viktorbarzin.me/
@ -57,6 +65,14 @@ module "anca" {
tier = local.tiers.edge
budget_encryption_password = lookup(var.actualbudget_credentials["anca"], "password", null)
sync_id = lookup(var.actualbudget_credentials["anca"], "sync_id", null)
homepage_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Budget Anca"
"gethomepage.dev/description" = "Personal budget"
"gethomepage.dev/icon" = "actual-budget.png"
"gethomepage.dev/group" = "Finance & Personal"
"gethomepage.dev/pod-selector" = ""
}
}
# https://budget-emo.viktorbarzin.me/
@ -70,4 +86,12 @@ module "emo" {
tier = local.tiers.edge
budget_encryption_password = lookup(var.actualbudget_credentials["emo"], "password", null)
sync_id = lookup(var.actualbudget_credentials["emo"], "sync_id", null)
homepage_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Budget Emo"
"gethomepage.dev/description" = "Personal budget"
"gethomepage.dev/icon" = "actual-budget.png"
"gethomepage.dev/group" = "Finance & Personal"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -231,4 +231,12 @@ module "ingress" {
name = "affine"
tls_secret_name = var.tls_secret_name
max_body_size = "500m"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Affine"
"gethomepage.dev/description" = "Knowledge base"
"gethomepage.dev/icon" = "affine.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -193,4 +193,12 @@ module "ingress" {
name = "audiobookshelf"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "b38fda4285df"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Audiobookshelf"
"gethomepage.dev/description" = "Audiobook library"
"gethomepage.dev/icon" = "audiobookshelf.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -113,6 +113,14 @@ module "ingress" {
full_host = "viktorbarzin.me"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "da853a2438d0"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Blog"
"gethomepage.dev/description" = "Personal blog"
"gethomepage.dev/icon" = "hugo.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}
module "ingress-www" {

View file

@ -270,7 +270,7 @@ module "ingress" {
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/description" = "Book library"
# gethomepage.dev/group: Media
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/icon" : "calibre-web.png"
"gethomepage.dev/name" = "Calibre"
"gethomepage.dev/widget.type" = "calibreweb"
@ -371,4 +371,7 @@ module "stacks-ingress" {
tls_secret_name = var.tls_secret_name
protected = true
rybbit_site_id = "ce5f8aed6bbb"
extra_annotations = {
"gethomepage.dev/enabled" = "false"
}
}

View file

@ -160,4 +160,12 @@ module "ingress" {
name = "changedetection"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Changedetection"
"gethomepage.dev/description" = "Website change monitor"
"gethomepage.dev/icon" = "changedetection-io.png"
"gethomepage.dev/group" = "Automation"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -92,4 +92,12 @@ module "ingress" {
name = "city-guesser"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "City Guesser"
"gethomepage.dev/description" = "Geography game"
"gethomepage.dev/icon" = "globe.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -99,4 +99,12 @@ module "ingress" {
name = "cc"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "7c460afc68c4"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "CyberChef"
"gethomepage.dev/description" = "Data transformation toolkit"
"gethomepage.dev/icon" = "cyberchef.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -345,4 +345,12 @@ module "ingress" {
name = "dawarich"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "0abfd409f2fb"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Dawarich"
"gethomepage.dev/description" = "Location history"
"gethomepage.dev/icon" = "dawarich.png"
"gethomepage.dev/group" = "Smart Home"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -246,6 +246,14 @@ module "ingress" {
name = "ebook2audiobook"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Ebook2Audiobook"
"gethomepage.dev/description" = "Book to audio converter"
"gethomepage.dev/icon" = "audiobookshelf.png"
"gethomepage.dev/group" = "AI & Data"
"gethomepage.dev/pod-selector" = ""
}
}
@ -421,4 +429,12 @@ module "audiblez-web-ingress" {
tls_secret_name = var.tls_secret_name
protected = true
max_body_size = "500m" # Allow large EPUB uploads
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Audiblez"
"gethomepage.dev/description" = "Book to audio converter"
"gethomepage.dev/icon" = "audiobookshelf.png"
"gethomepage.dev/group" = "AI & Data"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -125,4 +125,12 @@ module "ingress" {
name = "draw"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Excalidraw"
"gethomepage.dev/description" = "Collaborative whiteboard"
"gethomepage.dev/icon" = "excalidraw.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -128,4 +128,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
rybbit_site_id = "7e69786f66d5"
exclude_crowdsec = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "F1 Stream"
"gethomepage.dev/description" = "Formula 1 live streams"
"gethomepage.dev/icon" = "f1.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -121,4 +121,12 @@ module "ingress" {
namespace = kubernetes_namespace.forgejo.metadata[0].name
name = "forgejo"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Forgejo"
"gethomepage.dev/description" = "Git hosting"
"gethomepage.dev/icon" = "forgejo.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -47,6 +47,10 @@ variable "memory_request" {
type = string
default = "64Mi"
}
variable "extra_annotations" {
type = map(string)
default = {}
}
resource "kubernetes_deployment" "freedify" {
@ -144,9 +148,10 @@ resource "kubernetes_service" "freedify" {
}
module "ingress" {
source = "../../../modules/kubernetes/ingress_factory"
namespace = "freedify"
name = "music-${var.name}"
tls_secret_name = var.tls_secret_name
protected = var.protected
source = "../../../modules/kubernetes/ingress_factory"
namespace = "freedify"
name = "music-${var.name}"
tls_secret_name = var.tls_secret_name
protected = var.protected
extra_annotations = var.extra_annotations
}

View file

@ -45,6 +45,14 @@ module "viktor" {
dab_session = lookup(var.freedify_credentials["viktor"], "dab_session", null)
dab_visitor_id = lookup(var.freedify_credentials["viktor"], "dab_visitor_id", null)
gemini_api_key = lookup(var.freedify_credentials["viktor"], "gemini_api_key", null)
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Freedify (Viktor)"
"gethomepage.dev/description" = "Music streaming"
"gethomepage.dev/icon" = "navidrome.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}
# https://music-emo.viktorbarzin.me/
@ -58,4 +66,12 @@ module "emo" {
protected = true
genius_token = lookup(var.freedify_credentials["emo"], "genius_token", null)
gemini_api_key = lookup(var.freedify_credentials["emo"], "gemini_api_key", null)
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Freedify (Emo)"
"gethomepage.dev/description" = "Music streaming"
"gethomepage.dev/icon" = "navidrome.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -147,4 +147,12 @@ module "ingress" {
name = "rss"
service_name = "freshrss"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "FreshRSS"
"gethomepage.dev/description" = "RSS feed reader"
"gethomepage.dev/icon" = "freshrss.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -243,6 +243,16 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
protected = true
rybbit_site_id = "0d4044069ff5"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Frigate"
"gethomepage.dev/description" = "NVR & object detection"
"gethomepage.dev/icon" = "frigate.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
"gethomepage.dev/widget.type" = "frigate"
"gethomepage.dev/widget.url" = "http://frigate.frigate.svc.cluster.local:5000"
}
}
module "ingress-internal" {
@ -255,4 +265,7 @@ module "ingress-internal" {
tls_secret_name = var.tls_secret_name
allow_local_access_only = true
ssl_redirect = false
extra_annotations = {
"gethomepage.dev/enabled" = "false"
}
}

View file

@ -304,4 +304,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
max_body_size = "500m"
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "GrampsWeb"
"gethomepage.dev/description" = "Family tree"
"gethomepage.dev/icon" = "grampsweb.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -168,4 +168,12 @@ module "ingress" {
namespace = kubernetes_namespace.hackmd.metadata[0].name
name = "hackmd"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "HackMD"
"gethomepage.dev/description" = "Collaborative markdown"
"gethomepage.dev/icon" = "hedgedoc.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -147,4 +147,12 @@ module "ingress" {
name = "health"
tls_secret_name = var.tls_secret_name
max_body_size = "100m"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Health"
"gethomepage.dev/description" = "Health dashboard"
"gethomepage.dev/icon" = "healthchecks.png"
"gethomepage.dev/group" = "Core Platform"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -5,20 +5,10 @@ image:
# Enable RBAC. RBAC is necessary to use Kubernetes integration
enableRbac: true
extraClusterRoles:
# - apiGroups:
# - some-group
# resources:
# - some-resource
# verbs:
# - get
serviceAccount:
# Specify a different service account name. When blank it will default to the release
# name if *create* is enabled, otherwise it will refer to the default service account.
name: ""
# Create service account. Needed when RBAC is enabled.
create: false
# Create service account. Needed when RBAC is enabled for K8s annotation auto-discovery.
create: true
service:
main:
@ -37,13 +27,11 @@ ingress:
main:
enabled: true
labels:
# This label will enable discover of this deployment in Homepage
gethomepage.dev/enabled: "true"
annotations:
# These annotations will configure how this deployment is shown in Homepage
gethomepage.dev/name: "Homepage"
gethomepage.dev/description: "A modern, secure, highly customizable application dashboard."
gethomepage.dev/group: "A New Group"
gethomepage.dev/description: "Service dashboard"
gethomepage.dev/group: "Core Platform"
gethomepage.dev/icon: "homepage.png"
ingressClassName: "traefik"
hosts:
@ -58,32 +46,14 @@ ingress:
# All the config files for Homepage can be specified under their relevant config block.
config:
# To use an existing ConfigMap uncomment this line and specify the name
# useExistingConfigMap: existing-homepage-configmap
bookmarks:
- Developer:
- Github:
- abbr: Viktor Barzin
href: https://github.com/viktorbarzin
services:
# - My First Group:
# - My First Service:
# href: http://localhost/
# description: Homepage is awesome
# - My Second Group:
# - My Second Service:
# href: http://localhost/
# description: Homepage is the best
# - My Third Group:
# - My Third Service:
# href: http://localhost/
# description: Homepage is 😎
services: [] # All services via K8s annotation auto-discovery
widgets:
- resources:
# change backend to 'kubernetes' to use Kubernetes integration. Requires RBAC.
# backend: resources
backend: kubernetes
expanded: true
cpu: true
@ -91,7 +61,6 @@ config:
- search:
provider: duckduckgo
target: _blank
## Uncomment to enable Kubernetes integration
- kubernetes:
cluster:
show: true
@ -105,51 +74,49 @@ config:
memory: true
showLabel: true
kubernetes:
# change mode to 'cluster' to use RBAC service account
# mode: disable
mode: cluster
docker:
settings:
layout:
Core Platform:
style: row
columns: 4
Identity & Security:
style: row
columns: 3
Infrastructure:
style: row
columns: 4
Development & CI:
style: row
columns: 4
Automation:
style: row
columns: 3
Productivity:
style: row
columns: 4
Media & Entertainment:
style: row
columns: 4
Smart Home:
style: row
columns: 3
AI & Data:
style: row
columns: 3
Finance & Personal:
style: row
columns: 3
Other:
style: row
columns: 4
# -- Main environment variables. Template enabled.
# Syntax options:
# A) TZ: UTC
# B) PASSWD: '{{ .Release.Name }}'
# C) PASSWD:
# configMapKeyRef:
# name: config-map-name
# key: key-name
# D) PASSWD:
# valueFrom:
# secretKeyRef:
# name: secret-name
# key: key-name
# ...
# E) - name: TZ
# value: UTC
# F) - name: TZ
# value: '{{ .Release.Name }}'
env:
HOMEPAGE_ALLOWED_HOSTS: home.viktorbarzin.me
# To include environment variables from other configs or other secrets for use in
# Homepage's variable substitutions. Refer to them here.
# envFrom:
# - secretRef:
# name: my-secret
# - configMapRef:
# name: my-configmap
persistence:
logs:
enabled: true
type: emptyDir
mountPath: /app/config/logs
# resources:
# requests:
# memory: 10Mi
# cpu: 10m
# limits:
# memory: 200Mi
# cpu: 500m

View file

@ -593,6 +593,7 @@ module "ingress-immich" {
"gethomepage.dev/description" = "Photos library"
"gethomepage.dev/icon" = "immich.png"
"gethomepage.dev/name" = "Immich"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/widget.type" = "immich"
"gethomepage.dev/widget.url" = "https://immich.viktorbarzin.me"
"gethomepage.dev/pod-selector" = ""

View file

@ -81,4 +81,12 @@ module "ingress" {
namespace = kubernetes_namespace.jsoncrack.metadata[0].name
name = "json"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "JSON Crack"
"gethomepage.dev/description" = "JSON visualizer"
"gethomepage.dev/icon" = "json.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -94,6 +94,14 @@ module "ingress" {
protected = true
backend_protocol = "HTTPS"
port = 443
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Kubernetes Dashboard"
"gethomepage.dev/description" = "Cluster dashboard"
"gethomepage.dev/icon" = "kubernetes-dashboard.png"
"gethomepage.dev/group" = "Core Platform"
"gethomepage.dev/pod-selector" = ""
}
}
# create token with

View file

@ -120,6 +120,14 @@ module "ingress" {
namespace = kubernetes_namespace.kms.metadata[0].name
name = "kms"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "KMS"
"gethomepage.dev/description" = "License activation server"
"gethomepage.dev/icon" = "microsoft.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}
resource "kubernetes_deployment" "windows_kms" {

View file

@ -141,4 +141,12 @@ module "ingress" {
namespace = kubernetes_namespace.linkwarden.metadata[0].name
name = "linkwarden"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Linkwarden"
"gethomepage.dev/description" = "Bookmark manager"
"gethomepage.dev/icon" = "linkwarden.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -108,4 +108,12 @@ module "ingress" {
namespace = kubernetes_namespace.matrix.metadata[0].name
name = "matrix"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Matrix"
"gethomepage.dev/description" = "Secure messaging"
"gethomepage.dev/icon" = "matrix.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -183,4 +183,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
port = 443
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "MeshCentral"
"gethomepage.dev/description" = "Remote management"
"gethomepage.dev/icon" = "meshcentral.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -162,4 +162,12 @@ module "ingress" {
namespace = kubernetes_namespace.n8n.metadata[0].name
name = "n8n"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "n8n"
"gethomepage.dev/description" = "Workflow automation"
"gethomepage.dev/icon" = "n8n.png"
"gethomepage.dev/group" = "Automation"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -152,4 +152,12 @@ module "ingress" {
name = "navidrome"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "8a3844ff75ba"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Navidrome"
"gethomepage.dev/description" = "Music streaming"
"gethomepage.dev/icon" = "navidrome.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -196,4 +196,12 @@ module "ingress" {
name = "netbox"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Netbox"
"gethomepage.dev/description" = "Network documentation"
"gethomepage.dev/icon" = "netbox.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -93,4 +93,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
protected = true
rybbit_site_id = "50e38577e41c"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Networking Toolbox"
"gethomepage.dev/description" = "Network diagnostic tools"
"gethomepage.dev/icon" = "networking.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -190,6 +190,14 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
port = 8080
rybbit_site_id = "5a3bfe59a3fe"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Nextcloud"
"gethomepage.dev/description" = "Cloud productivity suite"
"gethomepage.dev/icon" = "nextcloud.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}
module "whiteboard_ingress" {

View file

@ -171,4 +171,12 @@ module "ingress" {
namespace = kubernetes_namespace.ntfy.metadata[0].name
name = "ntfy"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "ntfy"
"gethomepage.dev/description" = "Push notifications"
"gethomepage.dev/icon" = "ntfy.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -160,6 +160,9 @@ module "ollama-ingress" {
allow_local_access_only = true
ssl_redirect = false
port = 11434
extra_annotations = {
"gethomepage.dev/enabled" = "false"
}
}
# Ollama API ingress for external access (basicAuth protected)
@ -212,6 +215,7 @@ module "ollama-api-ingress" {
port = 11434
extra_annotations = {
"traefik.ingress.kubernetes.io/router.middlewares" = "ollama-ollama-api-basic-auth@kubernetescrd,traefik-rate-limit@kubernetescrd,traefik-crowdsec@kubernetescrd"
"gethomepage.dev/enabled" = "false"
}
}
@ -306,4 +310,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
port = 80
rybbit_site_id = "e73bebea399f"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Ollama"
"gethomepage.dev/description" = "Local LLM inference"
"gethomepage.dev/icon" = "ollama.png"
"gethomepage.dev/group" = "AI & Data"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -199,4 +199,12 @@ module "ingress" {
name = "onlyoffice"
service_name = "onlyoffice-document-server"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "OnlyOffice"
"gethomepage.dev/description" = "Document editor"
"gethomepage.dev/icon" = "onlyoffice.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -650,6 +650,14 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
port = 80
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "OpenClaw"
"gethomepage.dev/description" = "AI assistant"
"gethomepage.dev/icon" = "openai.png"
"gethomepage.dev/group" = "AI & Data"
"gethomepage.dev/pod-selector" = ""
}
}
# --- CronJob: Scheduled cluster health check ---

View file

@ -161,6 +161,12 @@ module "ingress" {
port = 443
extra_annotations = {
"traefik.ingress.kubernetes.io/router.middlewares" = "owntracks-basic-auth@kubernetescrd,traefik-rate-limit@kubernetescrd,traefik-csp-headers@kubernetescrd,traefik-crowdsec@kubernetescrd"
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "OwnTracks"
"gethomepage.dev/description" = "Location tracking"
"gethomepage.dev/icon" = "owntracks.png"
"gethomepage.dev/group" = "Smart Home"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -186,7 +186,7 @@ module "ingress" {
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/description" = "Document library"
# gethomepage.dev/group: Media
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/icon" : "paperless-ngx.png"
"gethomepage.dev/name" = "Paperless-ngx"
"gethomepage.dev/widget.type" = "paperlessngx"

View file

@ -59,6 +59,14 @@ module "ingress" {
name = "authentik"
service_name = "goauthentik-server"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Authentik"
"gethomepage.dev/description" = "Identity provider"
"gethomepage.dev/icon" = "authentik.png"
"gethomepage.dev/group" = "Identity & Security"
"gethomepage.dev/pod-selector" = ""
}
}
module "ingress-outpost" {

View file

@ -109,6 +109,7 @@ lapi:
gethomepage.dev/description: "Web Application Firewall"
gethomepage.dev/icon: "crowdsec.png"
gethomepage.dev/name: "CrowdSec"
gethomepage.dev/group: "Identity & Security"
gethomepage.dev/widget.type: "crowdsec"
gethomepage.dev/widget.url: "http://crowdsec-service.crowdsec.svc.cluster.local:8080"
gethomepage.dev/widget.username: "${homepage_username}"

View file

@ -251,6 +251,14 @@ module "ingress" {
name = "headscale"
port = 8080
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Headscale"
"gethomepage.dev/description" = "VPN mesh network"
"gethomepage.dev/icon" = "headscale.png"
"gethomepage.dev/group" = "Identity & Security"
"gethomepage.dev/pod-selector" = ""
}
}
module "ingress-ui" {

View file

@ -121,6 +121,14 @@ module "ingress" {
name = "k8s-portal"
tls_secret_name = var.tls_secret_name
protected = true # Require Authentik login
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "K8s Portal"
"gethomepage.dev/description" = "Kubernetes portal"
"gethomepage.dev/icon" = "kubernetes.png"
"gethomepage.dev/group" = "Core Platform"
"gethomepage.dev/pod-selector" = ""
}
}
# Unprotected ingress for the setup script (needs to be curl-able without auth)

View file

@ -217,4 +217,12 @@ module "ingress" {
service_name = "roundcubemail"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "082f164faa7d"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Roundcube Mail"
"gethomepage.dev/description" = "Webmail client"
"gethomepage.dev/icon" = "roundcube.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -18,6 +18,16 @@ ingress:
annotations:
traefik.ingress.kubernetes.io/router.middlewares: "traefik-rate-limit@kubernetescrd,traefik-csp-headers@kubernetescrd,traefik-crowdsec@kubernetescrd"
traefik.ingress.kubernetes.io/router.entrypoints: "websecure"
gethomepage.dev/enabled: "true"
gethomepage.dev/name: "Grafana"
gethomepage.dev/description: "Dashboards & observability"
gethomepage.dev/icon: "grafana.png"
gethomepage.dev/group: "Core Platform"
gethomepage.dev/pod-selector: ""
gethomepage.dev/widget.type: "grafana"
gethomepage.dev/widget.url: "http://monitoring-grafana.monitoring.svc.cluster.local"
gethomepage.dev/widget.username: "admin"
gethomepage.dev/widget.password: "${grafana_admin_password}"
tls:
- secretName: "tls-secret"
hosts:

View file

@ -15,6 +15,12 @@ alertmanager:
annotations:
traefik.ingress.kubernetes.io/router.middlewares: "traefik-rate-limit@kubernetescrd,traefik-csp-headers@kubernetescrd,traefik-crowdsec@kubernetescrd,traefik-authentik-forward-auth@kubernetescrd"
traefik.ingress.kubernetes.io/router.entrypoints: "websecure"
gethomepage.dev/enabled: "true"
gethomepage.dev/name: "Alertmanager"
gethomepage.dev/description: "Alert routing"
gethomepage.dev/icon: "alertmanager.png"
gethomepage.dev/group: "Core Platform"
gethomepage.dev/pod-selector: ""
tls:
- secretName: "tls-secret"
hosts:
@ -151,6 +157,7 @@ server:
gethomepage.dev/description: "Prometheus"
gethomepage.dev/icon: "prometheus.png"
gethomepage.dev/name: "Prometheus"
gethomepage.dev/group: "Core Platform"
gethomepage.dev/widget.type: "prometheus"
gethomepage.dev/widget.url: "http://prometheus-server.monitoring.svc.cluster.local:80"
gethomepage.dev/pod-selector: ""

View file

@ -30,7 +30,7 @@ module "pfsense" {
extra_annotations = {
"gethomepage.dev/enabled" : "true"
"gethomepage.dev/description" : "Cluster Firewall"
# gethomepage.dev/group: Media
"gethomepage.dev/group" : "Identity & Security"
"gethomepage.dev/icon" : "pfsense.png"
"gethomepage.dev/name" : "pFsense"
"gethomepage.dev/widget.type" : "pfsense"
@ -58,6 +58,14 @@ module "nas" {
max_body_size = "0m"
depends_on = [kubernetes_namespace.reverse-proxy]
rybbit_site_id = "1e11f8449f7d"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Synology NAS"
"gethomepage.dev/description" = "Network storage"
"gethomepage.dev/icon" = "synology.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
}
# https://files.viktorbarzin.me/
@ -72,6 +80,7 @@ module "nas-files" {
ingress_path = ["/sharing", "/scripts", "/webman", "/wfmlogindialog.js", "/fsdownload"]
max_body_size = "0m"
depends_on = [kubernetes_namespace.reverse-proxy]
extra_annotations = { "gethomepage.dev/enabled" = "false" }
}
# https://idrac.viktorbarzin.me/
@ -83,7 +92,14 @@ module "idrac" {
tls_secret_name = var.tls_secret_name
backend_protocol = "HTTPS"
strip_auth_headers = true
extra_annotations = {}
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "iDRAC"
"gethomepage.dev/description" = "Server management"
"gethomepage.dev/icon" = "dell.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
depends_on = [kubernetes_namespace.reverse-proxy]
}
@ -99,7 +115,7 @@ module "tp-link-gateway" {
depends_on = [kubernetes_namespace.reverse-proxy]
protected = true
strip_auth_headers = true
extra_annotations = {}
extra_annotations = { "gethomepage.dev/enabled" = "false" }
}
# https://truenas.viktorbarzin.me/
@ -114,7 +130,7 @@ module "truenas" {
extra_annotations = {
"gethomepage.dev/enabled" : "true"
"gethomepage.dev/description" : "TrueNAS"
# gethomepage.dev/group: Media
"gethomepage.dev/group" : "Infrastructure"
"gethomepage.dev/icon" : "truenas.png"
"gethomepage.dev/name" : "TrueNAS"
"gethomepage.dev/widget.type" : "truenas"
@ -136,6 +152,14 @@ module "r730" {
tls_secret_name = var.tls_secret_name
backend_protocol = "HTTPS"
depends_on = [kubernetes_namespace.reverse-proxy]
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "R730"
"gethomepage.dev/description" = "Dell PowerEdge server"
"gethomepage.dev/icon" = "dell.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
}
# https://proxmox.viktorbarzin.me/
@ -149,6 +173,14 @@ module "proxmox" {
max_body_size = "0" # unlimited
depends_on = [kubernetes_namespace.reverse-proxy]
rybbit_site_id = "190a7ad3e1c7"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Proxmox"
"gethomepage.dev/description" = "Hypervisor"
"gethomepage.dev/icon" = "proxmox.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
}
# https://registry.viktorbarzin.me/
@ -162,6 +194,12 @@ module "docker-registry-ui" {
extra_annotations = {
# Override middleware chain to remove rate-limit; the UI fires many API calls to list repos/tags
"traefik.ingress.kubernetes.io/router.middlewares" = "traefik-csp-headers@kubernetescrd,traefik-crowdsec@kubernetescrd,traefik-authentik-forward-auth@kubernetescrd"
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Docker Registry"
"gethomepage.dev/description" = "Container registry"
"gethomepage.dev/icon" = "docker.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/pod-selector" = ""
}
}
@ -174,6 +212,7 @@ module "valchedrym" {
port = 80
backend_protocol = "HTTP"
depends_on = [kubernetes_namespace.reverse-proxy]
extra_annotations = { "gethomepage.dev/enabled" = "false" }
}
# https://ip150.viktorbarzin.me/
@ -199,6 +238,7 @@ module "mladost3" {
port = 8080
tls_secret_name = var.tls_secret_name
depends_on = [kubernetes_namespace.reverse-proxy]
extra_annotations = { "gethomepage.dev/enabled" = "false" }
}
# # https://server-switch.viktorbarzin.me/
@ -221,6 +261,14 @@ module "ha-sofia" {
depends_on = [kubernetes_namespace.reverse-proxy]
protected = false
rybbit_site_id = "590fc392690a"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Home Assistant Sofia"
"gethomepage.dev/description" = "Smart home hub"
"gethomepage.dev/icon" = "home-assistant.png"
"gethomepage.dev/group" = "Smart Home"
"gethomepage.dev/pod-selector" = ""
}
}
# https://ha-london.viktorbarzin.me/
@ -232,6 +280,14 @@ module "ha-london" {
tls_secret_name = var.tls_secret_name
depends_on = [kubernetes_namespace.reverse-proxy]
protected = false
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Home Assistant London"
"gethomepage.dev/description" = "Smart home hub"
"gethomepage.dev/icon" = "home-assistant.png"
"gethomepage.dev/group" = "Smart Home"
"gethomepage.dev/pod-selector" = ""
}
}
# https://london.viktorbarzin.me/
@ -266,6 +322,7 @@ module "pi-lights" {
tls_secret_name = var.tls_secret_name
protected = true
depends_on = [kubernetes_namespace.reverse-proxy]
extra_annotations = { "gethomepage.dev/enabled" = "false" }
}
# module "ups" { # .NET app doesn't work well behind host
@ -292,4 +349,5 @@ module "mbp14" {
tls_secret_name = var.tls_secret_name
protected = true
depends_on = [kubernetes_namespace.reverse-proxy]
extra_annotations = { "gethomepage.dev/enabled" = "false" }
}

View file

@ -291,7 +291,7 @@ module "ingress" {
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/description" = "Internal DNS Server and Recursive Resolver"
# gethomepage.dev/group: Media
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/icon" : "technitium.png"
"gethomepage.dev/name" = "Technitium"
"gethomepage.dev/widget.type" = "technitium"

View file

@ -267,6 +267,14 @@ module "ingress" {
port = 8080
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Traefik"
"gethomepage.dev/description" = "Reverse proxy & ingress"
"gethomepage.dev/icon" = "traefik.png"
"gethomepage.dev/group" = "Core Platform"
"gethomepage.dev/pod-selector" = ""
}
}
# Bot-block resilience proxy: nginx reverse proxy in front of Poison Fountain

View file

@ -148,7 +148,7 @@ module "ingress" {
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/description" = "Uptime monitor"
# gethomepage.dev/group: Media
"gethomepage.dev/group" = "Core Platform"
"gethomepage.dev/icon" : "uptime-kuma.png"
"gethomepage.dev/name" = "Uptime Kuma"
"gethomepage.dev/widget.type" = "uptimekuma"

View file

@ -178,4 +178,12 @@ module "ingress" {
name = "vaultwarden"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "b8fc85e18683"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Vaultwarden"
"gethomepage.dev/description" = "Password manager"
"gethomepage.dev/icon" = "vaultwarden.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -84,6 +84,14 @@ module "ingress" {
port = 80
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Goldilocks"
"gethomepage.dev/description" = "Resource recommendations"
"gethomepage.dev/icon" = "goldilocks.png"
"gethomepage.dev/group" = "Core Platform"
"gethomepage.dev/pod-selector" = ""
}
depends_on = [helm_release.goldilocks]
}

View file

@ -108,4 +108,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
custom_content_security_policy = "default-src 'self' blob: data:; img-src 'self' data: blob:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' blob:; worker-src 'self' blob:; connect-src 'self' blob:; frame-ancestors 'self' *.viktorbarzin.me viktorbarzin.me"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Plotting Book"
"gethomepage.dev/description" = "Interactive fiction"
"gethomepage.dev/icon" = "book.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -211,6 +211,14 @@ module "ingress" {
skip_default_rate_limit = true
exclude_crowdsec = true
anti_ai_scraping = false
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Poison Fountain"
"gethomepage.dev/description" = "AI bot trap"
"gethomepage.dev/icon" = "shield.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}
# CronJob to fetch and cache poisoned content from Poison Fountain

View file

@ -118,4 +118,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
rybbit_site_id = "3ae810b0476d"
custom_content_security_policy = "script-src 'self' 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval' https://rybbit.viktorbarzin.me"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "PrivateBin"
"gethomepage.dev/description" = "Encrypted pastebin"
"gethomepage.dev/icon" = "privatebin.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -261,6 +261,14 @@ module "ingress" {
service_name = "realestate-crawler-ui"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "edee05de453d"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Wrongmove"
"gethomepage.dev/description" = "Property search"
"gethomepage.dev/icon" = "home-assistant.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}
module "ingress-api" {
@ -271,6 +279,9 @@ module "ingress-api" {
service_name = "realestate-crawler-api"
ingress_path = ["/api"]
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "false"
}
}

View file

@ -295,4 +295,12 @@ module "ingress" {
namespace = kubernetes_namespace.resume.metadata[0].name
name = "resume"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Resume"
"gethomepage.dev/description" = "Online resume"
"gethomepage.dev/icon" = "resume.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -444,6 +444,14 @@ module "ingress" {
service_name = "rybbit-client"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "3c476801a777"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Rybbit"
"gethomepage.dev/description" = "Web analytics"
"gethomepage.dev/icon" = "rybbit.png"
"gethomepage.dev/group" = "Finance & Personal"
"gethomepage.dev/pod-selector" = ""
}
}
module "ingress-api" {
@ -454,4 +462,7 @@ module "ingress-api" {
service_name = "rybbit"
ingress_path = ["/api"]
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "false"
}
}

View file

@ -138,4 +138,12 @@ module "ingress" {
tls_secret_name = var.tls_secret_name
port = 1443
rybbit_site_id = "c1b8f8aa831b"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Send"
"gethomepage.dev/description" = "Encrypted file sharing"
"gethomepage.dev/icon" = "firefox-send.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -118,4 +118,12 @@ module "ingress" {
name = "aiostreams"
tls_secret_name = var.tls_secret_name
# protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "AIOStreams"
"gethomepage.dev/description" = "Streaming addon manager"
"gethomepage.dev/icon" = "stremio.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -67,8 +67,12 @@ module "ingress" {
name = "flaresolverr"
tls_secret_name = var.tls_secret_name
protected = true
# extra_annotations = {
# "nginx.ingress.kubernetes.io/proxy-body-size" : "1G" // allow uploading .torrent files
# }
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "FlareSolverr"
"gethomepage.dev/description" = "Captcha solver proxy"
"gethomepage.dev/icon" = "flaresolverr.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -112,4 +112,12 @@ module "ingress" {
name = "listenarr"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Listenarr"
"gethomepage.dev/description" = "Podcast manager"
"gethomepage.dev/icon" = "podcast.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -122,4 +122,12 @@ module "ingress" {
name = "prowlarr"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Prowlarr"
"gethomepage.dev/description" = "Indexer manager"
"gethomepage.dev/icon" = "prowlarr.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -155,4 +155,12 @@ module "ingress" {
name = "qbittorrent"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "qBittorrent"
"gethomepage.dev/description" = "BitTorrent client"
"gethomepage.dev/icon" = "qbittorrent.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -173,4 +173,14 @@ module "ingress" {
name = "speedtest"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Speedtest"
"gethomepage.dev/description" = "Internet speed tracker"
"gethomepage.dev/icon" = "speedtest-tracker.png"
"gethomepage.dev/group" = "Infrastructure"
"gethomepage.dev/widget.type" = "speedtest"
"gethomepage.dev/widget.url" = "https://speedtest.viktorbarzin.me"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -112,4 +112,12 @@ module "ingress" {
name = "stirling-pdf"
tls_secret_name = var.tls_secret_name
rybbit_site_id = "a55ac54ec749"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Stirling PDF"
"gethomepage.dev/description" = "PDF toolkit"
"gethomepage.dev/icon" = "stirling-pdf.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -199,4 +199,12 @@ module "ingress" {
namespace = kubernetes_namespace.tandoor.metadata[0].name
name = "tandoor"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Tandoor"
"gethomepage.dev/description" = "Recipe manager"
"gethomepage.dev/icon" = "tandoor.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -484,4 +484,12 @@ module "ingress" {
service_name = "trading-bot-frontend"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Trading Bot"
"gethomepage.dev/description" = "Automated trading"
"gethomepage.dev/icon" = "alpaca.png"
"gethomepage.dev/group" = "Finance & Personal"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -101,4 +101,12 @@ module "ingress" {
name = "travel"
tls_secret_name = var.tls_secret_name
service_name = "travel-blog"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Travel Blog"
"gethomepage.dev/description" = "Travel stories"
"gethomepage.dev/icon" = "ghost.png"
"gethomepage.dev/group" = "Other"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -120,4 +120,12 @@ module "ingress" {
namespace = kubernetes_namespace.tuya-bridge.metadata[0].name
name = "tuya-bridge"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Tuya Bridge"
"gethomepage.dev/description" = "Smart device bridge"
"gethomepage.dev/icon" = "tuya-smart.png"
"gethomepage.dev/group" = "Smart Home"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -204,12 +204,19 @@ resource "kubernetes_service" "shlink" {
}
module "ingress" {
source = "../../modules/kubernetes/ingress_factory"
namespace = kubernetes_namespace.shlink.metadata[0].name
name = "url"
service_name = "shlink"
tls_secret_name = var.tls_secret_name
extra_annotations = {}
source = "../../modules/kubernetes/ingress_factory"
namespace = kubernetes_namespace.shlink.metadata[0].name
name = "url"
service_name = "shlink"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Shlink"
"gethomepage.dev/description" = "URL shortener"
"gethomepage.dev/icon" = "shlink.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}
@ -341,4 +348,12 @@ module "ingress-web" {
service_name = "shlink-web"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "false"
"gethomepage.dev/name" = "Shlink Web"
"gethomepage.dev/description" = "URL shortener web client"
"gethomepage.dev/icon" = "shlink.png"
"gethomepage.dev/group" = "Productivity"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -151,4 +151,12 @@ module "ingress" {
name = "wealthfolio"
tls_secret_name = var.tls_secret_name
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Wealthfolio"
"gethomepage.dev/description" = "Investment portfolio tracker"
"gethomepage.dev/icon" = "wealthfolio.png"
"gethomepage.dev/group" = "Finance & Personal"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -218,4 +218,12 @@ module "ingress" {
name = "webhook-handler"
host = "webhook"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Webhook Handler"
"gethomepage.dev/description" = "Webhook relay"
"gethomepage.dev/icon" = "webhook.png"
"gethomepage.dev/group" = "Automation"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -205,4 +205,12 @@ module "ingress" {
name = "ci"
service_name = "woodpecker-server"
tls_secret_name = var.tls_secret_name
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "Woodpecker CI"
"gethomepage.dev/description" = "CI/CD pipelines"
"gethomepage.dev/icon" = "woodpecker-ci.png"
"gethomepage.dev/group" = "Development & CI"
"gethomepage.dev/pod-selector" = ""
}
}

View file

@ -154,6 +154,14 @@ module "ingress" {
name = "ytdlp"
tls_secret_name = var.tls_secret_name
host = "yt"
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "yt-dlp"
"gethomepage.dev/description" = "Video downloader"
"gethomepage.dev/icon" = "youtube-dl.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}
# ----------------------
@ -349,4 +357,12 @@ module "highlights_ingress" {
tls_secret_name = var.tls_secret_name
host = "yt-highlights"
protected = true
extra_annotations = {
"gethomepage.dev/enabled" = "true"
"gethomepage.dev/name" = "YT Highlights"
"gethomepage.dev/description" = "AI video highlights"
"gethomepage.dev/icon" = "youtube.png"
"gethomepage.dev/group" = "Media & Entertainment"
"gethomepage.dev/pod-selector" = ""
}
}