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>
proxy.ts already declared auth disabled, but layout.tsx still wrapped the
tree in ClerkProvider and topbar.tsx rendered UserButton. @clerk/nextjs v7
aborts `next build` without a real publishable key, so the image could not
be built at all. Remove the remaining Clerk surface, drop the dependency,
and delete the sign-in/sign-up route groups.
Also fix two pnpm failures this exposed: the deps stage never copied
pnpm-workspace.yaml (so the build-script allowlist was invisible), and
pnpm 11 renamed ignoredBuiltDependencies to allowBuilds. Declare both
spellings and pin packageManager so this cannot drift again.
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>