apps/controlplane-api: FastAPI control plane and training APIsapps/mcp-mock: capture server and observer pipelineapps/controlplane-ui: Vite/React frontendinfra: local Postgres and Redis via Docker Composescripts: dev startup, shutdown, and health-check helpers
From the repo root:
make devThat starts:
- Postgres via Docker on
localhost:5433 - Redis via Docker on
localhost:6379 - Control Plane API on
http://localhost:8081 - Capture Server on
http://localhost:8082 - Controlplane UI on
http://localhost:5173 - Training Chrome is started on demand per training session from the UI
make dev-stopmake doctorUI dependencies:
cd apps/controlplane-ui
npm installPython dependencies:
python3 -m pip install -r apps/controlplane-api/requirements.txt
python3 -m pip install -r apps/mcp-mock/requirements.txtThe repo root .gitignore is the canonical ignore policy for the monorepo.
Generated local state should stay out of version control, including:
- virtual environments
node_modulesand UI build output- Python cache directories and pytest cache
- local dev logs and PID files
apps/mcp-mock/output/observer artifacts- local
.envfiles
Without the wrapper, local startup was effectively:
cd infra && docker compose up -d
cd apps/controlplane-api && python3 -m uvicorn main:app --reload --port 8081
cd apps/mcp-mock && python3 -m uvicorn app.main_server:app --reload --port 8082
cd apps/controlplane-ui && npm run devThen, in the UI:
- Open
Training - Create a training session
- Start
Session Chrome - Capture against that session-scoped browser
This make dev wrapper is the low-friction fix. The next cleaner step would be to package the Python services and UI under a single process manager:
docker composefor Postgres and Redis only, which you already haveovermind,foreman, orhonchowith aProcfilefor the UI and both APIs- session-scoped Chrome management stays in the API/UI instead of a global dev bootstrap
If you want, I can do that next and replace the shell launcher with a Procfile.dev setup.