Skip to main content
This page is the fastest path to a running Causeloop product stack on your machine. It is deliberately condensed — for a full walkthrough of every service and what it does, see Local product stack; for the complete create-tenant-to-go-live flow, see Local onboarding walkthrough.
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/backend and causeloop.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

This starts Postgres (pgvector), Redis, MinIO, Mailpit, runs migrations as a one-off 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

By default this checks health through the frontend’s /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:
This credential is committed to infra/docker-compose.product.yml for local Compose only. It must never be used, referenced, or expected outside a local checkout.

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.