# FlowMaster — Canvas **Live at https://canvas.flow-master.ai** · operations cockpit for every process the company runs. Canvas is the FlowMaster operator surface. Industrial-blueprint doctrine: paper canvas, navy frame, amber accent, 1px hairlines, square edges, monospace operational density. People, Finance, Procurement, and IT in one frame. ## What it is - React 19 single-page app (Vite + ReactFlow + cmdk + framer-motion + zustand + dagre). - Connected directly to EA2 in the browser via the API client at `src/lib/api.ts`. There is one data source: live EA2. No bundled snapshot, no synthetic blueprints. - Scenes: Landing, Mission Control, Run History, Process Studio, Hubs, Agent, Settings, Login, SSO callback. - Agent scene has a chat surface with per-tenant local memory (`src/lib/agentMemory.ts`) and three intents: navigate, retain a fact, start a process draft. - Hubs surface departmental lenses (People, Finance, Procurement, IT). - Three view-as personas (CEO, Head of People, Head of IT) re-sign in under the persona's email so the operator UI reflects the seat. ## Run, test, build ```bash pnpm install # dev (with backend proxy for live mode) pnpm dev # → http://127.0.0.1:5173 # tests pnpm test # vitest # build pnpm build # tsc + vite, single chunk ~234 KB gz ``` ## Deploy Deployment is tracked in `FM06/flowmaster-ops`, overlay `manifests/overlays/demo/`: - `mc-deployment.yaml` — replicated nginx Deployment - `mc-service.yaml` — ClusterIP service on port 80 - `mc-ingress.yaml` — Traefik ingress at `canvas.flow-master.ai` with cert-manager DNS-01 cert nginx in the image reverse-proxies `/api/*` to `https://demo.flow-master.ai` so the SPA is same-origin (no CORS). ```bash pnpm build docker buildx build --platform linux/amd64 \ -f Dockerfile.runtime \ -t gitea.flow-master.ai/shad/mission-control-demo:sha- \ --load . docker push gitea.flow-master.ai/shad/mission-control-demo:sha- # Then bump the image pin in manifests/overlays/demo/mc-deployment.yaml. ```