A laundry machine monitoring system that polls machine states, detects transitions, and logs events.
| Directory | Purpose |
|---|---|
backend/ |
Production app code — polls Azure or Sandbox API |
sandbox/ |
Testing tool — mock API + web UI matching real app data |
Run all commands from the root directory. Use docker compose (no hyphen).
| Command | Profile | What's running |
|---|---|---|
docker compose --profile sandbox up --build -d |
Sandbox | Mock API + Web UI (port 6942) + Backend polling Mock + DB + Redis |
docker compose --profile production up --build -d |
Production | Real Backend polling Azure + DB + Redis |
- Sandbox URL: http://localhost:6942
- Production: Runs in the background, logging to
laundro_events.logand PostgreSQL.
If you get errors about "Port already in use" (5432 or 6379), it means a previous session didn't close properly.
| Action | Command |
|---|---|
| Stop & Clean (Recommended) | docker compose --profile sandbox --profile production down |
| Stop only (keep containers) | docker compose --profile sandbox --profile production stop |
| Nuke everything (wipe DB) | docker compose --profile sandbox --profile production down -v |
| Service | Command |
|---|---|
| Everything | docker compose logs -f |
| Sandbox Backend | docker compose logs -f app-sandbox |
| Production Backend | docker compose logs -f app-prod |
| Sandbox UI | docker compose logs -f sandbox-api |
If you can't start the app because "address already in use":
- Run
docker compose --profile sandbox --profile production down - If it still fails, run
docker psto see if any straylaundro-containers are running and kill them manually withdocker rm -f <id>.


