# [[Homepage Infra Dashboard|Homepage]]
_Jun 5, 2025_
>[!info] Quick Links
> - **Documentation**: https://gethomepage.dev/
> - **Github**: https://github.com/gethomepage/homepage
Homepage is a simple app which provides a useful _homepage_ to reach all the services you manage, and even provides small informational widgets for some services.
It has[ an extensive third-party library of widgets](https://gethomepage.dev/widgets/) that can provide pretty upto information about your services.
## Quick Overview
I would highly recommend Christian Lempa's video on Homepage to quickly get upto speed with Homepage, see what is possible and how to configure it.

## Important Notes
### Secrets
([This information](https://gethomepage.dev/installation/docker/#using-environment-secrets) is oddly tucked away inside the docker documentation.)
Secrets in configuration files are referenced using template tags. e.g. The Cloudflare widget has this configuration.
```yaml
- Cloudflare:
href: https://dash.cloudflare.com/
description: Cloudflare Dashboard
icon: cloudflare
widget:
type: cloudflared
accountid: xxxxxxxxxxxxxxxx
tunnelid: yyyyyyyyyyyyyyy
key: "{{HOMEPAGE_VAR_CLOUDFLARE_API_KEY}}"
```
>[!warning] No spaces within braces
>This has made me lose hours the first time. There should be no spaces inside the braces. i.e. if you try to use `{{ HOMEPAGE_VAR_CLOUDFLARE_API_KEY }}` (spaces after and before the ending brace pairs) it will *not* work!
An environment variable of the same name is expected with the actual value.
Since I use docker compose, I need to add it in two steps:
1. in the compose file:
```yaml
...
environment:
HOMEPAGE_VAR_CLOUDFLARE_API_KEY: $HOMEPAGE_VAR_CLOUDFLARE_API_KEY
```
2. And then the `.env` file will have the secret
```yaml
...
HOMEPAGE_VAR_CLOUDFLARE_API_KEY=abcdef
```
## My customizations
### Adding Kagi as a search engine
Using the reference for the [search information widget](https://gethomepage.dev/widgets/info/search/), I configured Kagi as my search provider.
```yaml
- search:
provider: custom
url: https://kagi.com/search?q=
target: _blank
suggestionUrl: https://kagi.com/api/autosuggest?q=
showSearchSuggestions: true
focus: true
```
### Widget : Cloudflare tunnels
[Reference](https://gethomepage.dev/widgets/services/cloudflared/)
- Create an API token with the _Tunnel Read_ perms. It should look like this
![[cloudflare token perm homepage widget.png]]
- Test the token by running:
```shell
curl -s https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/cfd_tunnel \
-H "Authorization: Bearer $TOKEN" \
| jq -cr '.result[] | select(.status == "healthy") | {name,id}'
```
This will also give you the tunnel ids to use in the widget configuration.
## Others
Other widgets I have used are:
- [NextDNS](https://gethomepage.dev/widgets/services/nextdns/): Gives stats on requests blocked and allowed.
- [Healthchecks.io](https://gethomepage.dev/widgets/services/healthchecks/): Gives a count of targets which are up.
- [Grafana](https://gethomepage.dev/widgets/services/grafana/): Needs an account with server admin privs. Yikes. It should dashboard counts (useless), data source counts (useless), alerts count and alerts triggered. Somewhat useful if I used Grafana for alerting.
- [Home Assistant](https://gethomepage.dev/widgets/services/homeassistant/): This might be useful. In the process of setting it up.
- [Synology DSM](https://gethomepage.dev/widgets/services/diskstation/): Couldn't really set it up because it doesn't work with 2FA. Who is running their NAS without 2FA?
---
tags: #homelab