- Website: www.akkolli.net has no DNS record, use akkolli.net instead
- Uptime: treat any response < 500 as up (was res.ok / 200-299 only).
Nextcloud returns non-200 for untrusted Host headers but is still
running. Only 5xx and network errors count as down.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The standalone output only includes modules Next.js traces for its own
routes. sqlite gets webpack-bundled so it's not in node_modules/ for
monitor.js to require(). Explicitly copy both packages from the builder.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Copy monitor.js into the standalone build stage (was missing entirely)
- Remove node-fetch require — Node 18 has global fetch built-in
- Switch from bind mount (./data) to named volume (dashboard-data) so
Docker manages permissions correctly for the nextjs user
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Read visitors from /server_storage/visitors.db (webserver's DB) instead of
admin dash's own table; geoip lookups at query time for globe markers
- Globe card now shows 24h, 7d, and all-time unique visitor counts
- Uptime monitor: Nextcloud via host.docker.internal for Docker networking,
Website and Gitea monitored on public domains
- UptimeCard uses real hourly history bars instead of Math.random() mock
- docker-compose: mount /server_storage:ro, add extra_hosts for Linux compat
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>