- Infrastructure:
    - Portainer (swarm):
        href: https://portainer.mydomain.com
        icon: portainer.png
        description: the three managers and every stack on them
        widget:
          type: portainer
          url: http://192.168.1.45:9000
          env: 13
          key: "{{HOMEPAGE_FILE_PORTAINER_KEY}}"
    - Portainer (syn02):
        href: https://portainer.mydomain.com
        icon: portainer.png
        description: Synology NAS
        widget:
          type: portainer
          url: http://192.168.1.45:9000
          env: 34
          key: "{{HOMEPAGE_FILE_PORTAINER_KEY}}"
    - Portainer (pi-zwave01):
        href: https://portainer.mydomain.com
        icon: portainer.png
        description: Raspberry Pi, Z-Wave and Thread
        widget:
          type: portainer
          url: http://192.168.1.45:9000
          env: 37
          key: "{{HOMEPAGE_FILE_PORTAINER_KEY}}"
    - Portainer (truenas1):
        href: https://portainer.mydomain.com
        icon: portainer.png
        description: NAS apps, frigate and arrstack
        widget:
          type: portainer
          url: http://192.168.1.45:9000
          env: 47
          key: "{{HOMEPAGE_FILE_PORTAINER_KEY}}"
    - TrueNAS:
        href: https://truenas1.mydomain.com
        icon: truenas.png
        description: NAS, apps and storage
        widget:
          type: truenas
          url: https://192.168.1.86
          version: 2
          key: "{{HOMEPAGE_FILE_TRUENAS_KEY}}"
          enablePools: true
    - UniFi:
        href: https://unifi.mydomain.com
        icon: unifi.png
        description: Network controller, gateway and APs
        widget:
          type: unifi
          url: https://192.168.1.1
          key: "{{HOMEPAGE_FILE_UNIFI_KEY}}"
    - Nginx Proxy Manager:
        href: https://npm.mydomain.com
        server: swarm
        container: npm_app
        icon: nginx-proxy-manager.png
        description: Reverse proxy and its certificates
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/swarm_nginx-proxy-manager/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Traefik:
        href: https://traefik.mydomain.com/
        server: swarm
        container: traefik_traefik
        icon: traefik.png
        description: Reverse proxy on 443, from services.yaml
        widget:
          type: traefik
          url: http://traefik_traefik:8080
    - Proxmox:
        href: https://proxmox.mydomain.com
        icon: proxmox.png
        description: Three-node cluster, VMs and LXC
        widget:
          type: proxmox
          url: https://proxmox.mydomain.com
          username: pve-auditor@pam!homepage
          password: "{{HOMEPAGE_FILE_PROXMOX_KEY}}"
    - pve1:
        href: https://pve1.mydomain.com:8006
        icon: proxmox.png
        description: Physical, Proxmox VE node
        widget:
          type: proxmox
          url: https://proxmox.mydomain.com
          username: pve-auditor@pam!homepage
          password: "{{HOMEPAGE_FILE_PROXMOX_KEY}}"
          node: pve1
    - pve2:
        href: https://pve2.mydomain.com:8006
        icon: proxmox.png
        description: Physical, Proxmox VE node
        widget:
          type: proxmox
          url: https://proxmox.mydomain.com
          username: pve-auditor@pam!homepage
          password: "{{HOMEPAGE_FILE_PROXMOX_KEY}}"
          node: pve2
    - pve3:
        href: https://pve3.mydomain.com:8006
        icon: proxmox.png
        description: Physical, Proxmox VE node
        widget:
          type: proxmox
          url: https://proxmox.mydomain.com
          username: pve-auditor@pam!homepage
          password: "{{HOMEPAGE_FILE_PROXMOX_KEY}}"
          node: pve3

- Glances:
    - truenas1:
        id: glances-truenas1
        href: https://glances-truenas1.mydomain.com
        icon: truenas.png
        description: Physical, NAS, apps and storage
        widget:
          type: glances
          url: http://192.168.1.86:61208
          version: 4
          metric: info
    - syn02:
        id: glances-syn02
        href: https://glances-syn02.mydomain.com
        icon: synology.png
        description: Physical, Synology NAS
        widget:
          type: glances
          url: http://192.168.1.31:61208
          version: 4
          metric: info
    - pi-zwave01:
        id: glances-pi-zwave01
        href: https://glances-pi-zwave01.mydomain.com
        icon: raspberry-pi.png
        description: Physical, the Z-Wave, Zigbee and Thread radios
        widget:
          type: glances
          url: http://192.168.1.96:61208
          version: 4
          metric: info
    - pve1:
        id: glances-pve1
        href: https://glances-pve1.mydomain.com
        icon: proxmox.png
        description: Physical, Proxmox VE node
        widget:
          type: glances
          url: http://192.168.1.81:61208
          version: 4
          metric: info
    - pve2:
        id: glances-pve2
        href: https://glances-pve2.mydomain.com
        icon: proxmox.png
        description: Physical, Proxmox VE node
        widget:
          type: glances
          url: http://192.168.1.82:61208
          version: 4
          metric: info
    - pve3:
        id: glances-pve3
        href: https://glances-pve3.mydomain.com
        icon: proxmox.png
        description: Physical, Proxmox VE node
        widget:
          type: glances
          url: http://192.168.1.83:61208
          version: 4
          metric: info
    - Docker01:
        id: glances-docker01
        href: https://glances-docker01.mydomain.com
        icon: docker.png
        description: VM, swarm manager (HA)
        widget:
          type: glances
          url: http://192.168.1.41:61208
          version: 4
          metric: info
    - Docker02:
        id: glances-docker02
        href: https://glances-docker02.mydomain.com
        icon: docker.png
        description: VM, swarm manager (HA)
        widget:
          type: glances
          url: http://192.168.1.42:61208
          version: 4
          metric: info
    - docker03:
        id: glances-docker03
        href: https://glances-docker03.mydomain.com
        icon: docker.png
        description: VM, swarm manager (HA)
        widget:
          type: glances
          url: http://192.168.1.43:61208
          version: 4
          metric: info

- Plumbing:
    - NPM database:
        icon: mariadb.png
        description: MariaDB behind Nginx Proxy Manager
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_npm-database/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - WordPress database:
        icon: mariadb.png
        description: MariaDB behind wordpress2025
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_wordpress-database/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Mosquitto:
        icon: mosquitto.png
        description: MQTT broker, 1883
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_mosquitto/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - OAuth2 Proxy:
        icon: oauth2-proxy.png
        description: Auth in front of the proxied services
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_oauth2-proxy/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Cloudflare DDNS:
        icon: cloudflare.png
        description: Keeps the external A record current
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_cloudflare-ddns/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - ACME (Synology):
        icon: lets-encrypt.png
        description: Renews the syn02 certificate
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_acme-synology/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - ACME (ASRock BMC):
        icon: lets-encrypt.png
        description: Renews the BMC certificate
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_acme-asrock-bmc/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - ACME (Traefik):
        icon: lets-encrypt.png
        description: Traefik's *.mydomain.com certificate
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_acme-traefik/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Docker Autolabel:
        icon: docker.png
        description: Applies node labels from servicelist.txt
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_docker-autolabel/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Docker Proxy (swarm):
        icon: docker.png
        description: Read-only Docker API, overlay only
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_docker-proxy-swarm/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Docker Proxy (truenas1):
        icon: docker.png
        description: Read-only Docker API, LAN exposed
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_docker-proxy-truenas1/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Config sync (gatus):
        icon: git.png
        description: Delivers gatus's checks from git
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_config-sync-gatus/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Config sync (homepage):
        icon: git.png
        description: Delivers the dashboard's config from git
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_config-sync-homepage/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Dozzle agent (Docker01):
        icon: dozzle.png
        description: Feeds the Dozzle hub
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_dozzle-agent-docker01/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Dozzle agent (Docker02):
        icon: dozzle.png
        description: Feeds the Dozzle hub
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_dozzle-agent-docker02/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Dozzle agent (docker03):
        icon: dozzle.png
        description: Feeds the Dozzle hub
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_dozzle-agent-docker03/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Dozzle agent (truenas1):
        icon: dozzle.png
        description: Feeds the Dozzle hub
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_dozzle-agent-truenas1/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Dozzle agent (syn02):
        icon: dozzle.png
        description: Feeds the Dozzle hub
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_dozzle-agent-syn02/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Dozzle agent (pi-zwave01):
        icon: dozzle.png
        description: Feeds the Dozzle hub
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_dozzle-agent-pi-zwave01/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Portainer agent (Docker01):
        icon: portainer.png
        description: Portainer's edge into Docker01
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_portainer-agent-docker01/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Portainer agent (Docker02):
        icon: portainer.png
        description: Portainer's edge into Docker02
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_portainer-agent-docker02/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Portainer agent (docker03):
        icon: portainer.png
        description: Portainer's edge into docker03
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_portainer-agent-docker03/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Portainer agent (truenas1):
        icon: portainer.png
        description: Portainer's edge into truenas1
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_portainer-agent-truenas1/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Portainer agent (syn02):
        icon: portainer.png
        description: Portainer's edge into syn02
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_portainer-agent-syn02/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Portainer agent (pi-zwave01):
        icon: portainer.png
        description: Portainer's edge into pi-zwave01
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_portainer-agent-pi-zwave01/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - FlareSolverr:
        icon: flaresolverr.png
        description: Solves indexer challenges for prowlarr
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_flaresolverr/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Ollama:
        icon: ollama.png
        description: Local model serving, API only
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_ollama/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
    - Open WebUI Redis:
        icon: redis.png
        description: Session store for Open WebUI
        widget:
          type: customapi
          url: http://192.168.1.45:8085/api/v1/endpoints/plumbing_open-webui-redis/statuses?page=1&pageSize=1
          refreshInterval: 60000
          mappings:
            - field: results.0.success
              label: Gatus
              format: text
              remap:
                - value: true
                  to: UP
                - value: false
                  to: DOWN
                - any: true
                  to: "?"
            - field: results.0.duration
              label: Response
              format: float
              scale: "1/1000000"
              suffix: ms
