- Increase memory limit from 4GB to 6GB for larger model downloads
- Add MACHINE_LEARNING_MODEL_TTL=300 to keep models in memory longer
- Add MACHINE_LEARNING_MODEL_TTL_POLL_S=10 for faster model unloading checks
Note: Models still failing to download due to network timeouts.
Uploads work but ML features (OCR, facial recognition) fail.
- Change deploy-dev workflow runner from ubuntu-latest to nas
Fixes: CI failing to access /volume1/docker paths
- Add missing immich-machine-learning service to compose
Fixes: Mobile photo uploads failing due to ML model download timeouts
- Add 10min timeout for model downloads (MACHINE_LEARNING_REQUEST_TIMEOUT=600)
- Add 4GB memory limit to prevent OOM during model loading
- Mount model-cache volume for persistent model storage
- Add health check and proper logging
Impact: Restores dev deployment pipeline and mobile photo backup functionality
- Add 10m read/write timeouts to Caddy reverse proxy for photos domains
- Fix ML service URL to use correct docker network hostname
- Resolves 'Request aborted' errors during mobile photo uploads
- Fix body/html dark background to surface-950
- Add dark scrollbar styling
- Fix App.svelte wrapper to use Tailwind dark: classes instead of conditional strings
- Add dark:bg-surface-800 and dark:border-surface-700 to all cards in Dashboard, Docker, Files, Gitea
- Add dark text variants for headings, labels, and content text
- Add dark hover states for interactive elements
- Enable cross-category sidebar drag-and-drop
Bind navidrome, n8n, immich, openclaw, gitea web ports to 127.0.0.1
to prevent direct LAN access bypassing Caddy/Authelia.
Tailscale userspace networking on Synology proxies through localhost,
so VPS Caddy access via Tailscale IP continues to work.
Gitea SSH port (2222) remains on all interfaces for external git push.
Phase 6: OpenClaw docker-compose (port 3100) with health check
Phase 9: Enhanced backup.sh with full DB/config coverage + Telegram alerts
Phase 10: Health checks on all compose files, /api/system/notify endpoint