- Remove src/data/synthetic.ts + its test (AR refund, HCM onboarding, GL close, Service Ops blueprints were hand-modelled fakes). - Remove DataMode='snapshot'; the store now boots straight into live EA2 with no fallback. EA2 errors surface as toasts, not fake data. - Topbar / Settings / CommandBar wording: 'SNAPSHOT'/'LIVE' becomes the unambiguous 'EA2' badge. No more user-facing mode switch. - package.json name flowmaster-mission-control-demo → flowmaster-canvas. - README rewritten — no longer calls the product a demo. - store.test: drop the two tests that relied on synthetic scenarios always being present; add one asserting an EA2-empty response leaves the store cleanly empty (no error-stuck state). All 23 vitest tests pass. tsc + vite build green. Bundle dropped from ~238 kB gz → ~234 kB gz.
62 lines
2.1 KiB
Markdown
62 lines
2.1 KiB
Markdown
# 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-<git> \
|
|
--load .
|
|
docker push gitea.flow-master.ai/shad/mission-control-demo:sha-<git>
|
|
# Then bump the image pin in manifests/overlays/demo/mc-deployment.yaml.
|
|
```
|