Same guard as the four site repos. myAi was the ONLY stack that kept its
environment variables through the 26 July migration, so it alone deployed
correctly all along -- but it shares the ${IMAGE_TAG:-staging} default that
made the others fail silently, so it gets the same treatment.
1. ${IMAGE_TAG:-staging} -> ${IMAGE_TAG:-IMAGE_TAG-NOT-SET} on all eight
images: an unconfigured stack fails the pull rather than quietly becoming
staging.
2. A smoke job that asks the deploy host what commit it serves, via a
/version.json stamped into the web image at build time.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WpTYCBLH58XzrM7n3xPJ5N
myAi
The myai.ro platform — a set of .NET microservices (CV matching, RAG, email, CV search, page fetching, …) behind a web frontend + API. Part of the easySoft platform.
Layout
Multiple services (*-api, *-job) + web, sharing a common bootstrap in
startup-helpers/ (Serilog, Swagger, .env/Key Vault loading, middleware). See CLAUDE.md
for the full service map, dependency chain, and conventions.
Run locally
docker compose up --build # or run individual services with: dotnet run --project <svc>
Deploy
CI builds registry.easysoft.ro/apps/myai-*:{staging,production}; Watchtower rolls them out to
the staging (10.0.0.183) + production (10.0.0.248) Portainer stacks. Edge Caddy serves
myai.ro (prod) / myai.easysoft.ro (staging).
Logging
Every service: ConfigureJsonSerilog(name, version) → Serilog Compact JSON to stdout → Grafana
Alloy → Loki. No app metrics/traces (simple services).
See CLAUDE.md for the detailed solution guide and ACCESS.md (local, gitignored) for infrastructure access.