Add Reactive Resume, Metrics, Kiwix, Resume Matcher, and Apple Health
from the earlier SelfStack project. Rewrite Apple Health collector to
use InfluxDB v2 with proper error handling. Update all tests, scripts,
Homepage config, env template, and documentation for the expanded stack.
New services:
- Reactive Resume (4016) + Postgres/Minio/Chrome companions
- Metrics (4021) - GitHub metrics visualization
- Kiwix (4022) - offline wiki reader
- Resume Matcher (4023) - AI resume screening
- Apple Health (4024) - health data collector → InfluxDB v2
Also adds git policy to AGENTS.md: always commit and push automatically.
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Set HOMEPAGE_ALLOWED_HOSTS=* so Homepage accepts requests from
localhost, LAN IPs, and Tailscale FQDNs (appropriate for demo)
- Add host validation to docker-compose.yml.template and demo.env.template
- Bootstrap HOMEPAGE_ALLOWED_HOSTS in ensure_env() for existing installs
- Harden Playwright tests: check for "host validation failed" and
"internal server error" text, verify page titles, use stronger
content assertions based on actual rendered content
- Pin @playwright/test to exact 1.52.0 (no caret) to prevent npm
resolving to a version incompatible with the Docker image
- Gitignore additional Homepage auto-generated files (custom.css/js,
proxmox.yaml)
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
- Add Playwright E2E test suite covering all 13 user-facing services
- Fix Homepage HTTP 500 by removing read-only bind mount (:ro) so it
can create its required logs/ directory
- Pin @playwright/test to exact 1.52.0 to match Docker image browsers
- Add .gitignore entries for auto-generated Homepage files and
Playwright artifacts
- All 13 Playwright tests passing (Chromium headless)
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>
Rewrite demo-stack.sh, demo-test.sh, validate-all.sh, and all test
files to match the current 16-service stack reality.
Key changes:
- demo-stack.sh: full rewrite with deploy/stop/restart/status/smoke/summary
- demo-test.sh: fix hardcoded kneldevstack filter to use $COMPOSE_PROJECT_NAME,
raise volume threshold from 10 to 15, remove curl dependency (use /dev/tcp),
fix security compliance check for Dockhand direct socket mount
- validate-all.sh: remove port 4005 check (internal only), add missing env
var validation (TA_PASSWORD, ELASTIC_PASSWORD, GF_*, PIHOLE_WEBPASSWORD)
- integration tests: fix container names, add TubeArchivist companion tests
- e2e tests: use correct project-relative paths, dynamic port lists from env
- Add fix-and-ship.sh as convenience wrapper for demo-stack.sh
- Remove stale tmp_template.yml
💘 Generated with Crush
Assisted-by: GLM-5.1 via Crush <crush@charm.land>