ops/deploy.py ships each service's build context to the remote Docker
daemon's /build endpoint and pushes docker-compose.prod.yml as a Portainer
stack — there is no docker CLI in WSL and Unraid's SSH is closed.
The prod compose file drops the dev bind mounts and uvicorn --reload,
publishes only the frontend port (8000 is taken by Portainer's Edge
tunnel), and pins bms_net to 172.31.42.0/24 because the host's default
address pools are fully subnetted. Mosquitto's config is baked into an
image since the repo is not checked out on the host.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
- Rewrote README.md with full step-by-step setup guide covering Docker
Compose deployment, environment configuration, port reference, local
dev setup, and reset instructions
- Added backend/.env.example and frontend/.env.local.example so new
deployers know exactly what to configure without any secrets committed
- Updated .gitignore to allow .env.example files through
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>