Validates current password, enforces 8-char minimum, links from
EasyAdmin user menu. Also fixes route loader (attribute scan instead
of broken easyadmin.routes type).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Unix socket volume was root-owned, FPM running as uid 1000 couldn't
create the socket. TCP app:9000 works without privilege changes and
has negligible performance difference in a local Docker network.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces TCP app:9000 with a shared Unix socket volume, adds domain
with automatic Let's Encrypt TLS, and exposes ports 80/443 on Caddy.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Implements OllamaClientInterface against the Mistral Cloud API
(/v1/chat/completions). Switch by toggling the alias in services.yaml
and pointing AI_TEXT_MODEL / AI_VISION_MODEL env vars at the MISTRAL_*
or OLLAMA_* counterparts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>