You've got Immich on one subdomain, Gitea on another, Uptime Kuma on a third, and a bookmark folder with twelve URLs you click from muscle memory — half of which you haven't updated since you moved everything behind Tailscale. What you wanted wasn't another RSS reader. You wanted a launch pad that shows whether Plex is actually running.
Homepage (gethomepage/homepage) is that launch pad. ~31k GitHub stars, a polished Next.js dashboard, and integrations with 100+ self-hosted services — Jellyfin, Sonarr, Pi-hole, qBittorrent, Uptime Kuma, Immich, and the whole *arr stack. Click-through links plus live widgets that pull stats from each app's API.
What it actually does
Homepage is a homelab services dashboard. YAML config files define your services, bookmarks, header widgets, and layout. The page is statically generated for fast loads; API calls to your backends go through Homepage's proxy so API keys never hit the browser.
Service tiles with widgets. Each entry in services.yaml gets an icon, link, and optional widget — Tautulli stats on Plex, download counts on qBittorrent, blocklist numbers on Pi-hole, status from Uptime Kuma. One glance tells you if the stack is healthy before you click in.
Docker auto-discovery. Mount the Docker socket (read-only) and label containers — Homepage discovers services automatically. Add a new container, label it, refresh — it appears on the board without hand-editing YAML for every deploy.
Header widgets. Weather, search, datetime, system resources via Glances — configured in widgets.yaml, separate from service tiles.
Secrets done right. API keys go in environment variables as HOMEPAGE_VAR_* and reference as {{HOMEPAGE_VAR_PLEX_TOKEN}} in YAML — not committed to git in plain text.
Customization. Themes, custom CSS/JS, 40+ languages, multiple layout styles. Looks good out of the box; homelabbers still spend Sunday afternoon tuning colors anyway.
Homepage vs Glance
We covered Glance as a feed reader start page — RSS, Hacker News, Reddit, stock tickers, morning news in columns.
Homepage is the services command centre — links to your apps with API-powered status widgets. Pick Glance for "what's happening on the internet." Pick Homepage for "what's running in my homelab." Many people set Homepage as the browser start page and keep Glance for news — or run one on home.domain and skip the other if bookmark sprawl doesn't bother you.
Why self-host?
One pane of glass for internal tools. Agencies and homelabbers with fifteen self-hosted apps stop maintaining a spreadsheet of URLs.
API keys stay server-side. Homepage proxies widget requests — tokens for Plex, Sonarr, or your NAS don't ship to every browser session as JavaScript.
Canadian VPS friendly. Lightweight container on port 3000, shares a box with the services it links to. Config is YAML on a volume — back it up, version it in private git.
No third-party start.me account. Your service map isn't on someone else's platform.
What running it takes
Docker image: ghcr.io/gethomepage/homepage:latest on port 3000.
services:
homepage:
image: ghcr.io/gethomepage/homepage:latest
container_name: homepage
environment:
HOMEPAGE_ALLOWED_HOSTS: home.yourdomain.ca
ports:
- 3000:3000
volumes:
- ./homepage-config:/app/config
- /var/run/docker.sock:/var/run/docker.sock:ro
restart: unless-stopped
HOMEPAGE_ALLOWED_HOSTS is required — set it to your public hostname. Copy the skeleton config from the docs into /app/config on first run: services.yaml, widgets.yaml, settings.yaml, bookmarks.yaml.
Security — read this. Homepage has no built-in login. Widgets can surface data from home automation, media servers, and monitoring tools. Put it behind a reverse proxy with auth (Authelia, Authentik, basic auth, or VPN-only access). TLS mandatory if it's reachable from the internet.
Sizing: modest RAM — hundreds of MB. CPU spikes briefly at build/refresh when many widgets poll APIs. Mount Docker socket read-only only.
Who it's for (and who should skip it)
Good fit: homelabbers with a growing Docker stack, media server households (*arr + Jellyfin crowd), small teams wanting one internal landing page, anyone who bookmarked twelve services and wants live status on each.
Maybe skip it: if you want RSS and news feeds — Glance fits better. If you have three links total, a static HTML bookmark page is less ops. If you expose it publicly without proxy auth, you're showing the world your internal service map — fix that first or don't deploy.
Hosting it in Canada
We run Homepage on Canadian Docker hosting — TLS, reverse-proxy auth, Docker label discovery, and config backups on the volume. Wire it to the Uptime Kuma and Immich instances we already host for clients on the same VPS.
Tell us how many services you're linking — we'll set up Homepage with a sensible services.yaml starter and lock it behind auth before it goes public.