Summary
Add Speedtest Tracker as a self-hosted service that runs periodic internet speed tests and exposes results via a web UI and API. Wire it into the Homepage dashboard using the built-in speedtest widget.
Context
This repo runs a Docker Compose home server stack on Ubuntu Server (192.168.0.243). All services share a single proxy bridge network and are routed through Traefik with wildcard TLS certs for *.woggles.work. Homepage dashboard config lives in homepage/config/.
The target subdomain is speedtest.woggles.work.
Files to change
1. docker-compose.yml
Add a new speedtest-tracker service following the same pattern as existing services:
- Image:
lscr.io/linuxserver/speedtest-tracker:latest
- Container name:
speedtest-tracker
PUID=1000, PGID=1000, TZ=${TZ:-America/New_York}
APP_KEY env var from .env — required by the app (Laravel app key, format: base64:<32-byte-base64-string>). Generate with: echo "base64:$(openssl rand -base64 32)"
DB_CONNECTION=sqlite (no external DB needed)
- Volume:
./speedtest-tracker/config:/config
- Network:
proxy
- Traefik labels for
speedtest.woggles.work on websecure, cert resolver cloudflare, internal port 80
restart: unless-stopped
Also add to the homepage service environment: block:
- HOMEPAGE_VAR_SPEEDTEST_API_KEY=${SPEEDTEST_API_KEY:-}
2. homepage/config/services.yaml
Add a new entry to the Network group (or create an ISP group if preferred):
- Speedtest Tracker:
href: https://speedtest.woggles.work
description: Periodic internet speed tests
icon: speedtest-tracker
widget:
type: speedtest
url: http://speedtest-tracker:80
key: "{{HOMEPAGE_VAR_SPEEDTEST_API_KEY}}"
3. .env.example
Add two new variables:
# Speedtest Tracker
# APP_KEY is required — generate with: echo "base64:$(openssl rand -base64 32)"
SPEEDTEST_TRACKER_APP_KEY=
# API key for Homepage widget (Settings > API Tokens in Speedtest Tracker UI after first run)
SPEEDTEST_API_KEY=
Constraints & conventions to follow
- Run
./scripts/lint-config.sh before opening a PR — it validates that every {{HOMEPAGE_VAR_*}} in services.yaml is wired into docker-compose.yml and every bare ${VAR} in docker-compose.yml exists in .env.example.
- Use a feature branch, not main. One PR for this feature only.
- Follow the exact indentation and ordering style of existing services in each file.
- The
APP_KEY must be passed as SPEEDTEST_TRACKER_APP_KEY in .env / .env.example and referenced in docker-compose.yml as APP_KEY: ${SPEEDTEST_TRACKER_APP_KEY} to avoid name collisions.
Acceptance criteria
Summary
Add Speedtest Tracker as a self-hosted service that runs periodic internet speed tests and exposes results via a web UI and API. Wire it into the Homepage dashboard using the built-in
speedtestwidget.Context
This repo runs a Docker Compose home server stack on Ubuntu Server (192.168.0.243). All services share a single
proxybridge network and are routed through Traefik with wildcard TLS certs for*.woggles.work. Homepage dashboard config lives inhomepage/config/.The target subdomain is
speedtest.woggles.work.Files to change
1.
docker-compose.ymlAdd a new
speedtest-trackerservice following the same pattern as existing services:lscr.io/linuxserver/speedtest-tracker:latestspeedtest-trackerPUID=1000,PGID=1000,TZ=${TZ:-America/New_York}APP_KEYenv var from.env— required by the app (Laravel app key, format:base64:<32-byte-base64-string>). Generate with:echo "base64:$(openssl rand -base64 32)"DB_CONNECTION=sqlite(no external DB needed)./speedtest-tracker/config:/configproxyspeedtest.woggles.workonwebsecure, cert resolvercloudflare, internal port80restart: unless-stoppedAlso add to the
homepageserviceenvironment:block:- HOMEPAGE_VAR_SPEEDTEST_API_KEY=${SPEEDTEST_API_KEY:-}2.
homepage/config/services.yamlAdd a new entry to the Network group (or create an ISP group if preferred):
3.
.env.exampleAdd two new variables:
Constraints & conventions to follow
./scripts/lint-config.shbefore opening a PR — it validates that every{{HOMEPAGE_VAR_*}}inservices.yamlis wired intodocker-compose.ymland every bare${VAR}indocker-compose.ymlexists in.env.example.APP_KEYmust be passed asSPEEDTEST_TRACKER_APP_KEYin.env/.env.exampleand referenced indocker-compose.ymlasAPP_KEY: ${SPEEDTEST_TRACKER_APP_KEY}to avoid name collisions.Acceptance criteria
speedtest-trackerservice defined indocker-compose.ymlwith correct env vars, volume, network, and Traefik labelsenvironment:block includesHOMEPAGE_VAR_SPEEDTEST_API_KEYhomepage/config/services.yamlincludes a Speedtest Tracker entry with thespeedtestwidget.env.exampledocuments bothSPEEDTEST_TRACKER_APP_KEYandSPEEDTEST_API_KEYwith comments./scripts/lint-config.shexits 0