Browser-first (tablet-first responsive) operator and SME interface.
Vite reference for this repo:
../../documentation/portal/vite-mental-model.mdNode runtime: Node.js 20.x (any patch release in the v20 LTS line is acceptable).
npm --prefix apps/portal-web install50102), then run:
npm --prefix apps/portal-web run dev -- --host 0.0.0.0 --port 5173http://127.0.0.1:5173/ for the new portal landing page (six cards, including Admin).http://127.0.0.1:5173/stats/ for the statistics workspace.http://127.0.0.1:5173/cashier/ for the cashier workspace.http://127.0.0.1:5173/admin/ for statistics and cashier company-map setup, connection testing, database discovery, and live-vs-mock runtime diagnostics.http://127.0.0.1:5173/under-development/ for explicit placeholder pages while unfinished workspaces are being rebuilt.Recommended on Linux/Windows:
nvm, nvm-windows, asdf, fnm) that can install Node 20.x..nvmrc and .node-version at root with 20.18.0.The local Vite dev server proxies these API routes to the running backend:
/apps, /companies, /ingest, /responses, /operations, /contracts, /sessions, /ready, /state, /sender, and /dbcore.
/dbcore is a local-development proxy only. Production nginx intentionally returns 404 for /dbcore so database-abstraction-core stays an internal adapter service; production browser flows should use published capetown-faas-core routes.
Write-safety controls in the UI:
day_end still requires backend-side runtime enablement with CASHIER_ENABLE_DAY_END_WRITE=1; the frontend alone cannot turn that write path on.Operational controls:
routing_key: system and follows /system/shutdown for live state.metadata.system_shutdown when backend workers complete, enabling in-flight sessions to show shutdown status immediately.portal-mobile/ingest queue pathindex.html portal landing entry.admin/index.html admin setup entry.cashier/index.html cashier workspace entry.stats/index.html statistics workspace entry.under-development/index.html explicit under-development workspace entry.src/ application source (app.ts for legacy-route retirement redirects, landing.ts for landing flow, cashier.ts for cashier, stats.ts for statistics, admin.ts for admin setup, debtors.ts for debtors, under-development.ts for unfinished workspaces).