2.4 KiB
KROW Workforce Control Tower
A standalone frontend application. There is no backend, no external API and no login: the app opens directly into the Control Tower UI, locally and when deployed, and keeps working with no network at all.
Frontend → local data / React state / localStorage → KROW UI
Running it
npm install
npm run dev # http://localhost:5174
npm run build # static bundle in dist/
npm run preview # serve the production build locally
Deployment is a static-file deploy: serve dist/ with any web server, with a
SPA fallback so deep links (/Events, /Schedule, …) resolve to index.html.
The included Dockerfile + nginx.conf do exactly that.
Where the data lives
Everything the UI reads and writes goes through one object — krow, exported
from src/api/client.js:
| Area | Local implementation |
|---|---|
krow.entities.* |
src/api/local/store.js — collections held in memory and mirrored into localStorage |
| Starting data | src/api/local/seedData.js — the bundled demo dataset, copied in on first read |
| Data model | src/api/local/schemas.json — entity schemas, loaded on demand for .schema() |
krow.auth |
src/api/local/auth.js — a single local operator profile; no sign-in |
krow.integrations.Core |
src/api/local/integrations.js — uploads become local data/object URLs; email/SMS are recorded locally |
krow.agents |
src/api/local/agents.js — assistant threads stored locally, answered by src/lib/owliver/owliverEngine.js |
Edits persist per browser. krow.resetLocalData() (from the console, or any
code) clears local data and restores the bundled demo dataset.
Collections with no seed data start empty, which is the empty state the pages
already render — so adding an entity needs no wiring, only a key in
seedData.js if it should start with rows.
Layout
src/
api/ the local client (client.js) and its implementation (local/)
pages/ one file per route, auto-registered via pages.config.js
components/ feature components and the ui/ primitives
lib/ shared helpers, the Owliver engine and page registry
Layout.jsx the Control Tower shell: header, sidebar, Owliver