Ghost 6.x redirects all HTTP requests to the configured external URL.
- Docker healthcheck: use node http.get (accepts 301 as healthy)
- Controller probe: switch from api (expect 200) to http (any response)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each app template now declares a healthcheck: section in .felhom.yml
with appropriate probe type (http, api, or tcp) and endpoint based on
the app's known health endpoints. The controller uses these to verify
services are actually responding, not just that containers are running.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The vikunja/vikunja:0.24.6 image is a scratch/distroless build with
only the Go binary. wget, curl, sh, and all other utilities are
missing, making in-container healthchecks impossible.
Removing the healthcheck lets the controller detect the container
as "running" directly from Docker state, which is the correct
behavior for shell-less images.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Vikunja 0.24.6 runs as uid=1000 but named Docker volumes are
created with root ownership, causing permission denied on /db.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hungarian recipe scraper for Mealie & Tandoor. Supports mindmegette.hu,
streetkitchen.hu, nosalty.hu, sobors.hu, kiskegyed.hu, gastrohobbi.hu
with schema.org fallback for other sites.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All user-facing admin passwords now use type: password instead of
type: secret, giving users a visible editable field with Generate
button (matching Paperless-ngx pattern).
Affected apps: Nextcloud, Grafana, Kimai, Code-server
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Compose templates were mounting app data at ${HDD_PATH}/appdata/ instead
of ${HDD_PATH}/felhom-data/appdata/ as designed in the v0.26.0+ path
structure. Affects: nextcloud, immich, paperless-ngx, romm.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Backend: wget missing from image, use python urllib instead.
Frontend: localhost resolves to IPv6, use 127.0.0.1.
Backend: add SECRET_KEY env var (v0.11.0 reads it directly).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All 51 docker-compose.yml: replaced hardcoded subdomain.${DOMAIN}
with ${SUBDOMAIN}.${DOMAIN} in Traefik labels, app env vars, and
comments.
All 51 .felhom.yml: added SUBDOMAIN deploy field (type: subdomain)
with default matching existing subdomain metadata value.
Works with felhom-controller v0.27.0 which validates and stores the
user-chosen subdomain in app.yaml. Existing deployed apps get
SUBDOMAIN auto-injected via InjectMissingFields() on next sync.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Part of v0.14.0 storage architecture overhaul — standardize
app data paths under appdata/ instead of storage/.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
FileBrowser is now deployed as infrastructure via docker-setup.sh,
no longer managed through the app catalog.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hungarian quotation marks „..." used ASCII " as closing quote, which
terminated the YAML double-quoted string prematurely. Escaped with \".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>