294be265002323b388fdf3e994a0d3a5d5f0c6eb
Fastify only sees plain HTTP -- TLS terminates at NPM/Cloudflare before reaching this process. Building the callback's currentUrl from req.headers.host with a hardcoded "http://" sent redirect_uri=http://monitor.jerodrigged.com/... during the token exchange, which Authentik rejects (logged as generic "invalid_client" to the client, but its own event log said plainly: "Invalid redirect URI used by provider"). Fixed by reusing the known-correct redirectUri's origin and only taking the query string from the actual request, instead of trying to infer scheme from headers. Also fixes the Playwright OIDC test's selectors (Authentik's password field has no <label> association -- placeholder text, not getByLabel). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Homelab Monitor
A single dashboard for the health of everything in the homelab (documented in
jhodgkin/homelab): Proxmox host + LXC
CPU/mem/disk/pressure, and — as the backlog fills in — SSH-monitored bare-metal boxes, a LAN
device inventory, and Zabbix alerts. One login instead of N.
Project status, architecture, and how to resume work: see CLAUDE.md.
Roadmap: Gitea issues, milestone v1-dashboard.
Local development
# terminal 1
cd apps/api && npm install && cp ../../.env.example ../../.env # fill in .env first
npm run dev
# terminal 2
cd apps/web && npm install && npm run dev
Web dev server proxies /api to localhost:3000 (see apps/web/vite.config.ts).
Production deploy
Runs as Docker Compose on CT122 (homelab-monitor, 192.168.1.103):
ssh homelab-monitor
cd /opt/homelab-monitor
git pull
docker compose up -d --build
Description
Unified dashboard for monitoring the homelab: server health, resource usage, and LAN device inventory.
Languages
TypeScript
87.1%
Shell
6.9%
CSS
4.9%
Dockerfile
0.8%
HTML
0.3%