Case Study · Multi-Company ERP · Proof of Concept
HyperOS
A custom operating system for a garage door installation business: one project number from the first phone call to the day the door is installed and paid, with a server-side workflow engine enforcing the rules a 467-page enterprise spec demanded.
One record. One number. Six phases.
The legacy system was so disliked the owner wanted it gone. Enquiries arrived by phone and WhatsApp with no tracking; jobs moved between departments by word of mouth; stock was checked by walking to the warehouse. HyperOS replaces it with a single project spine: born at enquiry, carrying one number through survey, quote, manufacturing, installation and payment. The five WORK screens are just filtered views of this pipeline.
This page is laid out the same way the product thinks: phase by phase. Demo data is fictional; the production counts at the end are real.
PRJ-2026-000047
Every tab adds data to the same record. Nothing is ever retyped, nothing is ever a separate record.
The workflow engine, with its gates up
One Postgres function, advance_workflow(), validates every transition, enforces the business gates, reassigns the owner, writes an immutable audit trail and recalculates the health score. Try to advance without paying the deposit.
Configure, price, quote: live
Sales builds a door visually; the price recalculates as options change. When a surveyor submits measurements instead, generate_quote_from_survey() produces the same costed quote automatically from 18+ fields per opening.
Accepting a quote fires one trigger that creates the project, job, work order, bill of materials, stock reservations and installation record in a single transaction.
44 vehicles, on real roads
MapLibre GL with CARTO dark tiles; vehicles animate along genuine OSRM road geometry with Turf.js interpolation. Green is moving, amber is parked, red means the licence expired and the dashboard already knows. Tap a vehicle.
The urgency row answers “what needs me today?”
Installs this week 4
Licence alerts 3
Stock below reorder 5
Overdue invoices 7
Each card deep-links into the right section and tab. Amounts and names in this demo are fictional.
Three brands, one codebase, eight minutes
Colours, logos and copy load from a company_branding table on login. The full visual reskin took under eight minutes because every component reads tokens, not hex codes. Click a tenant.
In the shipped UI the sub-brand orange lives in the logo only; the working accent stays Abyssal Blue so status colours keep their meaning. The demo above exaggerates on purpose.
Documented in the code, not invented for this page
Impressive in screenshots, harder to scan dense tables. Dark stayed as a toggle.
It fatigued the eye and fought the status colours. Abyssal Blue #3A62E4 became the sole accent, written into theme.ts as a rule.
The spec left a pre-project gap. Moving creation to first contact gave every record one number for life.
Six client-side update calls became one server-side function that validates, gates, syncs and audits atomically.
Dramatic, but road names vanished and markers drowned. Dark tiles keep the fleet legible.
The only export the old system allowed. Customers, vehicles, products and invoices were extracted shot by shot into Supabase.
React Native + Expo (web export) · TypeScript · Supabase, 130+ tables with RLS · MapLibre GL + OSRM + Turf.js · Recharts · Cloudflare Pages · Resend · Playwright, 26/26 passing · DM Sans on Airwave surfaces
Captures land as the POC hardens

A formal UX audit scored the mid-build 4.7/10 and listed every stubbed button and data bug. The fix sprint that followed is why the POC is demo-ready. We publish that number because honest audits are the product.