Workshop Wrench
Shop floor + office
Job board, DVI, estimates, invoices, My Day. Same tenant rules as the browser app.
Local :3101 or hosted app origin when allowlisted
Loading
Packaged hosts · local
Electron wraps the shop PWA, Wrench Ops, and Parts Exchange so a counter PC can pin the right app. The shells share a hardened main process. They are not a second product line, not DRM, and not production shop hosting.
Shop floor + office
Job board, DVI, estimates, invoices, My Day. Same tenant rules as the browser app.
Local :3101 or hosted app origin when allowlisted
Platform operators
Tenant list, onboarding queue, session revoke. Not a public marketing surface.
Local :3102
B2B marketplace
Buyer/seller desks and wrecker dispatch in the seeded catalog. Not national GMV.
Local :3103
Bring the stack up
Docker Engine, Postgres/Redis, shop + marketplace APIs, then the three web origins. See docs/process/electron-development-preflight.md.
Gate, then launch
pnpm dev:electron:check must report ready_for_electron. Then pnpm dev:electron starts the three shells.
Walk a playbook
Use the same demo access desk as the browser. Floor-ops overlays (stall-risk, last-unit conflict, mock SMS, digest) are in the seeded garage.
An open Electron window or a CDP listener only proves Chromium started. Run pnpm dev:electron:check before claiming the desktop stack is up.
Local packaging exists. Code signing, installer distribution, and auto-update of unsigned builds are not claimed. Heartbeat uses server time.
Packaged builds pin origins. Hosted mode has no Attach URL. Appliance recovery may start an allowlisted local stack — not an arbitrary remote attach box.
SMS mock, Stripe stub, Xero dry-run, GCP not applied — the desktop host does not make shells Connected.