The product stack is Docker Compose only. It needs no OpenAI key, no host Node/Python dependencies, and no
.env file — everything is baked into the committed lockfiles and container images.Prerequisites
- Docker with Compose v2
- Python 3.12+ (to run the local doctor script)
- Both repos checked out as siblings:
causeloop.ai/backendandcauseloop.ai/frontend— the Compose file builds the frontend image from../../frontend
1
Clone both repos side by side
2
Run the local doctor
Non-mutating: it checks Docker, Compose, and the sibling frontend checkout without starting anything or contacting a remote service.
3
Bring up the product stack
migrate container, creates the local staff user, starts the product-worker and provisioner-worker processes, and gates the frontend on the API’s /health/ready. On Docker Desktop instances limited to roughly 1 GB of memory, run docker compose ... build first and then up -d so the frontend compiler doesn’t compete with the running data plane.4
Run the smoke test
/api/backend proxy at http://127.0.0.1:13000, not the API container directly — the same path the browser uses in every environment.5
Open the console
Visit
http://127.0.0.1:13000/login.6
Sign in as staff
Choose Causeloop Employee on the login screen and sign in with the local-only credential:
What you get
Every published port is bound to
127.0.0.1. Override any of them with the corresponding CAUSELOOP_*_PORT environment variable before running docker compose up.
There is no demo-session or synthetic-report fallback anywhere in this stack: to see real data in the console you create a tenant, provision it, ingest a dataset, train and activate a checkpoint, and invite a tenant user — the next page walks through exactly that.
Useful commands
down preserves the named Postgres/MinIO/Redis volumes. Do not add -v unless you deliberately want to delete local product data.